windows 消息循环和窗口与线程关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows 消息循环和窗口与线程关系相关的知识,希望对你有一定的参考价值。

/WinMain函数  

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
g_hinstance = hInstance;
if( !Register("Main",WndProc) ) //注册窗口类 RegisterClassEx
{
MessageBox(NULL,"注册失败","Infor",MB_OK);
return 0;
}
HWND hWnd = CreateMainWnd("Main","window"); //创建窗口CreateWindow
Display(hWnd);
Message();//消息循环 在主线程中负责处理OS发来的消息
return 0;
}
//消息循环 (消息泵)
void Message()
{
MSG nMsg ={ 0 };
while (GetMessage(&nMsg, NULL, 0, 0))
{
TranslateMessage(&nMsg);
DispatchMessage(&nMsg);
}
}

//windows 消息处理函数
LRESULT CALLBACK WindowProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
//最后,你不愿意处理的消息交给默认消息处理函数
Return DefWindowProc( hWnd, nMsg, wParam, lParam); // 默认windows消息处理函数
}

//其中操作系统将硬件消息分发给每个窗口对应的线程的消息泵来处理
//
//如果在子线程中创建了窗口(wnd),则子线程中需要有处理消息的消息泵, 消息不会发到主线程的消息循环
//
//CreateThread(NULL,0,ThreadProcTrade,NULL,0,&threadID_Trade);

DWORD WINAPI ThreadProcTrade(LPVOID lpParam)
{
g_hinstance = hInstance;
if (!Register("Main", WndProc)) //注册窗口类 RegisterClassEx
{
MessageBox(NULL, "注册失败", "Infor", MB_OK);
return 0;
}
HWND hWnd = CreateMainWnd("Main", "window"); //创建窗口CreateWindow
Display(hWnd);
Message(); //消息循环 子线程中负责处理OS发来的本线程创建的UI的消息
return 0;
}

 

以上是关于windows 消息循环和窗口与线程关系的主要内容,如果未能解决你的问题,请参考以下文章

iOS消息循环-模式匹配

等到消息循环在另一个线程上时窗口关闭

使用 Windows 消息循环的回调实现

windows程序消息循环机制

Windows 线程何时需要消息循环,为啥?

win32消息循环