有時候我有在用win32 api來向窗體上新增控制項時,通過createwindow或createwindowex建立出來的控制項的風格不像xp風格,而是像windows 2000的風格,介面很難看。注意,是動態呼叫createwindow來建立控制項,不是從資源中載入。
這種情況下,我們怎麼辦呢,通常說來,造成這種情況都是由於沒有正確載入資源,我們知道,像button, combobox, listbox等這些控制項都是放在comctl32這個dll裡面的,所以有時候在用這些系統自定義的控制項時,需要我們首先呼叫initcommoncontrol***函式。這個dll的版本有很多,存放在windows\winsxs目錄下面,或者你直接檢索:common control,結果如下:
好了,下面說一下解決方案吧:
這個根本辦法就是加乙個manifest檔案,其內容如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>儲存成乙個字尾為:.manifest的檔案,引入到.res檔案中。name="xp style manifest"
processorarchitecture="x86"
version="1.0.0.0"
type="win32"/>
type="win32"
name="microsoft.windows.common-controls"
version="6.0.0.0"
processorarchitecture="x86"
publickeytoken="6595b64144ccf1df"
language="*"
/>
這樣就行了。
還需要在資源檔案中加一行:
// 1 rt_manifest "testctrlstyle.manifest"1>linking...
1>cvtres : fatal error cvt1100: duplicate resource. type:manifest, name:1, language:0x0409
1>link : fatal error lnk1123: failure during conversion to coff: file invalid or corrupt
這個錯誤是說工程中已經包括了rt_manifest檔案。那麼此時,就不要加這句話,直接把這個.manifest檔案加入到工程中就行了。
修改過後的介面如下:
上面這種方法是用manifest來設定引入的comctl32的版本,但注意上面的manifest,裡面指定了這個comctl32的平台:processorarchitecture="x86",如果這個應用程式想在x64下面執行,就會導致乙個問題:這個64位的程式鏈結的是32位的comctl32庫,建立控制項就會失敗。所以最好的解決方案就是下面這種做法:
在標頭檔案裡面加入下面的語句:
#ifdef _unicode
#if defined _m_ix86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='microsoft.windows.common-controls' version='6.0.0.0' processorarchitecture='x86' publickeytoken='6595b64144ccf1df' language='*'\"")
#elif defined _m_ia64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='microsoft.windows.common-controls' version='6.0.0.0' processorarchitecture='ia64' publickeytoken='6595b64144ccf1df' language='*'\"")
#elif defined _m_x64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='microsoft.windows.common-controls' version='6.0.0.0' processorarchitecture='amd64' publickeytoken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='microsoft.windows.common-controls' version='6.0.0.0' processorarchitecture='*' publickeytoken='6595b64144ccf1df' language='*'\"")
#endif
#endif
這裡就是根據編譯選項來指定鏈結什麼版本的庫,這樣編譯出來的程式就不會有上述的問題。
win32 控制項操作
int getwindowtext hwnd hwnd,lptstr lpstring,int nmaxcount boolsetwindowtext hwndhwnd,lpctstrlpstring 問題 如下,vc6 問題描述請看注釋.char sztext 256 wparam wparam ...
Win32控制項使用 Edit控制項
drecik學習經驗分享 edit控制項是乙個很強大的輸入控制項,可以處理很多樣式,通過vs的控制項屬性來設定,有單行,多行,密碼框,滾動條等。其中通知碼可以如下所示 獲得edit控制項輸入的內容可以通過之前討論過的通用函式 參考前面的博文 getwindowtext等。剪下,複製,刪除當前選擇內容...
WIN32視窗建立
win32視窗建立過程 1 定義視窗類 在msdn中找到函式原型 winmain 2 定義視窗處理函式 在msdn中找到原型 windowproc 3 設計視窗類 4 註冊視窗類 registerclass registerclas 5 建立視窗 createwindow createwindowe...