2014-11-08 76 views
0

我剛開始使用MFC製作Windows應用程序,並希望有人能夠幫助我使用我正在嘗試編寫的按鈕在某些代碼上滾動。將附加功能添加到MFC按鈕

我想要做的是構建一個應用程序,它具有一個按鈕,當按下按鈕時,將打開一個與我的問題無關的功能的模式對話框。我在開始時遇到了問題,因爲按下按鈕時我無法捕捉到代碼並將代碼附加到該事件。

事件添加到我的消息映射:

ON_BN_CLICKED(1, OnBnClicked) 

這OnBnClicked:

void CMainFrame::OnBnClicked() 
{ 
    CPaintDC dc(this); 
    dc.TextOutW(0, 100, _T("SUp dawg")); 
    MessageBox(_T("Hey Dawg")); 
} 

繼承人的按鈕創建:

BOOL bCreated = myButton.Create(_T("Hey Dawg"), WS_CHILD | WS_VISIBLE, 
           CRect(40, 40, 190, 90), this, 1); 

我不能似乎數字當我點擊它時,爲什麼它不會做任何事情。我非常感謝所有幫助,它在網上沒有特別的記錄:

+0

'BN_CLICKED'通知被髮送到按鈕的直接父窗口,即作爲第四個參數傳遞給'Create'的窗口。 CMainFrame是按鈕的父項嗎?順便說一句,使用MFC開始Windows編程並不會成功。您需要對Windows API有深入的瞭解,纔能有機會了解MFC。從[使用C++學習編程Windows]開始(http://msdn.microsoft.com/zh-cn/library/windows/desktop/ff381399.aspx)。 – IInspectable 2014-11-08 23:30:12

+0

顯示更多的代碼。你在哪個函數中創建按鈕? – 2014-11-11 12:57:31

+0

你有沒有讀過TN020? https://msdn.microsoft.com/en-us/library/t2zechd4.aspx - 我懷疑你的按鈕的數字標識符(1)超出了有效範圍!儘管它在8開始控制,我建議你嘗試> = 1024。 – sergiol 2016-10-01 01:05:51

回答

0

警告:我不會直接回答你的問題,只是因爲它幾乎無法回答而沒有看到(相當多)已經完成了,比如你放置創建按鈕的代碼的位置。即使/如果我直接回答了問題,我懷疑結果會特別有用。因此,我將描述我如何處理相同的基本情況。

我想說的基本點可以追溯到單一責任原則。一個窗口通常應該由一個班級來代表,而這個班級應該有一個單一的責任。如果該窗口充當控制容器,那麼該類別的責任應該充當控制容器。

大多數情況下,包含按鈕的類/窗口不應該(除了保持按鈕(或其他控件)之外的任何其他東西)執行任何操作。換句話說,按鈕大多屬於對話框和工具欄。如果你需要一個託管按鈕的顯示器,你通常希望這個視圖是一個CFormView。在這種情況下,表單由對話框模板構建而成。您可以使用對話框編輯器在對話框模板上放置一個按鈕,就像使用其他對話框一樣。您可以按照與任何對話框中的任何按鈕相同的方式添加功能(按住Shift或單擊鼠標右鍵並選擇「添加事件處理程序...」)。

是的,有可能以其他方式做事情 - Visual Studio和MFC甚至都不會試圖做太多的事來限制你能做的事情。這並不意味着你應該忽略基本設計 - 單一責任原則仍然適用,並且它仍然很重要。在設計代碼時,由您來執行它 - 其中一個含義是您不只是在代碼中的隨機位置創建按鈕。