以前一直没有接触过皮肤库这玩意, 最近做一个im项目需要用到皮肤库了, 我们公司用的是SkinMagic, 关于SkinMagic的安装和使用方法, 网上有很多教程, 在SkinMagicLib.h头文件里介绍也很详细, 这里就不重复了, 主要描述一下我在使用SkinMagic碰到过的问题. 刚开始使用SkinMagic库时, 觉得它很简单(基本使用确实是很简单的, -_-), 一眼就扫完了它所包含的几个常用函数:
InitSkinMagicLib 初始化库
LoadSkinFile 加载皮肤文件
SetWindowSkin 设置窗体皮肤
SetDialogSkin 设置对话框皮肤
SetSingleDialogSkin 设置单个对话框皮肤
由于我的项目是对话框程式, 所以就选择了SetWindowSkin和SetDialogSkin函数, 运行起来才发现所有的窗口样式完全一样了, 在弹出的对话框中有些是不能一样的, 于是乎,我又在创建其他对话框的时候用到了SetSingleDialogSkin函数, 但结果却不是我想象的那样, SetSingleDialogSkin所设置的样式并没有生效, 上网找了好多资料, 无非也是介始上面几个函数的用法, 还有的说SetSingleDialogSkin要用到OnCreate消息里去, 但我测试时发现在OnCreate消息里使用SetSingleDialogSkin会返回0, 导致VERIFY断言失败, 经过多次测试发现, 是因为在开始调用了SetDialogSkin的原因, 如果在开始不调用SetDialogSkin, 在OnCreate不论是使用SetWindowSkin或SetSingleDialogSkin都可以实现皮肤的加载, 即使是不在OnCreate函数中, 只是指定的窗体创建了, 这两个函数还是有效的.
所以我猜想, SkinMagic设置SetDialogSkin后, 所有的对话框就会应用同一种样式了, 不能再通过SetSingleDialogSkin来改变, 这似乎与我们想象的不太一样, 应该是SetDialogSkin设置通用对话框的样式, 而对于SetSingleDialogSkin的调用窗体作特殊处理才合乎情理, 不知道是不是SkinMagic本身就是这样设置的, 为这问题浪费好多时间!!!!~~ 如果不是这样的话, 有知道原因的朋友, 麻烦告知下, 谢谢!!