c++
  • winapi
  • windows-xp
  • button
  • visual-styles
  • 2010-05-30 49 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中运行!

    相关问题