消息循环是一个无限的for循环,那么程序还怎么响应发送的消息呀?
刚学习vc,建了一个简单的对话框程序,试验一下发送消息和寄送消息时,看到程序一开始就运行在无限消息循环for (;;)里面,但是一旦响应发送消息,程序立刻就跳出这个消息循环,真是不明白呀,请各位大大帮我解惑,下面是发送消息和寄送消息的调用堆栈。
寄送消息时:
。
。
。
mfc71d.dll!AfxInternalPumpMessage() Line 183 + 0x18 C++
mfc71d.dll!CWinThread::PumpMessage() Line 916 C++
mfc71d.dll!AfxPumpMessage() Line 195 + 0xb C++
//由下可见程序应该一直运行在无限消息循环for (;;)里面啊
mfc71d.dll!CWnd::RunModalLoop(unsigned long dwFlags=4) Line 4566 + 0x5 C++
mfc71d.dll!CDialog::DoModal() Line 527 + 0xc C++
test1.exe!Ctest1App::InitInstance() Line 58 + 0xb C++
mfc71d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ *
test1.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000,
test1.exe!WinMainCRTStartup() Line 390 + 0x39 C
kernel32.dll!7c816fd7()
ntdll.dll!7c935b4f()
发送消息时:
。
。
。
mfc71d.dll!CWnd::OnWndMsg(unsigned int message=273, unsigned int wParam=1, long
mfc71d.dll!CWnd::WindowProc(unsigned int message=273, unsigned int wParam=1, long
mfc71d.dll!AfxCallWndProc(CWnd * pWnd=0x0012fe3c, HWND__ * hWnd=0x0028016e, unsigned int
mfc71d.dll!AfxWndProc(HWND__ * hWnd=0x0028016e, unsigned int nMsg=273, unsigned int wParam=1,
mfc71d.dll!AfxWndProcBase(HWND__ * hWnd=0x0028016e, unsigned int nMsg=273, unsigned int
user32.dll!77d18734()
user32.dll!77d18816()
user32.dll!77d1b4c0()
user32.dll!77d1b89b()
user32.dll!77d1b903()
user32.dll!77d4fd1d()
user32.dll!77d46561()
user32.dll!77d26df4()
mfc71d.dll!AfxGetModuleThreadState() Line 243 C++
mfc71d.dll!AfxGetThread() Line 142 + 0x5 C++
//根本就没有在无限消息循环for (;;)里面
响应发送消息时程序怎么就跳出了无限消息循环for (;;),怎么回事呀?
寄送消息时:
。
。
。
mfc71d.dll!AfxInternalPumpMessage() Line 183 + 0x18 C++
mfc71d.dll!CWinThread::PumpMessage() Line 916 C++
mfc71d.dll!AfxPumpMessage() Line 195 + 0xb C++
//由下可见程序应该一直运行在无限消息循环for (;;)里面啊
mfc71d.dll!CWnd::RunModalLoop(unsigned long dwFlags=4) Line 4566 + 0x5 C++
mfc71d.dll!CDialog::DoModal() Line 527 + 0xc C++
test1.exe!Ctest1App::InitInstance() Line 58 + 0xb C++
mfc71d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ *
test1.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000,
test1.exe!WinMainCRTStartup() Line 390 + 0x39 C
kernel32.dll!7c816fd7()
ntdll.dll!7c935b4f()
发送消息时:
。
。
。
mfc71d.dll!CWnd::OnWndMsg(unsigned int message=273, unsigned int wParam=1, long
mfc71d.dll!CWnd::WindowProc(unsigned int message=273, unsigned int wParam=1, long
mfc71d.dll!AfxCallWndProc(CWnd * pWnd=0x0012fe3c, HWND__ * hWnd=0x0028016e, unsigned int
mfc71d.dll!AfxWndProc(HWND__ * hWnd=0x0028016e, unsigned int nMsg=273, unsigned int wParam=1,
mfc71d.dll!AfxWndProcBase(HWND__ * hWnd=0x0028016e, unsigned int nMsg=273, unsigned int
user32.dll!77d18734()
user32.dll!77d18816()
user32.dll!77d1b4c0()
user32.dll!77d1b89b()
user32.dll!77d1b903()
user32.dll!77d4fd1d()
user32.dll!77d46561()
user32.dll!77d26df4()
mfc71d.dll!AfxGetModuleThreadState() Line 243 C++
mfc71d.dll!AfxGetThread() Line 142 + 0x5 C++
//根本就没有在无限消息循环for (;;)里面
响应发送消息时程序怎么就跳出了无限消息循环for (;;),怎么回事呀?
...全文
相关推荐
MFC发送消息与接收消息的例子
例如,假设我们有一个简单的MFC对话框应用程序,我们想要从一个按钮的点击事件中发送一个自定义消息到对话框本身。
C#消息循环与响应机制
**消息循环机制:**- 应用程序运行时,`Application`类会启动一个全局的消息循环,不断从操作系统获取消息并分发给相应的窗口。
C#企业微信发送文本消息,发送图片给指定人员
- 处理响应,检查返回的JSON数据,确认消息是否成功发送。2.
发送与接收消息(sendmessage)
发送端通过`FindWindow`找到目标窗口,再利用`SendMessage`发送消息;接收端通过注册消息处理函数接收并响应这些消息。
两个对话框之间发送消息
两个对话框之间发送消息"的主题涉及到如何在MFC的对话框类之间进行通信,特别是在一个对话框的操作需要影响另一个对话框的状态时。这通常通过消息机制实现,其中消息响应函数扮演着关键角色。


