代码地址:https://blog.csdn.net/qq_41603898/article/details/80968266
以VS为例解析:
先创建项目,主函数,再写窗口结构体
//一.创建窗口结构体
WNDCLASSEX wc;
wc.cbClsExtra = 0;//紧跟在窗口类尾部的一块额外空间
wc.cbSize = sizeof(wc);//结构体大小
wc.cbWndExtra = 0;//紧跟在窗口实例尾部的一块额外空间
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;//背景颜色
wc.hCursor = NULL;//光标
wc.hIcon = NULL;//窗口左上角的图标
wc.hIconSm = NULL;//状态栏中的图标,默认与左上角图标一致
wc.hInstance = hInstance;//实例句柄
wc.lpfnWndProc = NULL;//回调函数
wc.lpszClassName = NULL;//结构体名字
wc.lpszMenuName = NULL;//菜单栏名字
wc.style = CS_HREDRAW | CS_VREDRAW;//窗口水平变化或是垂直变化时重绘窗口
二.注册窗口结构体
if (0 == RegisterClassEx(&wc))(0写左边是防止少写一个等号会产生报错信息,如果写右边少写一个等号就是赋值成0)
{
int eNum = GetLastError();//注册失败的错误代码
return 0;//注册失败
}
三.创建窗口
窗口句柄=HWND CreateWindowEx(
DWORD dwExStyle,//额外风格,比如WS_EX_WINDOWEDGE窗口有边框
LPCSTR lpClassName,//窗口结构体名字,用于系统区分
LPCSTR lpWindowName,//窗口左上角图标后的名字
DWORD dwStyle,//窗口风格,WS_OVERLAPPEDWINDOW包含多个风格
int X,//距离屏幕左边的距离
int Y,//距离屏幕上边的距离
int nWidth,//窗口宽度
int nHeight,//窗口的高度
HWND hWndParent,//父窗口句柄
HMENU hMenu,//菜单句柄
HINSTANCE hInstance,//实例句柄
LPVOID lpParam);//传递给回调函数的参数,MDI多文档窗口样式时使用
四.显示窗口
ShowWindow(窗口句柄(上面第三块函数的返回值), 显示窗口的状态);
五.消息处理
读取消息
BOOL GetMessage(
LPMSG lpMsg,//读取的消息放到结构体里
HWND hWND,//NULL表示接受所有窗口的消息
UINT wMsgFilterMin,
UINT wMsgFilterMax);//处理消息的范围,0,0表示处理所有消息
翻译消息
BOOL TranslateMessage(CONST MSG *lpMsg);
分发消息
LRESULT DispatchMessage(CONST MSG *lpMsg);
六.回调函数
LRESULT CALLBACK WndProc(//WndProc名称自定义
HWND hwnd,//窗口句柄
UINTmessage,//消息ID
WPARAM wParam,
LPARAM lParam)//两个消息参数
LRESULT CALLBACK WndProc(HWND hwnd,UINTmessage,WPARAM wParam,LPARAM lParam)
{//让系统自动处理默认消息
return DefWindowProc(hwnd,message,wParam,lParam);
}
wc.lpfnWndProc = WndProc;//回调函数
可将代码和解析结合看