最近做项目,遇到了在多对话框情况之下,子对话框之间能够互相发送消息的情况。
由于SendMessage()函数第一个参数是目的地的句柄,所以只要能在子对话框1中得到子对话框2的句柄即可。
网上有资料说可以用FindWindow函数,进行子对话框的句柄查找,但弄了半天,发现一直无法得到想要的外部其他子对话框的句柄
最后得到的解决方法是子对话框将操作需求发回给父对话框,然后由于父对话框中保存有子对话框的对象或对象指针,即可以方便的在父对话框中向子对话框发送消息。
具体操作如下:
子对话框向父对话框发送消息
HWND hwnd = ::GetParent(m_hWnd);
::SendMessage(hwnd,Msg,wParam,lParam);
这样就将消息发送到了父对话框中,在父对话框建立消息的相应函数,然后通过不同的消息类型,向不同的子对话框发送消息。
当然这里也可以有两种方法,其一可以使用GetSafeHwnd()函数获得子对话框的句柄,这样就可以使用::SendMessage()函数来根据不同窗口的句柄发送消息了
更简单的是,直接用父对话框中保存的子对话框的对象或对象指针来直接调用SendMessage()函数进行发送消息,这样消息直接发送到对应的子对话框中了
当然如果不向子对话框发送消息也可以,在父对话框中留函数接口,在子对话框中直接通过父对话框的指针,然后调用父对话框的接口函数,进行向其他子对话框发送消息的操作
如果有人懂得如何在子对话框之间直接发送消息,那希望能告知,让我学习一下。