下面代码参考于MSDN
需要VC创建一个空的工程(不是Win32项目),代码仅仅是阐述创建窗口的过程。
#include "windows.h"
#pragma comment(lib,"User32")
//声明消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
void main()
{
HINSTANCE hInstance= (HINSTANCE) GetCurrentProcessId();//当前进程的ID
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 = NULL; //默认图标
wcex.hCursor = LoadCursor(NULL, IDC_ARROW); ; //光标
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //背景刷
wcex.lpszMenuName = NULL; //没有菜单
wcex.lpszClassName = "WindowClassName"; //窗口类名(和c++的class一点关系都没有)
wcex.hIconSm = NULL; //默认小图标
// 向Windows注册窗口,成功后可以接收消息
if ( ! RegisterClassEx(&wcex) )
{
return ;
}
//创建窗口
HWND hWnd = CreateWindow("WindowClassName", "Title", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return;
}
//显示窗口
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
MSG msg;
//进入消息循环
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg); //翻译消息
DispatchMessage(&msg); //派发消息
}
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if ( message == WM_DESTROY )
{
PostQuitMessage(0); //发送退出消息,一般情况下,随之而来就是应用程序的关闭
}
return DefWindowProc(hWnd, message, wParam, lParam); //采用默认的消息处理方式
}
创建一个Windows窗口,首先就要向Windows注册这个窗口的相关信息(WNDCLASSEX或WNDCLASS结构体),然后使用CreateWindow创建窗口,到这窗口创建完毕。
ShowWindow,UpdateWindow是将窗口绘制出来。剩下的代码就是创建一个消息循环,这样窗口就可以从消息队列中获取消息了。
(完成RegisterClassEx,CreateWindow两步后,窗口就可以接收消息)