主对话框A在按钮响应事件中加载dll并生成一个非模态对话框B,为让B能接收TAB\Enter\Esc等按键的事件消息,在B的WM_CREATE响应OnCreate中
SetWindowsHookEx( WH_GETMESSAGE, GetMsgProc,NULL, GetCurrentThreadId());
但是主对话框的消息也一并钩住了。问题:
1、在挂钩时传入的线程ID是A的?B的?
2、如果非模态对话框B不是在dll中产生而是直接在A的某个方法中产生的话是否有独立的线程?
3、一个UI线程对应一个消息队列,如果A,B是同一个线程是否意味着二者共用一个消息队列?
4、非模态对话框如果想自己定义某个消息的响应函数或者重写消息处理循环该在何处下手?谢谢!
SetWindowsHookEx( WH_GETMESSAGE, GetMsgProc,NULL, GetCurrentThreadId());
但是主对话框的消息也一并钩住了。问题:
1、在挂钩时传入的线程ID是A的?B的?
2、如果非模态对话框B不是在dll中产生而是直接在A的某个方法中产生的话是否有独立的线程?
3、一个UI线程对应一个消息队列,如果A,B是同一个线程是否意味着二者共用一个消息队列?
4、非模态对话框如果想自己定义某个消息的响应函数或者重写消息处理循环该在何处下手?谢谢!
2,如果你不是创建线程的方法,不管是DLL还是A中的方法都一样
3,每个窗口都有自己的消息循环
4,在对话框B的类中添加消息响应
据 shequay 的回答,A B 共用同一个消息队列但消息循环不同,结合 cnzdgs 回答,
对于在dll中产生的非模态对话框的消息,如果想自己定义处理过程方法有二,1,不起新线程但重写B的消息循环从而重新定义处理函数
2,起新线程并把B绑定到新线程,在新线程中下钩子也可达到对某类消息进行特定处理的目的。结贴,谢谢!
据 shequay 的回答,A B 共用同一个消息队列但消息循环不同,结合 cnzdgs 回答,
对于在dll中产生的非模态对话框的消息,如果想自己定义处理过程方法有二,1,不起新线程但重写B的消息循环从而重新定义处理函数
2,起新线程并把B绑定到新线程,在新线程中下钩子也可达到对某类消息进行特定处理的目的。结贴,谢谢!
2 timer
3 自己做消息泵(PeekMessage)