CreateWindowEx 不支持新风格控件,如何解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CreateWindowEx 不支持新风格控件,如何解决相关的知识,希望对你有一定的参考价值。

比如我用 CreateWindowEx 在程序运行时,动态地在窗体上添加一个按钮(类名“button”),但是显现出来的是Windows经典风格的,就是一个肉色的方块,一点也不漂亮。我想建立一个像 计算器 (Windows自带的)其中的新风格按钮,无奈。在MSDN上找的在资源中添加
1 RT_MANIFEST "XpTheme.xml"
但是这种方法只对定义在对话框中的子控件有效,CreateWindowEx 建立的还是老风格。第二种方法就是添加一个和可执行文件同名的后缀是“*.manifest”的文件,如
test.exe
那就添加
test.exe.manifest

文件内容就是一堆网上随处可查的 XML 格式的 manifest 文件。但是我确实不想在文件后跟一个尾巴。
请问有什么连接参数、API之类的东西可以解决么?

参考技术A 添加 manifest 资源和创建与 exe 同名的 manifest 文件是一样的效果,都只对已有的控件有效。如果需要对新创建的控件使用主题效果,可以试试 SetWindowTheme 函数:
hwnd = CreateWindow(...);
// 给 hwnd 控件设置 Button 类的主题样式
SetWindowTheme(hwnd, L"Button", NULL);

Windows API编程(不是MFC)用CreateWindowEx创建的按钮等子窗口控件是默认的Windows经典样式,如何改变?

改成win7的那种样式,请问要用什么函数?

组合或者去除某些风格、
譬如我想有这两个属性:WS_EX_ACCEPTFILES||WS_EX_APPWINDOW
或者我想去掉某个样式的属性:WS_EX_PALETTEWINDOW&~WS_WX_TOPMOST
或者你可以使用DLL组件。去实现动态的皮肤
win7的样式是系统提供的,也就相当于DLL组件,你如果是在win7环境下运行就会有这些属性啊
参考技术A 在其中一个头文件中加入下面的代码
------------------------------
#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追问

大哥真是太厉害了,真的有用!但是这是什么原理呢?请大神讲解!

参考技术B 没有试过哦

你可以试试调整CreateWindowEx第一个参数的值.
http://baike.baidu.com/view/1080304.htm

参考资料:百度百科

以上是关于CreateWindowEx 不支持新风格控件,如何解决的主要内容,如果未能解决你的问题,请参考以下文章

Windows API编程(不是MFC)用CreateWindowEx创建的按钮等子窗口控件是默认的Windows经典样式,如何改变?

CreateWindowEx(摘自搜狗百科)

Win32编辑控件默认文本

CreateWindowEx和CreateWindow的区别

VB如何用CreateWindowEx 创建无标题栏无边框窗体?

怎么用C语言编写一个windows窗口?