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

时间: 2024-11-19 18:08:13

windows 消息循环和窗口与线程关系的相关文章

Windows 消息循环(2) - WPF中的消息循环

接上文: Windows 消息循环(1) - 概览 win32/MFC/WinForm/WPF 都依靠消息循环驱动,让程序跑起来. 本文介绍 WPF 中是如何使用消息循环来驱动程序的. 4 消息循环在 WPF 中的应用 4.1 引入 只听说过 Dispatcher ,哪里来的消息循环? 先瞧一眼 WPF 启动运行堆栈: 可以发现 PushFrameImpl 这个方法. 去看其源码,就发现了熟悉的消息循环 : 可以理解为:Dispatcher 对消息循环的操作进行了"封装" . 那,Di

windows 消息循环的那些事

本文将结合网上的一些资料及自己的经验.见解,对windows消息机制进行简单的剖析,有不对的地方欢迎指正哈!! 首先,指明一些消息在windows系统中是什么角色: 消息是消息机制中的邮件,用于工作线程与UI线程.窗体与窗体.一个进程对另一个线程的窗体进行通讯.他是win32程序运行的血液,通过消息才能把整个系统关联起来. 消息对应于系统的一个UINT值,也即32位的无符号整形值,例如我们平时会自定义的WM_USER.WM_PAINT等等.它唯一的定义了一个事件,向 Windows发出一个通知,

理解Windows消息循环机制

理解消息循环和整个消息传送机制对Windows编程十分重要.如果对消息处理的整个过程不了解,在windows编程中会遇到很多令人困惑的地方. 什么是消息(Message)每个消息是一个整型数值,如果查看头文件(查看头文件了解API是一个非常好的习惯和普遍的做法)可以发现如下一些宏定义: #define WM_INITDIALOG                   0x0110 #define WM_COMMAND                      0x0111 #define WM_L

Qt for windows消息循环、libqxt分析和wince快捷键处理

利用Qt做windows图形界面开发和MFC相比,个人感觉还是比较简单好用的:首先利用Designer工具搞个ui文件:然后在程序中写几个信号和槽:然后加载ui文件:最后显示界面就搞定了. 在界面开发中,快捷键处理肯定是必不可少的.现在使用的是开源的第三方处理类:libqxt.它提供跨平台的解决方案:win和x11.使用起来也很方便.使用方便并不是万事大吉,我们要有求索精神:“知其然知其所以然”.好了废话不多说开始分析. Windows下程序设计总是要遵循它自身的机制的,在<windows程序设

细说UI线程和Windows消息队列

在 Windows应用程序中,窗体是由一种称为" UI线程( User Interface Thread)"的特殊类型的线程创建的. 首先, UI线程是一种"线程",所以它具有一个线程应该具有的所有特征,比如有一个线程函数和一个线程 ID. 其次," UI线程"又是"特殊"的,这是因为 UI线程的线程函数中会创建一种特殊的对象--窗体,同时,还一并负责创建窗体上的各种控件. 窗体和控件大家都很熟悉了,这些对象具有接收用户操作的

模态窗口其实就是在当前窗口调用系统的消息循环,响应用户的操作,将相关的消息发送到对应的窗口(转)

上周准备在公司内部转岗,面了3个部门windows客户端相关的工作,最终拿到3个Offer,主要涉及C++和Windows两大块内容,C++的题目基本都答上了,Windows一直都是我的弱项,在这里记录一下Windows相关的题目.有些答不上的问题就没列出来,还有些问题忘了,下面的答案有些大部分是我自己的理解,有些是直接从网上copy的,有问题大家可以讨论. 1:GetMessage和PeekMessage的区别? GetMessage:获取消息队列中的一个消息,存入MSG中,并从消息队列中移除

Android应用程序线程消息循环模型分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6905587 我们知道,Android应用程序是通过消息来驱动的,即在应用程序的主线程(UI线程)中有一个消息循环,负责处理消息队列中的消息.我们也知 道,Android应用程序是支持多线程的,即可以创建子线程来执行一些计算型的任务,那么,这些子线程能不能像应用程序的主线程一样具有消息循环呢?这 些子线程又能不能往应用程序的主线程中发送消息呢?本

Windows程序开发的背景知识---Windows消息机制

一,消息 消息(Message)指的就是Windows 操作系统发给应用程序的一个通知,它告诉应用程序某个特定的事件发生了.比如,用户单击鼠标或按键都会引发Windows 系统发送相应的消息.最终处理消息的是应用程序的窗口函数,如果程序没处理的话操作系统有默认函数将会作出处理.      从数据结构的角度来说,消息是一个结构体,它包含了消息的类型标识符以及其他的一些附加信息.系统定义的结构体MSG用于表示消息,MSG 具有如下定义形式: typedef struct MSG {      HWN

【转】windows消息和消息队列详解

转载出处:http://blog.csdn.net/bichenggui/article/details/4677494  windows消息和消息队列 与基于MS - DOS的应用程序不同,Windows的应用程序是事件(消息)驱动的.它们不会显式地调用函数(如C运行时库调用)来获取输入,而是等待windows向它们传递输入. windows系统把应用程序的输入事件传递给各个窗口,每个窗口有一个函数,称为窗口消息处理函数.窗口消息处理函数处理各种用户输入,处理完成后再将控制权交还给系统.窗口消