目前共有8篇帖子。
字體大小:較小 - 100% (默認)  內容轉換:不轉換
 
點擊 回復
1698 7
【教程】用三行C++代码讓Win32程序擁有XP風格控件,无需manifest文件或24资源
巨大八爪鱼
武林盟主 二十一級
回復
1樓 發表於:2015-12-5 14:34
首先,在Visual Studio 2012中,建立一个Win32空工程,再新建一个源文件,名叫Main.cpp:


【代码】
#include <Windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, L"Hello World!", L"Hello", MB_ICONWARNING);
    return 0;
}
然后编译运行。
运行结果:

巨大八爪鱼
武林盟主 二十一級
回復
2樓 發表於:2015-12-5 14:38
可见目前该程序的控件没有XP风格。

返回代码编辑窗口。在文件包含部分加入#include <CommCtrl.h>。注意这个一定要放到#include <Windows.h>的下面,如果放反了的话,编译时就会出现下面的错误:

巨大八爪鱼
武林盟主 二十一級
回復
3樓 發表於:2015-12-5 14:39
在WinMain函数前,加入如下代码:
#pragma comment(lib, "Comctl32.lib")
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
巨大八爪鱼
武林盟主 二十一級
回復
4樓 發表於:2015-12-5 14:39
巨大八爪鱼
武林盟主 二十一級
回復
5樓 發表於:2015-12-5 14:40
最后,编译并运行程序。
可见程序已经拥有了XP风格控件:

巨大八爪鱼
武林盟主 二十一級
回復
6樓 發表於:2015-12-5 14:41
本文参考资料:http://www.bianceng.cn/Programming/cplus/201306/36676.htm
巨大八爪鱼
武林盟主 二十一級
回復
7樓 發表於:2015-12-5 16:47
这是微软官方对这个问题给出的解答:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx


翻译:Comctl32.dll第六版无需下载,它是一个Windows自带的库文件。在manifest里面声明一下就能在程序中启用。
巨大八爪鱼
武林盟主 二十一級
回復
8樓 發表於:2016-5-24 16:10
【补充】
如果编译的程序需要在XP系统下运行,最好在主函数里调用一下InitCommonControls();,否则控件可能在XP下完全无法显示,而Win7上却正常。

例如:


详见:
https://zh.arslanbar.net/post.php?t=24058
回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
(快捷鍵:Ctrl+Enter)
本帖信息
點擊數:1698 回複數:7
作者:巨大八爪鱼
最後回覆:巨大八爪鱼
最後回復時間:2016-5-24 16:10
精品區:未分類
本吧精品帖子
公告板