. -, . ij Find, , , Find. -, OnCancel CDialog, , . , , . ? . , ( 1), (communicating state).
. , -, . C++ , , . , ' CMyDialog. , , . .
1. ( ). , Find. , , .
#define WM_FINDDATA (WM + 1)
, ' , 0 WM_USER - 1 , , , , WM_USER. , , . г , WM_USER 0x7FFF , , , , . ֳ , , , BUTTON, EDIT LISTBOX. , .
|
|
, , WM_APP OXBFFF. Microsoft , . , : 1 OXFFFF , OXFFFF Windows.
2. . , Visual Studio . . afx_msg , long WPARAM ( UINT) LPARAM ( LONG):
afx_msg long OnFindData(UINT wParam, LONG IParam);
, afx_msg, , Visual C++ , . , Visual C++.
, . WM_FINDDATA, , OnFindData ( : CMyView, CView).
BEGIN_MESSAGE__MAP (CMyView, CView)
ON__MESSAGE(WM_FINDDATA, OnFindData)
END_MESSAGE_MAP()
OnFindData:
long CMyView::OnFindData(UINT wParam, LONG IParam) {
//
// wParam / IParam.
//ϳ .,.
return 0L;
}
, . , this. , : .
, , MFC . , , . ' GetParent. , . : ' MFC , . , this , ' GetParent , (, , ).
|
|
ϳ . , . this . , , .
, , , , , :
//
CFindDlg(CWnd* pParent = NULL);
//
CFindDlg(CWnd* pParent);
GetParent :
void CFindDlg::OnBnClickedOk ()
{
if (UpdateDataO)
{
CWnd* pParent = GetParent ();
ASSERT(pParent);
if (pParent) pParent->SendMessage(WM_FINDDATA, 0, 0);
}
}
}
, LPARAM WPARAM , . , ( LPARAM WPARAM), , ( ), .
' , , : " '?". ³ (scope) . , : SendMessage PostMessage. SendMessage , , , . , , SendMessage, , . PostMessage, , : . , , , , , . , .
'? SendMessage , . , , , ', . , ' , . PostMessage . , ' .
, . , - . , . nO . Find WM_FINDDATA , , Close, WM__DIALOGCLOSE. , .
|
|
long CMyView::OnpialogClose(UINT wParam, LONG IParam)
{
// -,
//
m_pDlg->DestroyWindow();
return 0L;
}
, .
䳿 nO OnCancel. . , , . , . , , Windows IDOK IDCANCEL, . , , WM_DlALOGCLOSE. :
//
pParent->PostMessage(WM_DIALOGCLOSE, IDOK);
// CANCEL
pParent->PostMessage(WM_DIALOGCLOSE, IDCANCEL)/
³ WM_DIALOGCLOSE :
long CMyView.-.OnDialogClose (UINT wParam, LONG IParam) { if (wParam == IDOK)
else if (wParam == IDCLOSE)
else ASSERT(FALSE); //
p01g->DestroyWindow(); return OL;
)