建立个基于对话框的工程:
主窗体是a
二级窗体是b
三级窗体是c
自定义消息:b到a没有问题:
发送消息代码(b窗体中代码)是:CccenterDlg *pDlg = (CccenterDlg *)GetParent();
//AfxGetMainWnd() ->ShowWindow(SW_HIDE);
pDlg->PostMessage(WM_MYMESSAGE,0,0);
现在问题是同样的方法,在b中定义消息处理函数,从c发送消息到b,发送代码和上面一样
具体如下:
Cproductsort *pDlg = (Cproductsort *)GetParent();
//AfxGetMainWnd() ->ShowWindow(SW_HIDE);
pDlg->PostMessage(WM_PRODUCTSORT,0,0);但是发送不成功,问题好象是Cproductsort *pDlg = (Cproductsort *)GetParent();这样并不能取到c的父窗体b的句柄
请大家指点下原因
主窗体是a
二级窗体是b
三级窗体是c
自定义消息:b到a没有问题:
发送消息代码(b窗体中代码)是:CccenterDlg *pDlg = (CccenterDlg *)GetParent();
//AfxGetMainWnd() ->ShowWindow(SW_HIDE);
pDlg->PostMessage(WM_MYMESSAGE,0,0);
现在问题是同样的方法,在b中定义消息处理函数,从c发送消息到b,发送代码和上面一样
具体如下:
Cproductsort *pDlg = (Cproductsort *)GetParent();
//AfxGetMainWnd() ->ShowWindow(SW_HIDE);
pDlg->PostMessage(WM_PRODUCTSORT,0,0);但是发送不成功,问题好象是Cproductsort *pDlg = (Cproductsort *)GetParent();这样并不能取到c的父窗体b的句柄
请大家指点下原因
{
CccenterDlg *pDlg = (CccenterDlg *)GetParent();
pDlg->PostMessage(WM_MYMESSAGE,0,0);
}。
==================================================================
另外这种多级传递效率不高,你可以把A的窗口句柄传给B和C,然后用:
::PostMessage(HWND, WM_MESSAGE, WPARAM, LPARAM)
就可一步到位了。
问题是是在c到b的消息传递不了;撇开不说b到a,因为这个并没有问题
其实b弹出c的窗体代码是:
productsortmod.Create(IDD_PRODUCTSORTMODDIALOG);
productsortmod.ShowWindow(SW_SHOW);
productsortmod.SetForegroundWindow();按楼上所说,应该在这个地方把b的句柄传递给c,那实际该怎么传递呢?
HWND hWnd=::FindWindow("Cproductsort",NULL);
if(hWnd)
{
::PostMessage(hWnd,WM_PRODUCTSORT,NULL,NULL);
}
HWND hWnd=GetParent()->m_hWnd;
::PostMessage(HWND,WM_MESSAGE, WPARAM, LPARAM)就可以从c发送给b了