2017-02-02 65 views
1

我在VS2015 CE中處理一組單選按鈕的Visual Studio MFC-GUI編程技術有兩個小問題。MFC單選按鈕組消息處理程序

我有一個基於對話框的小應用程序。這個應用程序在我的對話框中用指定的筆畫出一些線條。 現在我製作了一組單選按鈕,可以爲筆使用不同的顏色。所以我創建了一個組合框,將單選按鈕放到這個組合框中,啓用了第一個單選按鈕的組屬性,並檢查了選項卡順序,以便所有單選按鈕都按順序排列。

沒關係 - 測試GUI我可以按計劃選擇一個單選按鈕,因爲我無法同時畫出不同顏色的線條。現在我在ClassWizard中爲第一個單選按鈕對象的BN_CLICKED消息添加了一個處理程序,以添加不同彩色筆的選擇。

現在來了有趣的部分。此處理程序僅在我單擊第一個單選按鈕時執行。啓用了組屬性的那個。我認爲只要點擊這個組中的任何一個單選按鈕就應該執行它。接下來我嘗試的是爲所有這些單選按鈕添加一個BN_CLICKED消息處理程序,但ClassWizard不會爲其他單選按鈕顯示BN_CLICKED消息 - 僅適用於啓用組proerty的單選按鈕。

Googling around後,我讀了一篇文章,只要在對話框中雙擊一個按鈕,就可以爲按鈕添加一個BN_CLICKED-Messagehandler。所以我雙擊了所有的單選按鈕,並添加了對第一個單選按鈕的BN_CLICKED-Messagehandler的調用。這是一種解決方法,現在當我點擊任何單選按鈕(黑色,藍色,紅色等)時,我的線條就會以不同的顏色繪製。

我有兩個問題 - 這是行爲的目的?我想爲什麼我只能在ClassWizard中爲第一個單選按鈕添加一個BN_CLICKED-Messagehandler,是因爲它會被我的組中的任何單選按鈕調用,不是嗎?

另一個問題是,我寧願編寫處理程序一次,並能夠告訴類嚮導使用此特定處理程序,而不是爲每個按鈕創建唯一處理程序。這與這個單選按鈕無關。我測試了一個簡單的應用程序,它由幾個按鈕組成 - 它們可以擁有自己的BN_CLICKED-Messagehandlers類嚮導。當我不接受從嚮導自動生成的函數名並輸入我自己的處理函數的名稱時,它只是聲明它不能覆蓋它。如何在類嚮導中爲對象消息選擇現有的處理程序,或者這是不可能的,而且我必須在自己的代碼中手動執行此操作?

希望有一個VS2015 MFC蓋伊在那裏能告訴我..

+0

只需手動添加處理程序,它工作正常。 –

+0

在Visual Studio 6和Visual Studio 2010之間,我們沒有MFC類嚮導。這是一個方便,你需要準備寫沒有它的MFC代碼。 Jeff Prosise'[使用MFC編程Windows,第二版](https://www.amazon.com/dp/1572316950)推薦閱讀。它解釋了所有這些宏和自動生成的代碼的背後。 – IInspectable

回答

2

這的確是由設計。您可能想要每個按鈕點擊時都有不同的行爲 - 如果您不想簡單地將所有BN_CLICKED關聯到相同的消息處理程序並刪除自動生成的那些消息處理程序。 你也可以使用ON_CONTROL_RANGE(BN_CLICKED,id1,id2,memberFxn) - 確保你的按鈕在你的resource.h中的相同範圍內。 希望有幫助!

+0

謝謝。遺憾的是,這無法通過構建類嚮導的功能來解決。但是你提到的那個ON_CONTROL_RANGE Makro似乎絕對值得一看。雖然控制ID的定義似乎有點困難。我只是讀了一些例子和MSDN的定義。我會試一試。 – Wciibb