前些天犯了些错误,就是那个程序加参数运行的问题,事实不需要那么麻烦,而且WinMain的第三个参数
也是可以用的,具体用法如下:

hInstance  =  hInst;
 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  " stdafx.h "
#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的一点使用经验,特此共享!相关推荐

  1. openMP的一点使用经验 四

    openMP的一点使用经验 四 http://www.cnblogs.com/yangyangcv/archive/2012/03/23/2413335.html 有了以上基本知识,对我来说做很多事情 ...

  2. OpenMP的一点使用经验

    参考:http://blog.sina.com.cn/s/blog_7462bf390101d8sd.html 最近在看多核编程.简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走 ...

  3. c++imread 函数_关于图像读取函数imread()的一点使用经验,注意默认参数的赋值

    标签: 读入数字图像到数组,用CNN进行训练,发现关于图像读取的一个问题. 问题描述:读取灰度数字图像,在验证时发现存在错误,从图像到数组中的值不完全一样? main code as follows: ...

  4. 巧妙共享Win7/Vista/XP文件夹权限

    巧妙共享Win7/Vista/XP文件夹权限 很多朋友在Win7/Vista共享文件时,为了方便都去掉了密码保护的共享.这样在共享文件夹时就需要添加Everyone或Guest权限.一般共享文件夹时是 ...

  5. YEP共享平台释放宜人贷无限潜力

    YEP共享平台释放宜人贷无限潜力 共享 数据 平台 技术 系统 阅读12452  背景 宜人贷(NYSE: YRD)是中国领先的在线金融服务平台,由宜信公司2012年推出.宜人贷通过科技驱动金融创新, ...

  6. 【theano-windows】学习笔记二——theano中的函数和共享参数

    前言 上一篇博客中学到了theano中的变量类型,也就是dscalar.dvector之类的, 然后还有一个theano.function和eval函数, 将我们所定义的操作转换成theano可执行的 ...

  7. 阿里云服务器突发性能型和共享型哪个好

    当你打算购买阿里云的云服务器时,会发现阿里云的 ECS服务器除了配置的选择外,还有两个不同命名的服务器实例:共享标准型和突发性能型. 如果你刚接触这方面,为了不弄错白花冤枉钱,很有必要了解下共享标准型 ...

  8. 共享办公室成为共享经济发展大趋势

    "互联网+"的时代,催生了很多新的商业模式,比如分享经济 -- 人们不再满足于在独立封闭的写字间办公,人们想接触更多人和资源,让自己变得更加开放和自由.所以,美国产生了一个&quo ...

  9. 动态口令设计系列一:基于共享密钥的动态口令方案

    2019独角兽企业重金招聘Python工程师标准>>> 由于传统的静态口令存在容易泄露(输入型泄密.传输型泄密.共享型泄密.记录型泄密.时间越长泄密危险性越高)且一旦泄露全线崩溃.不 ...

最新文章

  1. 三维空间几何变换原理[平移、旋转、错切]
  2. 最新 springBoot整合shiro(10分钟教程)
  3. SLAM: Orb_SLAM的使用小综述
  4. Python操作文件文档
  5. 学习使用SQL Server日期函数
  6. matlab中的级数怎默算_matlab绘图小技巧-图像光滑数据取点
  7. 【EOS】2.4 EOS数据存储
  8. automake连载--Linux下使用autoconfig automake进阶
  9. 动态场景下的语义SLAM的简单实现(基于YOLOv5目标检测)
  10. 高通see架构ppg测试流程sns_client_test_cpp
  11. 深度相机:结构光、TOF、双目相机
  12. php 使用手机扫条码,关于扫条码的问题
  13. Springboot简便的配置微信小程序
  14. 关于启动 vue 项目出现 98% after emitting CopyPlugin 的解决方法!
  15. 初识html5使用jsQR识别二维码
  16. PE结构学习(4)_节的操作
  17. ME59N 自动创建采购订单的凭证类型NB变更为指定类型Zxxx
  18. CWE 4.7中的新视图:工业控制系统的安全漏洞类别
  19. mysql sysdatabases_未能在 sysdatabases 中找到数据库 aa1xxxx 所对应的条目。没有找到具有该名称的条目...
  20. vue3:父子组件传值

热门文章

  1. 【算法】微信随机红包方案--实现
  2. 【java】算法题:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级台阶总共有多少种跳法?列举所有跳法
  3. 背包问题基础模型深度总结-文长慎入(01背包,完全背包,多重背包)
  4. 集成IOS 环信SDK
  5. npm link npm unlink
  6. SOJ.Output the Yanghui triangel
  7. Stata:异方差和自相关稳健F检验和t检验
  8. mysql学习笔记-ifnull()函数与nullif()函数
  9. java程序员应聘优秀简历
  10. 免费分享给大家一些iOS面试(包括BAT)