MFC類嚮導的“對象ID”列表裏沒有手動創建的控件的ID

----------------------------------------------------------------------------------------------------------------------------------------

bug天天有,今天的特奇怪!我在給一個對話框手動創建了幾個控件後,可以正常運行顯示那些控件。似乎一切都正常,但是就在我想通過類嚮導給“保存按鈕”添加事件處理程序時,奇怪的事情發生了:在類嚮導的“對象ID”列表里居然沒有那些手動創建的控件的ID。然而之前的幾個功能的對話框裏的控件的事件處理程序也是進行類似的操作編寫的,沒遇到這個問題。下面就來重現一下debug的過程!

----------------------------------------------------------------------------------------------------------------------------------------


問題描述


MFC類嚮導的“對象ID”列表裏沒有手動創建的控件的ID。如下圖所示


問題分析


遇到該問題我第一反應便是思考是不是操作過程中缺少了什麼步驟,仔細回想一下並沒有!

自己思考無果之後,變拿出了程序員的利器:各種搜索引擎,Google、百度、360搜素。然而沒有一個完全的匹配我的問題的,但可能匹配讀者的問題,與時我將個人覺得比較靠譜的鏈接附在下面,望讀者參考:

【爲什麼我的類嚮導裏沒有新添加控件的ID】:      http://bbs.csdn.net/topics/190068916

【VS2010使用MFC類嚮導時提示“災難性故障”的解決】:    http://blog.csdn.net/menglongbor/article/details/7609560


雖然上面兩個案例跟我的bug不是完全匹配,但是還是給了我一個很大的提示:要確保資源ID唯一性,特別是在修改資源ID的之後可能會有安全隱患!


打開“resource.h”文件後發現,因爲之前對話框ID有錯別字,我進行過修改,但修改後沒有及時刪除原先錯誤的ID,與時出現了兩個ID數值相同的宏。而出問題的對話框就是那些控件所屬的對話框。如下圖所示:



解決方案

刪掉錯誤的宏定義,保留唯一的真確的那個宏。之後再重啓一下VS即可!


類嚮導的“對象ID”列表可以正確顯示需要的控件資源ID了。問題解決!



注意:在MFC中資源ID雖然可以隨意指定,但不要和現有的資源ID相同,要確保ID的唯一性。有時候你不知道某個ID是不是被佔用,你可以用GetDlgItem來測試一下。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章