user-0 提问: DEV-C++ 如何使用新版的按钮样式

回复:
user: user-1
content: 是这里吗?

user: user-0
content: 引用 16 楼 user-2 的回复:系统的exporer.exe显示程序图标时，可以直接访问exe中的大小图标资源 所以它是怎么区分出哪些是大图标，哪些是小图标的，是根据尺寸自己决定的吗？  引用 16 楼 user-2 的回复:另外，程序窗口的图标一定是要用API修改才能显示你想要的，否则显示的就是默认图标 就是说控制台窗口选择了该图标，并将其设置为了自己的窗口图标 可是Reshacker放入和windres识别rc资源的放入，造成了控制台窗口图标的不一样，所以前面想问的是，它这个为啥会不一样 它们将图标放入exe时，应该都是将该图标标记为id最小的吧，但前者，控制台选择了此图标作为窗口图标，后者，控制台窗口依然使用的默认图标  麻烦你了

user: user-2
content: 引用 15 楼 六道佩恩 的回复:系统没有经wndclass.hIcon和wndclassex.hIconSm就识别出了大图标和小图标，这个是怎么做到的？我之前想问的是这个。 系统的exporer.exe显示程序图标时，可以直接访问exe中的大小图标资源，也可以使用exe中最小ID的图标资源，即使你的exe中未使用任何图标资源 另外，程序窗口的图标一定是要用API修改才能显示你想要的，否则显示的就是默认图标

user: user-2
content: 引用 13 楼 六道佩恩 的回复:话说，添加到exe里的图标，是如何区分大图标和小图标的？微软文档中有关于这个的说明吗？ ResHacker就是修改了程序资源里图标，你没写，程序有默认的，你用Reshacker替换了默认的图标 窗口属性里有分辨大小图标的属性 wndclass.hIcon和wndclassex.hIconSm cmd窗口是系统帮你创建的窗口，也有窗口属性

user: user-0
content: 引用 14 楼 user-2 的回复:[quote=引用 13 楼 六道佩恩 的回复:] 话说，添加到exe里的图标，是如何区分大图标和小图标的？微软文档中有关于这个的说明吗？ ResHacker就是修改了程序资源里图标，你没写，程序有默认的，你用Reshacker替换了默认的图标 窗口属性里有分辨大小图标的属性 wndclass.hIcon和wndclassex.hIconSm cmd窗口是系统帮你创建的窗口，也有窗口属性 [/quote] 打开一个文件夹，Ctrl+滚轮缩放，此时图标的大小会变化，大的图标依然很清晰，说明使用了大图标，这个时候显然不是依靠类里的wndclass.hIcon和wndclassex.hIconSm吧，毕竟程序都还没运行，而exe里的资源确实存在大图标和小图标，也就是说，系统没有经wndclass.hIcon和wndclassex.hIconSm就识别出了大图标和小图标，这个是怎么做到的？我之前想问的是这个。  还有就是，我测试了下，用rc资源文件可以修改程序的图标，但修改不了控制台窗口的图标（不使用设置图标的API，仅有无意义的几行代码），既然作为程序图标成功，说明它的资源ID已经是最小的了，应该也算替换了默认的图标了吧？可是为什么控制台窗口的图标没有改变呢？ 我目标只想到一种可能，按你说的，通过Reshacker，它是真的替换掉了默认的图标，而这个资源rc，它可能没有替换，而是添加了一个图标，于是系统识别时，采用了ID最小的，于是exe的外观图标就变了，但默认图标存在，控制台窗口优先找默认图标（没有的话再找id最小的），默认图标存在，于是使用了默认图标。这个猜测对吗？

user: user-2
content: 引用 9 楼 六道佩恩 的回复:唯一让我不解的是，我在找资料的过程中，看到有人把图标加到资源里后，控制台的图标改变了（程序就一个输入输出），我没用资源文件，直接用软件把图标放exe里了，结果控制台的图标也改变了。不知道是不是控制台的窗口类里写的把程序文件里的任意图标作为窗口图标。  看到有人把图标加到资源里后，控制台的图标改变了（程序就一个输入输出） ---> Windwos显示程序时，会将资源文件中ID最小的图标作为程序的图标显示（这个是大图标），但如果程序中不使用WM_SETICON消息更改图标的话， 程序运行时，左上角的图标（这个是小图标）是不会更改的  你用软件把图标放exe里了，相当于修改了默认的程序图标，还记得 wndclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION); wndclassex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);  有效的写法是在资源文件中登记图标 ICO_MANI  ICON       "bulbs.ico"  然后在console程序中更换图标即可 SendMessage(GetConsoleWindow(), WM_SETICON, (WPARAM)ICON_SMALL, (LPARAM)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(ICO_MANI)));

