ATL 初學者筆記:示範在 MFC 對話框專案中加入 ATL 物件,並實現 ATL 對話框與 MFC 主對話框的資料交換。
MFC_in_ATL。
CAxDialogImpl:支援 ActiveX 控件與 Windows 控件(預設)。CSimpleDialog:僅支援模態對話框,無 ActiveX 開銷。CDialogImpl:支援模態/非模態,繼承 Windows 控件,無 ActiveX 支援。public:
BSTR b1;
LRESULT OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
CMFC_in_ATLDlg *maindlg = (CMFC_in_ATLDlg*)AfxGetMainWnd();
char ms[50];
GetDlgItemText(IDC_EDIT_ATL, b1);
CString str(b1 == NULL ? L"" : b1);
maindlg->AddStr(str);
sprintf(ms, "%s", str);
maindlg->PostMessage(WM_TEST, (WPARAM)ms, NULL);
// EndDialog(wID);
return 0;
}
// .h
afx_msg void OnGetMessage(WPARAM wParam, LPARAM lParam);
void AddStr(const CString &str);
// .cpp
void CMFC_in_ATLDlg::OnOK()
{
CATLDlg atldlg;
atldlg.DoModal(); // 呼叫 ATL 模態對話框
}
void CMFC_in_ATLDlg::AddStr(const CString &str)
{
SetDlgItemText(IDC_EDIT_MFC, str);
}
void CMFC_in_ATLDlg::OnGetMessage(WPARAM wParam, LPARAM lParam)
{
CString str = (char*)wParam;
SetWindowText(str);
}
運行結果
透過 PostMessage 傳遞自訂訊息 WM_TEST 實現跨模組通訊。本文配套完整原始碼。