利用CButton作為「地鼠」控件,通過定時器隨機顯示/隱藏,點擊響應得分。
CButton(IDC_BTN_MOLE_1~9),設置Owner Draw樣式,載入地鼠/空洞圖片。Class Wizard添加CButton m_btnMole[9]控件變量數組。void CMoleDlg::OnTimer(UINT_PTR nIDEvent) {
if (nIDEvent == TIMER_MOLE) {
int idx = rand() % 9;
ShowMole(idx); // 顯示地鼠圖片,啟用按鈕
SetTimer(TIMER_HIDE, 1000, NULL); // 1秒後隱藏
} else if (nIDEvent == TIMER_HIDE) {
HideAllMoles(); // 隱藏所有,禁用按鈕
}
CDialogEx::OnTimer(nIDEvent);
}
BN_CLICKED映射同一處理函數OnMoleClicked,判斷是否為當前顯示地鼠,更新分數。CImageList或CBitmap加載圖片,DrawItem繪製Owner Draw按鈕。參考CSDN資源:MFC打地鼠完整工程(含圖片資源、定時器邏輯、分數統計)。
CMemDC離屏繪圖。PlaySound(TEXT("hit.wav"), NULL, SND_ASYNC)。