user: user-0
content: 引用 12 楼 user-2 的回复:[quote=引用 9 楼 六道佩恩 的回复:] 唯一让我不解的是，我在找资料的过程中，看到有人把图标加到资源里后，控制台的图标改变了（程序就一个输入输出），我没用资源文件，直接用软件把图标放exe里了，结果控制台的图标也改变了。不知道是不是控制台的窗口类里写的把程序文件里的任意图标作为窗口图标。  看到有人把图标加到资源里后，控制台的图标改变了（程序就一个输入输出） ---> Windwos显示程序时，会将资源文件中ID最小的图标作为程序的图标显示（这个是大图标），但如果程序中不使用WM_SETICON消息更改图标的话， 程序运行时，左上角的图标（这个是小图标）是不会更改的  你用软件把图标放exe里了，相当于修改了默认的程序图标，还记得 wndclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION); wndclassex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);  有效的写法是在资源文件中登记图标 ICO_MANI  ICON       "bulbs.ico"  然后在console程序中更换图标即可 SendMessage(GetConsoleWindow(), WM_SETICON, (WPARAM)ICON_SMALL, (LPARAM)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(ICO_MANI))); [/quote] 你可能没明白我意思 我发图吧 编写简单代码：   文件夹里就这个几个文件：   把图标文件添加到这个exe里：   程序图标变了，当然，我重点不是说这个：   控制台的窗口图标变了，我可没有调用任何修改窗口图标的代码：   话说，添加到exe里的图标，是如何区分大图标和小图标的？微软文档中有关于这个的说明吗？

user: user-0
content: 引用 6 楼 user-2 的回复: 话说你知道怎么创建richedit吗？ https://bbs.csdn.net/topics/398295154

user: user-0
content: 引用 6 楼 user-2 的回复:[quote=引用 4 楼 六道佩恩 的回复:] 我搞出来了，不过是单用的manifest文件 不过我有两个问题 1. 这个文件里的内容除了这个32位和64位的区别，还有没有哪里可以修改？我看微软文档提供的都是一模一样的。如果只有这一种写法，是不是意味着就这一种通过manifet可设置的视觉样式？ 2. 我尝试把manifest文件加到exe里，但这样就不起效了，请问是这么回事？ 1. 没什么其他可改的 2. 把manifest文件以资源的形式加到exe里，需要调用函数InitCommonControls();才能开启效果     另外要注意是    1 24 "XPStyle.manifest"     其中的24代表一种格式[/quote] 不好意思，是我记错了，我的manifest里的processorArchitecture写的是* 我在贴子里没看到你的那个回复，在结贴时才看到

user: user-0
content: 引用 6 楼 user-2 的回复:[quote=引用 4 楼 六道佩恩 的回复:] 我搞出来了，不过是单用的manifest文件 不过我有两个问题 1. 这个文件里的内容除了这个32位和64位的区别，还有没有哪里可以修改？我看微软文档提供的都是一模一样的。如果只有这一种写法，是不是意味着就这一种通过manifet可设置的视觉样式？ 2. 我尝试把manifest文件加到exe里，但这样就不起效了，请问是这么回事？ 1. 没什么其他可改的 2. 把manifest文件以资源的形式加到exe里，需要调用函数InitCommonControls();才能开启效果     另外要注意是    1 24 "XPStyle.manifest"     其中的24代表一种格式[/quote] 非常感谢，我总算是搞定了 dev可以使用资源文件，新建一个项目文件，然后添加进rc文件，一键就行了。。。我竟然还搞了这么久 它调用的windres.exe来编译资源文件 唯一让我不解的是，我在找资料的过程中，看到有人把图标加到资源里后，控制台的图标改变了（程序就一个输入输出），我没用资源文件，直接用软件把图标放exe里了，结果控制台的图标也改变了。不知道是不是控制台的窗口类里写的把程序文件里的任意图标作为窗口图标。

user: user-2
content: 引用 7 楼 六道佩恩 的回复:不过还有个小问题，我的程序编译为64位的，但是manifest是按你给是32位那样写的，结果也是可行的 这个我以前貌似遇到过问题才发现是混用了32位和64位的manifest，现在不记得了

user: user-0
content: 引用 6 楼 user-2 的回复:1. 没什么其他可改的 2. 把manifest文件以资源的形式加到exe里，需要调用函数InitCommonControls();才能开启效果     另外要注意是    1 24 "XPStyle.manifest"     其中的24代表一种格式  结果还是要用上资源文件吗？唉，那我只能再研究研究这个资源文件了  不过还有个小问题，我的程序编译为64位的，但是manifest是按你给是32位那样写的，结果也是可行的

