通過VC6.0建立一個CFormView視窗,又建立一個非模態對話框子視窗。通過訊息回應進行兩個視窗的資料通信。父視窗向子視窗傳輸沒有問題,但是子視窗向父視窗傳輸時訊息回應函式無回應?
具體代碼如下:
非模態視窗的呼叫:
void CViewComTestView::OnButton1()
{
// TODO: Add your control notification handler code here
if(!dlg1.m_hWnd)
{
dlg1.Create(IDD_DIALOG1);
dlg1.ShowWindow(SW_SHOW);
}
else
{
dlg1.DestroyWindow();
dlg1.Create(IDD_DIALOG1);
dlg1.ShowWindow(SW_SHOW);
}
}
添加訊息:
#define WM_MAIN_MSG WM_USER+0x01001
#define WM_SUB_MSG WM_USER+0x02001
訊息回應函式定義:
BEGIN_MESSAGE_MAP(CMySubDlg, CDialog)
//{{AFX_MSG_MAP(CMySubDlg)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_SUB_MSG, CMySubDlg::OnSubMsg)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CViewComTestView, CFormView)
//{{AFX_MSG_MAP(CViewComTestView)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON3, OnButton2)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
ON_MESSAGE(WM_MAIN_MSG, CViewComTestView::OnMainMsg)
END_MESSAGE_MAP()
子視窗向父視窗發送訊息:
void CMySubDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString strEdit;
GetDlgItemText(IDC_EDIT1,strEdit);
// 獲得父視窗的句柄
HWND hWnd = this->GetParent()->GetSafeHwnd();
// 向父視窗發送訊息
if (hWnd == NULL) MessageBox(_T("獲得父視窗句柄失敗!"));
::SendNotifyMessage(hWnd,WM_MAIN_MSG,(WPARAM)&strEdit,NULL);
}
父視窗的訊息回應函式:(子視窗發送訊息時視窗沒有任何回應)
afx_msg LRESULT CViewComTestView::OnMainMsg(WPARAM wParam, LPARAM lParam)
{
CString* strMsg = (CString*)wParam;
SetDlgItemText(IDC_EDIT1,*strMsg);
return 0;
}
求大神指點!!!!
uj5u.com熱心網友回復:
SendNotifyMessage發送的訊息不會進回圈佇列.使用 SendMessage 看看。
uj5u.com熱心網友回復:
dlg1.Create(IDD_DIALOG1, this); //指定父視窗試試uj5u.com熱心網友回復:
HWND hWnd = this->GetParent()->GetSafeHwnd();不要通過這個方式獲取父視窗句柄
在創建子視窗的時候把父視窗的句柄賦值給子視窗的一個變數在子視窗里使用
uj5u.com熱心網友回復:
我也是這樣實作的,不過我用的是指標。
uj5u.com熱心網友回復:
SendNotifyMessage 判斷下回傳值,改用PostMessage試試uj5u.com熱心網友回復:
句柄相對安全一些uj5u.com熱心網友回復:
句柄相對安全一些
HWND hWnd = this->GetParent()->GetSafeHwnd();
不要通過這個方式獲取父視窗句柄
在創建子視窗的時候把父視窗的句柄賦值給子視窗的一個變數在子視窗里使用
我也是這樣實作的,不過我用的是指標。
指標速度快些,但是怕的是運算程序中發生地址改變或者指向內容改變。句柄也是可行的,但是該句柄如果是動態視窗會有些問題。
不管怎么說,你的處理方法對我也是一個很好的交流,感謝!感謝!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/103843.html
標籤:界面
