步骤如下:
1. 宏定义Windows版本为XP #define _WIN32_WINNT 0x0501
2. 包含头文件 #include
3. 入口函数 WinMain
4. 注册窗口 RegisterClassEx
5. 创建窗口 CreateWindow
6. 显示和更新窗口 ShowWindow/UpdateWindow
7. 消息循环
8. 消息处理
入口函数WinMain,该函数是由系统调用的,执行成功后进入消息循环直到得到WM_QUIT消息后结束程序返回msg.wParam消息
代码:
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
MSG msg;//消息结构
BOOL fGotMessage;
//注册窗口
if(!InitApplication(hinstance)){return FALSE;}
//创建窗口
if(!InitInstance(hinstance,nCmdShow)){return FALSE;}
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
//消息循环
while((fGotMessage = GetMessage(&msg,(HWND)NULL,0,0)) != 0 && fGotMessage != -1){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
注册窗口,所有窗口在创建之前都必须注册.所以我们要先注册我们的程序的主窗口,控件则已由系统注册所以不需要注册.使用函数RegisterClassEx(&wcx)注册,参数是一个指向WNDCLASSEX窗口类的结构.结构的所有属性都必须填写合适的内容
代码:
BOOL InitApplication(HINSTANCE hinstance){
WNDCLASSEX wcx;
//填充结构
wcx.cbSize = sizeof(wcx);//WNDCLASSEX 结构的大小
wcx.style = CS_HREDRAW | CS_VREDRAW;//如果大小改变了重绘窗口
wcx.lpfnWndProc = MainWndProc;//窗口消息处理函数
wcx.cbClsExtra = 0;//无附加窗口类内存
wcx.cbWndExtra = 0;//无附加窗口内存
wcx.hInstance = hinstance;//应用程序实例
wcx.hIcon = LoadIcon(NULL,NULL);//应用程序的图标
wcx.hCursor = LoadCursor(NULL,IDC_ARROW);//鼠标指针
wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//背景画刷
wcx.lpszMenuName = NULL;//菜单资源
wcx.lpszClassName = "MainWClass";//窗口唯一类名
wcx.hIconSm = NULL;//标题栏的图标
//注册窗口类,返回
return RegisterClassEx(&wcx);
}
创建窗口,返回句柄
hwnd = CreateWindow(
"MainWClass",//窗口类名,使用之前注册的主窗口类
"御坂网络欢迎你",//窗口名,显示在串口标题栏上的字符串
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_POPUPWINDOW,//窗口样式
CW_USEDEFAULT,//水平位置(默认)
CW_USEDEFAULT,//垂直位置(默认)
800,//宽
600,//高
(HWND)NULL,//无父窗口
(HMENU)NULL,//菜单
(HINSTANCE)hinstance,//应用程序实例
(LPVOID)NULL//无窗口创建数据
);
消息处理函数,回调函数窗口句柄是之前创建的主窗口的句柄.
LRESULT CALLBACK MainWndProc(
HWND hwnd,//窗口句柄
UINT uMsg,//消息标识符
WPARAM wParam,//消息的第一个参数
LPARAM lParam//消息的第二个参数
)
用switch来对不同的消息进行处理.