1.项目中需要在控制台等程序更新控制台界面
如何做?
控制台中用消息循环见代码:
MSG msg;
BOOL bRet;
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1 || msg.message == WM_QUIT)
{
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
什么时候发一个WM_QUIT?实践表明点控制台的删除按钮是不会发WM_QUIT消息的,这是可以在你认为其它程序已经更新完界面时候发一个PostQuitMessage(0);
还可以劫持关闭按钮事件,发一个WM_QUIT;
见代码:
unsigned int g_main_thread_id; BOOL WINAPI ConsoleCtrlhandler( unsigned int dwCtrlType ) { if (dwCtrlType == CTRL_CLOSE_EVENT) { PostThreadMessage(g_main_thread_id, WM_QUIT, 0, 0); return TRUE; } return FALSE; } int _tmain(int argc, _TCHAR* argv[]) { g_main_thread_id = GetCurrentThreadId(); SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleCtrlhandler, TRUE); //xxxx to do sth MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleCtrlhandler, FALSE); return 0; }