熟悉VC/MFC编写界面的朋友经常会遇到这样的问题:自己编写的小软件功能已经完全实现,但是界面极其难看,因为使用的都是Windows默认的菜单,对话框,状态栏等元素。
因此,软件后期的美化界面是一项比较重要的工作,上网搜了一下,总结如下:
一般美化界面有很多方案:

A、使用皮肤,网上有很多现成的皮肤加载方案
B、给予对话框的使用CDialogSk和CButtonST简单美化(即贴图)
C、使用Flash 作界面
D、使用网页做界面
E、使用WPF
      第一种方案是最傻瓜的,也是使用比较多的.只要软件功能实现了,加入几行简单的代码就可以实现美化。

第一种方案,经常用到的实现途径是使用SkinMagic换肤,SkinMagic网上有很多破解版本,而且网友也提供了很多漂亮的皮肤,只需要在程序中间加入几行初始化的代码即可使得程序瞬间变得很漂亮,一般使用方法如下:
(1)将SkinMagicTrial.lib、SkinMagicTrial.dll和SkinMagicLib.h拷贝到项目根目录下,并在工程中添加;
(2)把Skins文件夹放在项目根目录下;
(3)将 #include "SkinMagicLib.h" 拷贝到 StdAfx.h文件中;
(4)在C**App类中打开InitInstance()函数,在函数其开始部分增加
       VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), _T("ReadUI") ,NULL,NULL ) );
       VERIFY( 1 == LoadSkinFile("Skins\\corona.smf")); 
       VERIFY( 1 == SetDialogSkin( _T("Dialog") ) );
(5)在InitInstance()函数最后,但在以下代码之前,
       m_pMainWnd->ShowWindow(SW_SHOW);
       m_pMainWnd->UpdateWindow();
 加入如下代码
        VERIFY( 1 == SetWindowSkin(m_pMainWnd->m_hWnd ,  _T("MainFrame") ) );
(6)通过类向导给C**App增加ExitInstance() 函数,内容如下
        ExitSkinMagicLib();
        return CWinApp::ExitInstance();
这样就很轻松实现美化界面的目标。

但是经我本人实践,使用这个方法会出现一个问题:换肤后导致主菜单项不能像以前那样操作;比如以前我想操作第一个子菜单,就可以使用CMenu *pMenu=GetMenu()->GetSubMenu(0)获取控制, 但是使用了SkinMagic之后编译依然正常,但运行时却出错!!!

究其原因:产生该Bug的原因是SkinMagic在换肤时将窗体上面的默认菜单栏给去掉了,就是使用了SetMenu(NULL)方法。目的是为了用户在操作时不再有默认的菜单栏在原位置出现。用户所看到的菜单栏其实是SkinMagic通过内部保存的HMenu来绘制的。所以用户在GetMenu()时返回的值为NULL,CMenu *pMenu=GetMenu()->GetSubMenu(2) 这段话自然就会出错。

多次察看SkinMagicLib.h文件,终于找到解决办法如下:
      SkinMagic的动态库中都会提供了一个这样的函数HMENU __stdcall GetSkinMenu( HWND hWnd ),看到他就知道什么意思了吧?当时是可以得到菜单的句柄,这样的话就可以联合API函数HMENU GetSubMenu(  HMENU hMenu,   int nPos)得到子菜单的句柄,进而进行一些操作:
比如此时我要禁止第一个子菜单的第一个菜单项,就可以使用如下语句
EnableMenuItem(GetSubMenu(GetSkinMenu(*AfxGetApp()->m_pMainWnd), 0), 0, MF_BYPOSITION  | MF_GRAYED | MF_DISABLED);

一起去充分享受界面随意改变的乐趣吧。。。。。

