SkinMagic的一点使用经验,特此共享!
前些天犯了些错误,就是那个程序加参数运行的问题,事实不需要那么麻烦,而且WinMain的第三个参数
也是可以用的,具体用法如下:
lpCommLine = & lpCmdLine[ 0 ];
if ( ! strcmp(lpCommLine, "" )) // 无参数
::DialogBoxParam (hInst,(LPCTSTR)IDD_MAIN,NULL,(DLGPROC)DlgProc,NULL);
else if ( ! strcmp(lpCommLine, " /a " )) // 加参数 /a
::DialogBoxParam (hInst,(LPCTSTR)IDD_DIALOG1,NULL,(DLGPROC)DlgProcA,NULL);
return 0 ;
这样就可以了,特此说明!
再来说说对话框如何来用SkinMagic类的换肤工具来换肤的问题。
在以前看过一些用SkinMagic来换肤的例子,但它们大多都是MFC的程序,而SkinMagic中自带的SDK的
例子也是用CreateWindow/Ex系列函数来创建窗口的,并且在创建之前都会将WNDCALSS中的HMENU给设置
成合适的值(如果有的话),否则窗口成功显示后,将会没有菜单!而对于调用DialogBoxParam 系列函
数创建的对话框来说,HMENU只需要在资料设计器的简单的设置一下就可以了,此时如果你再用SkinMagic
中的示例代码来对窗口进行换肤时就会发现一个可耻的错误:菜单没有了!!那么对于那些即想使用对
话框来做主界面而又想显示菜单的开发人员来说应该怎么办呢?
于是便有了下面的代码(呼~ 呼~ !废话终于说完-_-#)
#include " resource.h "
#include " SkinMagicLib.h "
HMENU hMenuStyle,hMenu; // 需要设为全局变量,否则无法选中
HINSTANCE hInst;
LRESULT CALLBACK DlgProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
hInst = hInstance;
InitSkinMagicLib(hInst, " TestSkin " ,NULL,NULL);
LoadSkinFile( " corona.smf " );
// SetDialogSkin("Dialog"); // 这里不需要这个,因为后面会处理
::DialogBoxParam (hInst,(LPCTSTR)IDD_MAIN,NULL,(DLGPROC)DlgProc,NULL);
ExitSkinMagicLib();
return 0 ;
}
LRESULT CALLBACK DlgProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HICON hIcon ;
int nWpa;
switch (uMsg)
{
case WM_INITDIALOG:
// 为对话框加上菜单
hMenu = ::GetMenu(hWnd);
hMenuStyle = ::GetSubMenu (hMenu, 1 );
// 自己来构造wParam参数,并向窗口发送WM_COMMAND消息
nWpa = ( int )IDM_XPBLUE;
::SendMessage (hWnd,WM_COMMAND,nWpa,NULL);
hIcon = ::LoadIcon (NULL, " Feather2.ico " );
::SendMessage (hWnd,WM_SETICON,(WPARAM)ICON_BIG,(LPARAM)hIcon);
return true ;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDM_XPBLUE: // 得理在WM_INITDIALOG中发来的消息
// 将窗体风格设为XP风格
if (LoadSkinFromResource(hInst,(LPCTSTR)IDR_SKINXPBLUE1, " SKINXPBLUE " ))
{
::CheckMenuItem (hMenuStyle,IDM_XPBGREAN,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPPLUS,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPSTEEL,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPBLUE,MF_CHECKED);
SetWindowSkin(hWnd, " MainFrame " ); // 设置窗口的风格
}
break ;
case IDM_XPBGREAN:
if (LoadSkinFromResource(hInst,(LPCTSTR)IDR_SKINXPBLUE2, " SKINXPBLUE " ))
{
::CheckMenuItem (hMenuStyle,IDM_XPBGREAN,MF_CHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPPLUS,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPSTEEL,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPBLUE,MF_UNCHECKED);
SetWindowSkin(hWnd, " MainFrame " ); // 设置窗口的风格
}
break ;
case IDM_XPPLUS:
if (LoadSkinFromResource(hInst,(LPCTSTR)IDR_SKINXPBLUE3, " SKINXPBLUE " ))
{
::CheckMenuItem (hMenuStyle,IDM_XPBGREAN,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPPLUS,MF_CHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPSTEEL,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPBLUE,MF_UNCHECKED);
SetWindowSkin(hWnd, " MainFrame " ); // 设置窗口的风格
}
break ;
case IDM_XPSTEEL:
if (LoadSkinFromResource(hInst,(LPCTSTR)IDR_SKINXPBLUE4, " SKINXPBLUE " ))
{
::CheckMenuItem (hMenuStyle,IDM_XPBGREAN,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPPLUS,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPSTEEL,MF_CHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPBLUE,MF_UNCHECKED);
SetWindowSkin(hWnd, " MainFrame " ); // 设置窗口的风格
}
break ;
case IDM_OTHER:
if (LoadSkinFromResource(hInst,(LPCTSTR)IDR_SKINXPBLUE5, " SKINXPBLUE " ))
{
::CheckMenuItem (hMenuStyle,IDM_XPBGREAN,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPPLUS,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPSTEEL,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPBLUE,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_OTHER,MF_CHECKED);
SetWindowSkin(hWnd, " MainFrame " ); // 设置窗口的风格
}
break ;
case IDC_BUTTON1:
::MessageBox ( 0 , " test " , " test " , 0 );
break ;
case IDM_EXIT:
::SendMessage (hWnd,WM_CLOSE, 0 , 0 );
break ;
}
break ;
case WM_CLOSE:
::EndDialog (hWnd, 0 );
return true ;
}
return false ;
}
关键就是在WinMain中不能立即调用SetDialogSkin(或SetWindowSkin),所以我把它注释了!然后在处理WM_INITDIALOG消息时对本窗口发送一个
WM_COMMAND消息(wParam的低16位指向菜单ID,如IDM_XPBLUE),这样程序就会调用如下的代码:
case IDM_XPBLUE:// 得理在WM_INITDIALOG中发来的消息
// 将窗体风格设为XP风格
if(LoadSkinFromResource(hInst,(LPCTSTR)IDR_SKINXPBLUE1,"SKINXPBLUE"))
{
::CheckMenuItem (hMenuStyle,IDM_XPBGREAN,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPPLUS,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPSTEEL,MF_UNCHECKED);
::CheckMenuItem (hMenuStyle,IDM_XPBLUE,MF_CHECKED);
SetWindowSkin(hWnd,"MainFrame");//设置窗口的风格
}
break;
当然在运行这段代码前必须先将皮肤文件以资源的形式导入,在此就不多说!
全文完!欢迎讨论
SkinMagic的一点使用经验,特此共享!相关推荐
- openMP的一点使用经验 四
openMP的一点使用经验 四 http://www.cnblogs.com/yangyangcv/archive/2012/03/23/2413335.html 有了以上基本知识,对我来说做很多事情 ...
- OpenMP的一点使用经验
参考:http://blog.sina.com.cn/s/blog_7462bf390101d8sd.html 最近在看多核编程.简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走 ...
- c++imread 函数_关于图像读取函数imread()的一点使用经验,注意默认参数的赋值
标签: 读入数字图像到数组,用CNN进行训练,发现关于图像读取的一个问题. 问题描述:读取灰度数字图像,在验证时发现存在错误,从图像到数组中的值不完全一样? main code as follows: ...
- 巧妙共享Win7/Vista/XP文件夹权限
巧妙共享Win7/Vista/XP文件夹权限 很多朋友在Win7/Vista共享文件时,为了方便都去掉了密码保护的共享.这样在共享文件夹时就需要添加Everyone或Guest权限.一般共享文件夹时是 ...
- YEP共享平台释放宜人贷无限潜力
YEP共享平台释放宜人贷无限潜力 共享 数据 平台 技术 系统 阅读12452 背景 宜人贷(NYSE: YRD)是中国领先的在线金融服务平台,由宜信公司2012年推出.宜人贷通过科技驱动金融创新, ...
- 【theano-windows】学习笔记二——theano中的函数和共享参数
前言 上一篇博客中学到了theano中的变量类型,也就是dscalar.dvector之类的, 然后还有一个theano.function和eval函数, 将我们所定义的操作转换成theano可执行的 ...
- 阿里云服务器突发性能型和共享型哪个好
当你打算购买阿里云的云服务器时,会发现阿里云的 ECS服务器除了配置的选择外,还有两个不同命名的服务器实例:共享标准型和突发性能型. 如果你刚接触这方面,为了不弄错白花冤枉钱,很有必要了解下共享标准型 ...
- 共享办公室成为共享经济发展大趋势
"互联网+"的时代,催生了很多新的商业模式,比如分享经济 -- 人们不再满足于在独立封闭的写字间办公,人们想接触更多人和资源,让自己变得更加开放和自由.所以,美国产生了一个&quo ...
- 动态口令设计系列一:基于共享密钥的动态口令方案
2019独角兽企业重金招聘Python工程师标准>>> 由于传统的静态口令存在容易泄露(输入型泄密.传输型泄密.共享型泄密.记录型泄密.时间越长泄密危险性越高)且一旦泄露全线崩溃.不 ...
最新文章
- 三维空间几何变换原理[平移、旋转、错切]
- 最新 springBoot整合shiro(10分钟教程)
- SLAM: Orb_SLAM的使用小综述
- Python操作文件文档
- 学习使用SQL Server日期函数
- matlab中的级数怎默算_matlab绘图小技巧-图像光滑数据取点
- 【EOS】2.4 EOS数据存储
- automake连载--Linux下使用autoconfig automake进阶
- 动态场景下的语义SLAM的简单实现(基于YOLOv5目标检测)
- 高通see架构ppg测试流程sns_client_test_cpp
- 深度相机:结构光、TOF、双目相机
- php 使用手机扫条码,关于扫条码的问题
- Springboot简便的配置微信小程序
- 关于启动 vue 项目出现 98% after emitting CopyPlugin 的解决方法!
- 初识html5使用jsQR识别二维码
- PE结构学习(4)_节的操作
- ME59N 自动创建采购订单的凭证类型NB变更为指定类型Zxxx
- CWE 4.7中的新视图:工业控制系统的安全漏洞类别
- mysql sysdatabases_未能在 sysdatabases 中找到数据库 aa1xxxx 所对应的条目。没有找到具有该名称的条目...
- vue3:父子组件传值
热门文章
- 【算法】微信随机红包方案--实现
- 【java】算法题:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级台阶总共有多少种跳法?列举所有跳法
- 背包问题基础模型深度总结-文长慎入(01背包,完全背包,多重背包)
- 集成IOS 环信SDK
- npm link npm unlink
- SOJ.Output the Yanghui triangel
- Stata:异方差和自相关稳健F检验和t检验
- mysql学习笔记-ifnull()函数与nullif()函数
- java程序员应聘优秀简历
- 免费分享给大家一些iOS面试(包括BAT)