c++
  • winapi
  • windows-xp
  • button
  • visual-styles
  • 2010-05-30 51 views 3 likes 
    3

    好吧,所以我很新C++ & Windows API,我只是寫一個小應用程序。我想我的應用程序使用視覺樣式在這兩個XP,Vista和Windows 7,所以我說此行我的代碼的頂部:C++/Win32:XP視覺樣式 - 沒有控件顯示出來?

    #pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 
    

    這似乎是我的Windows 7計算機,還Vista的上完美運行機。但是當我在XP上試用應用程序時,應用程序不會加載任何控件(例如按鈕,標籤等) - 甚至不會顯示消息框。

    此圖片顯示了我剛纔放在一起證明什麼,我試圖解釋一個小的測試應用程序:​​

    在這個測試中的應用我沒有使用任何花哨的特別或複雜的代碼。我只是有效地採取從MSDN庫最基本的示例代碼(http://msdn.microsoft.com/en-us/library/ff381409.aspx),並加入到WM_CREATE消息的部分,創建一個按鈕:

    MyBtn = CreateWindow(L"Button", L"My Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 25, 25, 100, 30, hWnd, NULL, hInst, 0); 
    

    但我就是想不通這是怎麼回事,併爲什麼它不工作。任何想法傢伙?先進的謝謝你。我也應該提到,應用程序是在Windows 7機器上使用Visual C++ 2010 Express構建的 - 這些應用程序是使用Visual C++ 2010 Express創建的,如果這有什麼不同?)

    +0

    我使用相同的清單加上'processorArchitecture =「X86」'屬性。我不確定它是否會修復它。 – 2010-05-30 11:15:09

    +0

    Windows的第6版是Windows Vista。嘗試將其更改爲5,看看會發生什麼。 – Puppy 2010-05-30 12:57:50

    +0

    @尼克D - 感謝您的建議,但事實證明不會有所作爲。 @DeadMG - 也沒有運氣。應用程序構建成功,但是當我嘗試運行它時,出現了有關所有平臺上的錯誤配置(Win XP,Vista和7)的錯誤。不過謝謝。 – user353297 2010-05-31 01:36:47

    回答

    1

    你打電話給InitCommonControlsEx嗎?詳情are here

    +0

    InitCommonControls被公共控件庫版本6忽略。 – Pindatjuh 2010-05-30 11:53:04

    +0

    非Ex版本的InitCommonControls在所有版本上都是不可操作的,它所做的只是將comctl32帶入您的地址空間(該函數的關鍵是dll函數導入,不是功能所做的工作) – Anders 2010-05-30 12:32:43

    +1

    是的,這就是我的意思。當被迫寫'性'時,我臉紅了。相關的MSDN頁面:http://msdn.microsoft.com/en-us/library/dsezt3x7.aspx – 2010-05-30 12:55:10

    0

    漢斯帕桑特:

    具有「清單」包含在可執行的想法是爲了避免調用InitCommonControls

    沒有清單,操作系統會自動初始化使用最「普通」的comomn控件。如果在可執行資源中找到清單 - 正是這些控件被初始化。

    嗯,我不知道問題的確切原因,我只能嘗試猜測。

    • 也許通用控件版本6.0在Windows XP(?)的支持
    • 也許清單必須包括所有必要的控制,不僅版本。 Vista和可能Wnd7自動初始化所​​有的「共同」共同的指定版本控制,而Windows XP可能不
    1
    #pragma comment(linker,"/manifestdependency:\"type='win32'... 
    
    1

    我也碰到這個問題,今天來升級到Win7和VC++ 2010的親後。

    我首先想到的是,也許我的清單是腐敗的,而最糟糕的是這是我在VC++ 2010中的第二個項目,第一個項目在Win7和XP上運行良好。

    所以我得出的結論是,在我的程序開始時包括InitCommonControls()解決了這個問題,爲什麼?

    所以我說這在我的代碼的頂部:

    #include <Commctrl.h> 
    #pragma comment (lib, "Comctl32.lib") 
    

    這在我的初始化代碼:

    InitCommonControls(); 
    

    加上繼我尋找答案,VC + 2010現在有SYSLINK控制列表中的控件,這就是我的第一個項目正常運行的原因。將其中一個添加到對話框,只要添加了代碼來處理通知Comctl32.lib和InitCommonControls或InitCommonControlsEx不需要?只要具有通用控件的清單嵌入,構建的程序也將在Win7和XP中運行!

    相關問題