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;
}