user: user-2
content: 引用 4 楼 六道佩恩 的回复:我搞出来了，不过是单用的manifest文件 不过我有两个问题 1. 这个文件里的内容除了这个32位和64位的区别，还有没有哪里可以修改？我看微软文档提供的都是一模一样的。如果只有这一种写法，是不是意味着就这一种通过manifet可设置的视觉样式？ 2. 我尝试把manifest文件加到exe里，但这样就不起效了，请问是这么回事？ 1. 没什么其他可改的 2. 把manifest文件以资源的形式加到exe里，需要调用函数InitCommonControls();才能开启效果     另外要注意是    1 24 "XPStyle.manifest"     其中的24代表一种格式

user: user-0
content: 引用 1 楼 user-2 的回复:Windows系编译器加一段参数，其实幕后也是做这些设置而已                             C语言中XP风格的实现  第一步: 在工程文件中新建RC文件"XPStyle.manifest" 内容如下:  <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency>    <dependentAssembly>       <assemblyIdentity          type="win32"          name="Microsoft.Windows.Common-Controls"          version="6.0.0.0"          processorArchitecture="x86"          publicKeyToken="6595b64144ccf1df"          language="*" />    </dependentAssembly> </dependency> </assembly> ----------------- 以下为64位 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency>    <dependentAssembly>       <assemblyIdentity          type="win32"          name="Microsoft.Windows.Common-Controls"          version="6.0.6000.0"          processorArchitecture="amd64"          publicKeyToken="6595b64144ccf1df"          language="*" />    </dependentAssembly> </dependency> </assembly>    第二步: 在新建的工程文件中RC资源文件里加入 1 24 "XPStyle.manifest"  第三步: 加入头文件: #include <commctrl.h> 并在IDE工程菜单-->设置-->Link选项页-->Project Options中加入comctl32.lib库(因为默认未添加该库) 或在代码中加入 #pragma comment(lib, "comctl32.lib") // for InitCommonControls  第四步: 调用函数: InitCommonControls(); //XP style,否则调用MessageBox将失效 我搞出来了，不过是单用的manifest文件 不过我有两个问题 1. 这个文件里的内容除了这个32位和64位的区别，还有没有哪里可以修改？我看微软文档提供的都是一模一样的。如果只有这一种写法，是不是意味着就这一种通过manifet可设置的视觉样式？ 2. 我尝试把manifest文件加到exe里，但这样就不起效了，请问是这么回事？

user: user-0
content: 引用 2 楼 user-2 的回复:DEV-C++支持资源文件吗  我是打算把手边几件事做了再好好研究下你这个的，因为初看有点懵，暂时难以消化。 其实资源文件我不太会弄，应该可以吧，我加图标用的其他程序往exe里加的，其他资源文件没试过。  我本来是打算把你这段文字写进XPStyle.manifest文件，然后用同样的方法加入到exe。

user: user-2
content: 引用 楼主 六道佩恩 的回复:这是新版按钮样式（VS上或易语言等可以做到），鼠标移动过去会有颜色变化，点击后无焦点锁定：     这是旧版按钮样式：     请问在DEV-C++上如何使用到新版按钮样式？Windows系编译器加一段参数可行，那么DEV-C++上该如何做？ DEV-C++支持资源文件吗

user: user-2
content: Windows系编译器加一段参数，其实幕后也是做这些设置而已                             C语言中XP风格的实现  第一步: 在工程文件中新建RC文件"XPStyle.manifest" 内容如下:  <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency>    <dependentAssembly>       <assemblyIdentity          type="win32"          name="Microsoft.Windows.Common-Controls"          version="6.0.0.0"          processorArchitecture="x86"          publicKeyToken="6595b64144ccf1df"          language="*" />    </dependentAssembly> </dependency> </assembly> ----------------- 以下为64位 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency>    <dependentAssembly>       <assemblyIdentity          type="win32"          name="Microsoft.Windows.Common-Controls"          version="6.0.6000.0"          processorArchitecture="amd64"          publicKeyToken="6595b64144ccf1df"          language="*" />    </dependentAssembly> </dependency> </assembly>    第二步: 在新建的工程文件中RC资源文件里加入 1 24 "XPStyle.manifest"  第三步: 加入头文件: #include <commctrl.h> 并在IDE工程菜单-->设置-->Link选项页-->Project Options中加入comctl32.lib库(因为默认未添加该库) 或在代码中加入 #pragma comment(lib, "comctl32.lib") // for InitCommonControls  第四步: 调用函数: InitCommonControls(); //XP style,否则调用MessageBox将失效