MFC界面库 SkinMagic相关推荐

  1. MFC界面库之BCGControlers使用

    觉得默认的MFC实在是太丑了,想要用一下扩展的界面库.网上查了些资料.不过在这里我还是小结一下使用的过程吧! 1.当然是安装文件了,在上一步不用多勾选,直接按照默认的就可以了...但是要注意一定要以管 ...

  2. MFC 界面美化 Skinmagic

    用MFC写的这个应用程序,写出来的界面实在是看不下去,于是乎到就像来在界面添加一些图片来美化,于是找了图片,还是太丑,又看到网上的帖子说有皮肤库啊,那个界面更好看,于是搜,也没有什么干货,大家也是从一 ...

  3. c语言窗口皮肤,MFC 界面美化 Skinmagic

    用MFC写的这个应用程序,写出来的界面实在是看不下去,于是乎到就像来在界面添加一些图片来美化,于是找了图片,还是太丑,又看到网上的帖子说有皮肤库啊,那个界面更好看,于是搜,也没有什么干货,大家也是从一 ...

  4. 使用MFC界面库LibUIDK

    LibUIDK简介:     LibUIDK是专业开发Windows平台下图形用户界面的开发包,该开发包基于Microsoft的MFC库.使用此开发工具包可轻易把美工制作的精美界面用VC实现,由于Li ...

  5. MFC界面库BCGControlBar的介绍

    英文原文: http://www.bcgsoft.com/bcgcontrolbarpro.htm BCGControlBar是MFC的一个扩展库其英文全称是"Business Compon ...

  6. MFC界面库BCGControlBar v30.0新功能详解:Desktop Alert Window

    亲爱的BCGSoft用户,我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFC v30.0正式发布!新版本添加了对Visual St ...

  7. 多线程+Socket+MFC界面库实现CS模式的云盘系统

    功能:CS 模式文件上传.下载服务器 + 客户端(轻量级的个人云盘系统) 使用方法: 保证文件夹路径E:\myLibForYunPan\data和E:\myLibForYunPan\download存 ...

  8. MFC界面库BCGControlBar Pro MFC v33.2亮点 - 全新Office 2022主题样式

    BCGControlBar库拥有500多个经过全面设计.测试和充分记录的MFC扩展类. 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间. 亲爱的BCGSoft用户,我们非常高 ...

  9. MFC界面库BCGControlBar v33.0 - 全新升级Ribbon Bar、工具栏等

    亲爱的BCGSoft用户,我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFC v33.0正式发布!此版本包括对每个显示器 DPI ...

最新文章

  1. 计算机房一般在办公楼建设吗,写字楼大厦机房建设技术方案.doc
  2. bootstrap使用总结(导航在carousel居中之上)
  3. jQuery 侧栏菜单点击body消失
  4. f12 卡 谷歌浏览器_干货分享。关于谷歌浏览器的使用技巧,不需要插件
  5. 问题管理——交互机器人
  6. php socket(服务端与客户端)demo
  7. Centos普通用户权限报错:** is not in the sudoers file. This incident will be reported.
  8. python将mat文件转为png
  9. 训练集、验证集和测试集的意义
  10. python给动态变量赋值_python 动态的定义变量名,并给其赋值
  11. 重新初始化_关窗,也有大学问!宝马车窗初始化设置步骤方法...
  12. seaborn限制x与y的取值范围
  13. Android中那些有你不知道的事
  14. Java JDBC Statement
  15. vba monthview控件64位_VBA学习
  16. 【洛谷P1282】多米诺骨牌
  17. 基于MATLAB的线性规划
  18. echarts 饼状图渐变色
  19. 服务器上的VGA切换原理,什么是VGA接口 原理及特点是什么
  20. Sqlserver2000服务器安装配置

热门文章

  1. java中set集合_java中怎么往集合类set里添加数据??
  2. PathPathMeasure完全解析
  3. Unity3d遮挡剔除(Occlusion Culling)优化【2019】
  4. 缓存一致性协议(MESI)
  5. 网站域名权重怎么样提高?
  6. 番外篇:研究生心得:研二篇(一)
  7. 西安尚学堂练习9.5|Java编程笔试面试题
  8. Python爬虫教程:urllib 基础使用(三)
  9. List集合的迭代神器ListIterator
  10. jquery遍历数组绑定到html,jquery数组循环添加问题