C++消息处理函数

2024-12-27 04:49:22
推荐回答(3个)
回答1:

点击关闭按键是会发送消息给你的程序去处理的,也就是WM_CLOSE消息。这些消息处理都在回调函数 WInProc(一般这样命名,可以更改)中 类似这样:
LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_KEYUP:
switch (wParam)
{
case VK_ESCAPE:
//User has pressed the escape key, so quit
DestroyWindow(hWnd);
return 0;
break;
}
break;

}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
你可以在 switch(msg) 下增加一个case语句,处理你的WM_CLOSE消息。
case WM_CLOSE:
if (IDYES == MessageBox(hWnd,"是否真的要退出?",NULL,MB_YESNO))
{
DestroyWindow(hWnd);
}
break;

回答2:

点击关闭按键是会发送消息给你的程序去处理的,也就是WM_CLOSE消息。这些消息处理都在回调函数 WInProc(一般这样命名,可以更改)中 类似这样:
LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_KEYUP:
switch (wParam)
{
case VK_ESCAPE:
//User has pressed the escape key, so quit
DestroyWindow(hWnd);
return 0;
break;
}
break;

}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
你可以在 switch(msg) 下增加一个case语句,处理你的WM_CLOSE消息。
case WM_CLOSE:
if (IDYES == MessageBox(hWnd,"是否真的要退出?",NULL,MB_YESNO))
{
DestroyWindow(hWnd);
}
break;

回答3:

DefWindowProc和WindowProc都是回调处理消息API函数,DefWindowProc处理WindowProc没处理的消息。但是在你程序的场景中,CMFCWnd是CFrameWnd的子类,仅仅调用DefWindowProc不能实现全部CFrameWnd特色消息,必须调用父类的消息处理函数才行。