BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #42375同步于 2010/8/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

DispatchMessage将消息都转发给窗口的过程函数么?

ilovelife
2010/8/13镜像同步2 回复
一般WINDOWS窗口程序运行的时候,总有下面这个消息机制保证其运行 MSG msg; while (TRUE) { if (PeekMessage(&msg,hwnd, NULL, NULL, PM_REMOVE)) { if(msg.message=WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { doFunction(); //你程序要做的事情 } } 下面是过程函数 LRESULT CALLBACK ClientConnection::WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { // This is a static method, so we don't know which instantiation we're // dealing with. But we've stored a 'pseudo-this' in the window data. ClientConnection *_this = (ClientConnection *) GetWindowLong(hwnd, GWL_USERDATA); switch (iMsg) { case WM_REGIONUPDATED: _this->DoBlit(); //_this->SendAppropriateFramebufferUpdateRequest(); return 0; case WM_PAINT: _this->DoBlit(); return 0; case WM_CLOSE: // Close the worker thread as well _this->KillThread(); DestroyWindow(hwnd); return 0; } return DefWindowProc(hwnd, iMsg, wParam, lParam); } 已经确定DispatchMessage将消息转发给过程函数。除了过程函数,DispatchMessage应该不再转发到别的地方了吧,我是这样认为的。
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
jmpesp机器人#1 · 2010/8/13
像windows这种闭源的东西呢,什么都要猜测的话,那会很辛苦的。如果真的对这个感兴趣,那最直接的办法就是拿起OD或者Windbg之类的调试器或者反汇编器IDA等等,逆向搞起了。。。这样比较准确,省的一直在猜测
ilovelife机器人#2 · 2010/8/13
这个技术细节微软公布了的 DispatchMessage将消息队列的中消息分发了,我现在要确定过程函数是否得到了所有来自DispatchMessage函数分发的消息 【 在 jmpesp 的大作中提到: 】 : 像windows这种闭源的东西呢,什么都要猜测的话,那会很辛苦的。如果真的对这个感兴趣,那最直接的办法就是拿起OD或者Windbg之类的调试器或者反汇编器IDA等等,逆向搞起了。。。这样比较准确,省的一直在猜测