將窗口 A 的 Button1 通過 SetParent() 移至窗口 B 後,按鈕點擊事件變為窗口 B 的處理邏輯,原窗口 A 的響應失效。
MFC 控件通知消息(如 BN_CLICKED)發送給父窗口。SetParent 改變父窗口後,消息自然路由到新父窗口 B,導致原處理邏輯不被調用。
CMyButton : public CButton// CMyButton.h
class CMyButton : public CButton {
DECLARE_MESSAGE_MAP()
afx_msg void OnClicked();
};
// CMyButton.cpp
BEGIN_MESSAGE_MAP(CMyButton, CButton)
ON_CONTROL_REFLECT(BN_CLICKED, &CMyButton::OnClicked)
END_MESSAGE_MAP()
void CMyButton::OnClicked() {
AfxMessageBox(L"我是窗口A的按鈕"); // 固定邏輯
}
在對話框編輯器中將按鈕類型設置為 CMyButton,或動態創建時指定該類。此後無論 SetParent 到哪個窗口,點擊行為保持一致。