MFC 專案中,一個對話方塊/視圖類別呼叫另一個對話方塊類別的公開函式,是模組化設計的基礎操作。本文說明兩種常見方式——**物件實例法**與**指標動態建立法**——的語法、生命週期管理與適用場景。
public。#include "Dialog2.h")。
void CMainDlg::OnCallDialog2() {
CDialog2 dlg2; // 棧上建構
dlg2.Show(); // 呼叫公開函式
// dlg2 於此處離開作用域,自動呼叫解構函式
}
DoModal())或短生命週期操作。
void CMainDlg::OnCreateModeless() {
m_pDlg2 = new CDialog2(); // 成員指標 CDialog2* m_pDlg2;
m_pDlg2->Create(IDD_DIALOG2, this);
m_pDlg2->ShowWindow(SW_SHOW);
}
// 某處銷毀(如主視窗關閉、按鈕事件)
void CMainDlg::OnDestroyModeless() {
if (m_pDlg2) {
m_pDlg2->DestroyWindow();
delete m_pDlg2;
m_pDlg2 = nullptr;
}
}
delete**,否則記憶體洩漏。std::unique_ptr m_pDlg2; (C++11)。| 類型 | 建立方式 | 呼叫阻塞 | 典型用途 |
|---|---|---|---|
| 模態 | dlg.DoModal() | 是(回傳 IDOK/IDCANCEL) | 設定對話框、確認提示 |
| 非模態 | dlg.Create() + ShowWindow() | 否(立即返回) | 工具視窗、即時監控面板 |
DoModal() 處理短暫互動。std::unique_ptr 管理生命週期。class A;,並在 B.cpp 包含 A.h。