windows定义了一个消息结构
typedef struct tagMSG {
HWND hwnd; //产生消息的窗口句柄(这个消息是哪个窗口产生的)
UINT message; //消息的类型 窗口的创建,鼠标的左键点击 键盘的按下。。消息
WPARAM wParam; //消息的附加内容,不同的消息有不同的含义
LPARAM lParam; //消息的附加内容,不同的消息有不同的含义
DWORD time; //消息产生的时间
POINT pt; //记录消息产生时光标的位置
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
一个应用程序的每一个动作,例如 :单击鼠标左键 键盘按下一个字母。都被windows封装成一个定义好的消息结构,发送到系统消息队列中。然后系统根据hwnd把消息发送给每一个窗口的消息队列中。
应用程序的消息循环 :应用程序从消息队列中取出消息,判断消息的类型。如果是关心的消息类型,处理。如果不是则交给windows处理。
//窗口回调函数
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
PTCHAR lpszClassName=TEXT("my first win32"); //要注册的类名
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow)
{
//第一步:注册自己的窗口类
WNDCLASS wc={0}; //把这个结构全部初始化成0
wc.lpszClassName=lpszClassName; //这个结构必须填的四个值 类名
wc.hbrBackground=(HBRUSH)COLOR_MENU; //背景颜色
wc.hInstance=hInstance; //模块基址
wc.lpfnWndProc=WindowProc; //窗口回调函数
if(!RegisterClass(&wc))
{
return REGISTER_FALD;
}
//第二步:使用自己注册的窗口类创建窗口
HWND hWindow= CreateWindow(lpszClassName,
L"win32 窗口",
WS_OVERLAPPEDWINDOW,
100,
100,
800,
600,
0,
0,
hInstance,
0
);
//第三步“显示创建的窗口”
ShowWindow(hWindow,SW_SHOW);
MSG msg;
//从应用程序消息队列里取出消息
while (GetMessage(&msg,hWindow,0,0)
{
//翻译消息
TranslateMessage(&msg);
//把消息发送给系统
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd, //窗口句柄 分辨出消息是哪个窗口的
_In_ UINT uMsg, //消息的类型
_In_ WPARAM wParam, //附加的附加内容,进一步说明消息
_In_ LPARAM lParam
)
{
switch (uMsg)
{
case WM_CREATE:
MessageBox(0,L"提示",L"窗口被创建",0);
return 0;//直接返回 表示已处理这个消息
}
return DefWindowProc(hwnd,uMsg,wParam,lParam); /自己不处理的消息给系统处理}