简单创建一个WIN32应用程序步骤
简单创建一个WIN32应用程序步骤
每个 C 和 C++ 应用程序必须具有一个 main 函数。此函数是应用程序的起始点。类似地,在 Win32 应用程序中,每个应用程序必须具有一个 WinMain 函数。WinMain 的语法如下所示:
int WINAPI WinMain(HINSTANCE hInstance,//应用程序当前事例的句柄
HINSTANCE hPrevInstance,//应用程序的先事例的句柄
LPSTR lpCmdLine,
int nCmdShow);除 WinMain 外,每个 Win32 应用程序还必须具有第二个函数(通常称为 WndProc),它代表窗口过程。
WndProc 的语法如下所示:LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
此函数的用途是处理应用程序从操作系统接收的任何消息。应用程序何时从操作系统接收消息?始终接收!
例如,假设我们创建了包含“确定”按钮的对话框。当用户单击该按钮时,操作系统向应用程序发送消息,
使我们知道某位用户按下了此按钮。WndProc 函数负责响应该事件。在本示例中,适当的响应可能是关闭对话框。 向 WinMain 添加功能。首先,在 WinMain 函数内部创建 WNDCLASSEX 类型的窗口类结构。此结构包含有关窗
口的信息,如应用程序图标、窗口的背景色、在标题栏中显示的名称、窗口过程函数的名称等等。
典型的 WNDCLASSEX 结构如下:
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));现在已经创建了窗口类,接下来您必须注册它。使用 RegisterClassEx 函数,并将窗口类结构作为参数传递
if (!RegisterClassEx(&wcex))
{
MessageBox(NULL,
_T("Call to RegisterClassEx failed!"),
_T("Win32 Guided Tour"),
NULL);
return 1;
}现在已经注册了您自己的类,接下来创建窗口。使用 CreateWindow 函数,如下所示:HWND hWnd = CreateWindow(
szWindowClass,
szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
500, 100,
NULL,
NULL,
hInstance,
NULL
);
if (!hWnd)
{
MessageBox(NULL,
_T("Call to CreateWindow failed!"),
_T("Win32 Guided Tour"),
NULL);
return 1;
}此函数返回 HWND,它是某个窗口的句柄。
创建了窗口后,我们可以使用以下代码将其显示在屏幕上:ShowWindow(hWnd,
nCmdShow);
UpdateWindow(hWnd); 到目前为止,此窗口还不会显示,因为我们尚未实现 WndProc 函数。
WinMain 的最后一步是消息循环。此循环的用途是侦听操作系统发送的消息。应用程序收到消息后,将该消息调度到 WndProc 函数,以便进行处理。消息循环类似于:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
向 WndProc 添加功能