利用 CButton::EnableWindow(BOOL) 控制按鈕可用狀態,在對話框初始化與按鈕點擊處理中設置。
OnInitDialog):
BOOL CMyDialog::OnInitDialog() {
CDialog::OnInitDialog();
m_btn1.EnableWindow(TRUE); // 按鈕1 可用
m_btn2.EnableWindow(FALSE); // 按鈕2 禁用
return TRUE;
}
void CMyDialog::OnBnClickedButton1() {
// 執行按鈕1 業務邏輯...
m_btn2.EnableWindow(TRUE); // 啟用按鈕2
}
void CMyDialog::OnBnClickedButton2() {
// 業務邏輯...
m_btn2.EnableWindow(FALSE); // 防止重複點擊
m_btn1.EnableWindow(TRUE); // 允許重新開始
}
UpdateButtonStates() 中根據當前步驟設置所有按鈕啟用/禁用/隱藏。Notify 屬性為 True,導致點擊消息不觸發。OnInitDialog 前訪問控件變量(如構造函數中),導致空指針。GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE) 而非變量,雖可行但不利於類型安全與代碼清晰。此模式適用於所有基於 MFC/WIN32 的對話框交互流程控制。