首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

在 MFC 專案中整合 ATL 對話框與跨模組通訊

     編輯:關於VC++

ATL 初學者筆記:示範在 MFC 對話框專案中加入 ATL 物件,並實現 ATL 對話框與 MFC 主對話框的資料交換。

步驟詳解

  1. 用 AppWizard 建立 MFC 對話框專案 MFC_in_ATL。
  2. 選單 Insert → New ATL Object...,彈出確認對話框點選 Yes。
  3. ATL 物件精靈:選擇 ATL Dialog,點選 Next 完成。
  4. 若首次出現錯誤對話框(已知 Bug),按確定後重新執行 Insert → New ATL Object... 即可。
ATL物件精靈1 ATL物件精靈2 ATL物件精靈3 已知Bug提示

ATL 對話框基類選擇

  • CAxDialogImpl:支援 ActiveX 控件與 Windows 控件(預設)。
  • CSimpleDialog:僅支援模態對話框,無 ActiveX 開銷。
  • CDialogImpl:支援模態/非模態,繼承 Windows 控件,無 ActiveX 支援。

ATL 對話框類實作 (ATLDlg.h)

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;
    }

MFC 主對話框類實作 (MFC_in_ATLDlg.h/.cpp)

// .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 實現跨模組通訊。本文配套完整原始碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved