修改視窗類的類名
相信很多人在vc下開發程式的時候大多都會採用基於對話方塊的開發吧,我也不例外,大多數的小型測試程式沒有必要開發基於文件/檢視的結構來測試,只要使用一些基本的對話方塊程式就可以達到這個目的 。
但是在開發基於對話方塊的程式時,要使用到一些 spy++ 的功能檢測的時候,就會出現一些問題。什麼問題呢?當我使用 spy++ 去檢測乙個對話方塊的視窗類
時,並想得到乙個對話方塊的視窗類,以便我在使用鉤子的時候可以指定乙個對話方塊進行 hook,但是結果出乎我意料之外
,對話方塊的視窗類不是我在註冊時所指定的對話方塊視窗類名。其類名是 "#32770(dialog)",這是乙個mfc自動為基於對話方塊的程式產生的預設視窗類
,所有的基於mfc所產生的對話方塊程式都使用這乙個預設類名。即是說,我在使用乙個基於對話方塊的程式時,無論多少個對話方塊產生,它們的類名都會是 "#32770(dialog)",這樣我在開啟對話方塊進行測試時,無法指定我需要的對話方塊的控制代碼。
但是,當指定乙個對話方塊的視窗標題的時候,這個對話方塊的名柄就可以找到了:hwnd hwnd = mull;
hwnd = findwindow( "#32770",lpszwindowname );
_assert( hwnd != null );
//其中 lpszwindowname 是對話方塊的視窗標題目。
這種方法也有一定的缺點,就是乙個對話方塊的標題不確定時會怎麼樣,或對話方塊的標題在執行過程中要動態改變呢?這樣根本無法保證所找到
的控制代碼就是所需要的控制代碼。我採取的方法就是在對話方塊的產生過程中為對話方塊指定乙個唯一的視窗類,這樣就可以找到所想要的指定控制代碼,而不必與其它的對話方塊混淆。
hwnd hwnd = mull;
hwnd = findwindow( lpszclassname, null );
_assert( hwnd != null );
//其中 lpszclassname 是對話方塊的視窗類名。
,不錯,確實要在這兒修改。// 在派生類的 initintace() 中
這裡採用的方法是在產生註冊視窗時,將註冊視窗的視窗類名修改。再重新註冊視窗類,一切看來很順利,也不是非常難的操作,但是一切都如你預期一樣麼。很不辛,你再開啟 spy++ 觀察視窗的時候
,仍是 "#32770(dialog)"。
好了,你有其它辦法嗎? msdn在這個時候還是最有用的,缺少 msdn 就如在沒有槳的船,msdn
中提供了兩種方法讓我們可以定製自已的對話方塊視窗類。
第一種:
1、開啟這個對話方塊工程檔案,開啟 resourceview。
2、開啟 resource editor,右擊對話方塊,選擇選項 properties,在對話方塊的屬性項中
,最下角是乙個類名的輸入項, 但是這乙個選項是禁止的, 你無法在些輸入類名, 因為你在這裡是選擇了 mfc 類庫的
支援。為了使這個選項可以輸入。如圖所示,在resource view 的最頂項選擇右鍵-屬性,就會彈出
乙個資源檔案屬性對話方塊,把其中的 enable mfc features 的項設為禁止, 則對話方塊的類名就可以在在資源編輯器中設定了。(在visual c++
。net,設定 mfc mode property 屬性為 false)
:// 在派生類的 initintace() 中
其中 ::getclassinfo 保證了即使你的資源檔案在不同的 dll 中也能正確得到 hinstance 跟著就是要修改資源檔案了,用文字編輯器開啟 rc 檔案
,加上" class 類名 "如下圖所示:
注意,如果你 rc 檔案中的類名與 initinstance 中的類名不一致,程式不會執行,這是非常重要的。切記。不需要使用該類是可以使用
unregisterclass登出該類。
結束語:
這只是乙個小技巧,希望對於大家的開發有所幫助,例如在開發基於對話方塊的程式中,使應用程式只有乙個執行例項,註冊唯一的視窗類是非常有用的。或作乙個進行程式監控的
時候,可以進行快速定位。
MFC 改變視窗類名
mfc 改變視窗類名 1,改變視窗類名 比如 myclassname是自己想設定的類名 方法 開啟資源檢視,右擊外掛程式視窗,屬性改掉classname屬性,若它為灰色,右擊.rc檔案改mfc mode屬性為false,再改 2,改變後在ctestcpp中的initinstance 註冊該視窗類名 ...
MFC 改變視窗類名
mfc 改變視窗類名 1,改變視窗類名 比如 myclassname是自己想設定的類名 方法 開啟資源檢視,右擊外掛程式視窗,屬性改掉classname屬性,若它為灰色,右擊.rc檔案改mfc mode屬性為false,再改 2,改變後在ctestcpp中的initinstance 註冊該視窗類名 ...
修改Dialog窗體的類名
vs2013 的mfc 工程 工程名 mobilelink 想要修改窗體的類名時,發現不是像設定視窗名一樣呼叫乙個函式可以實現的。實現的注意問題,請看注釋。1 修改窗體資源 rc 檔案 dialog idd mobilelink dialog dialogex 0,0,320,200 style d...