首页 > 其他分享 >SkinMagic使用的基本方法及高级方法

SkinMagic使用的基本方法及高级方法

时间:2023-01-24 14:05:44浏览次数:32  
标签:SkinMagic 自绘 控件 皮肤 高级 窗体 方法 2.5 加载


1.       SkinMagic使用的方法

1.1    初始化皮肤控件 InitSkinMagicLib

例: nInitSkinMagicLib=InitSkinMagicLib( AfxGetInstanceHandle(),_T("LSA") ,NULL,NULL);加载皮肤文件 LoadSkinFile(根据文件路径进行加载)或LoadSkinFromResource(根据资源名称进行加载)。

例:nLoadSkinFile=LoadSkinFile(sSkinFilePath);

1.2    使用SetDialogSkin或者SetSingleDialogSkin或者SetShapeWindowSkin给窗体加载皮肤

这三者是有区别的。

1.3.1 SetDialogSkin是给所有的窗体均加载同样的皮肤。不建议使用这个函数。除非你的软件均使用同样的皮肤。

1.3.2 SetSingleDialogSkin给单个指定的窗体加载皮肤。窗口的显示方式是规则窗体。

1.3.3 SetShapeWindowSkin 给单个指定的窗体加载皮肤。窗口的显示方式为非规则窗体。

 2.SkinMagic使用的高级方法

   2.1 RemoveWindowSkin去掉指定窗体上的皮肤

       当某个窗体或者控件不需要皮肤时可以使用此函数

   2.2 RemoveDialogSkin 停止自动给窗体加载皮肤。主要是针对SetDialogSkin的。

   2.3 EnableWindowScrollbarSkin 给指定窗体加载滚动条皮肤。比较适用于自绘的控件。

       例:nSkin=EnableWindowScrollbarSkin(GetDlgItem(IDC_DLGTREE_EXPORT)->m_hWnd,SB_BOTH);

   2.4 DisableWindowScrollbarSkin 使指定窗体停止加载滚动条皮肤。

   2.5 如何给Splitter加载皮肤

       2.5.1 皮肤文件中自定义Splitter

       2.5.2 打开Splitter

例:m_hSkinOpenSkinData( _T("SkinSplitter") );

       2.5.3重载函数OnDrawSplitter

             详见系统管理源代码中类AW_CMultiViewSplitter

 2.6 如何从皮肤文件中获取图片 CreateBitmapFromSkinImage

例:m_hBitMap=CreateBitmapFromSkinImage(_T("listheader.bmp"));

   2.7 当一个窗体上同样的控件类型同时既有自绘也有加载皮肤的处理方法

 在皮肤文件新建一个窗体,名称比如叫做FrmWnd-D,上面放置皮肤控件,例如是个Static控件,叫做Static-D。使用的例子如下: nSkin=SetControlSkin(GetDlgItem(IDC_STATIC_MAIN_TITLE)->m_hWnd,_T("Static-D"),_T("FrmWnd-D"));

     nSkin=SetControlSkin(GetDlgItem(IDC_STATIC_SUB_TITLE)->m_hWnd,_T("Static-D"),_T("FrmWnd-D"));

2.8 当自绘控件与加载皮肤的窗体冲突时的解决方法

   解决方法是先对窗体加载皮肤,再建立控件自绘的功能。

   具体的做法是:

1.   DoDataExchange取消自绘控件实例与资源控件ID的关联

2.   在SetSingleDialogSkin之后自绘控件实例采用SubclassDlgItem的方法与资源控件ID关联。

例:VERIFY( 1 == SetSingleDialogSkin(this->GetSafeHwnd(), _T("Dialog") ) );

         m_list.SubclassDlgItem(IDC_LIST1,this);

标签:SkinMagic,自绘,控件,皮肤,高级,窗体,方法,2.5,加载
From: https://blog.51cto.com/u_15942605/6022277

相关文章

  • 让程序只运行一个实例的简单实用的方法
    ////只能运行一个实例HANDLEhMutexOneInstantance=CreateMutex(NULL,TRUE,_T("PreventSecondInstance"));BOOLbFound=FALSE;if(GetLastError()==ERROR_ALREADY_EXISTS......
  • is not in the sudoers file 解决方法
    isnotinthesudoersfile解决方法夜星辰2022已于2022-02-2113:45:47修改17478收藏25分类专栏:linux驱动开发文章标签:linuxsudo版权华为云开发者联盟该内容......
  • bitset简易使用方法
    何为bitset一个stl,可以大大减少储存布尔数所需的空间,本质上就是个存二进制数的容器具体而言,省的空间是用int存的\(\frac{1}{32}\)示例bitset<N>bi(10111);//括号里的是......
  • ScreenFlow.app 打开显示 you don't have permission to open the application 解决方
    问题:当打开screenflow时提示youdon'thavepermissiontoopentheapplication解决:在控制台执行如下命令sudoxattr-drcom.apple.quarantine/Applications/Sc......
  • 理解es6 Promise的resolve和reject方法
    es6Promise.resolve()方法有时需要将现有对象转为Promise对象,Promise.resolve方法就起到这个作用。constjsPromise=Promise.resolve($.ajax('/whatever.json'));......
  • 选择你的阶梯:高级个人贡献者与经理
    我经常收到这个问题:“我的公司有两个职业阶梯——个人贡献者(IC)和工程经理(EM)。我如何决定要走哪条路?”今天,我们就来说说这两种路径的区别。另外,我想质疑它们是否......
  • Mac应用程序无法打开或文件损坏的处理方法
    很多用户在安装盗版Mac软件的时候,经常会遇到提示“xxx.app已损坏,打不开。您应该将它移到废纸篓“或”打不开的xxx.app,因为它来自身份不明的开发者”,等多种打不开盗版软件......
  • SSH提示ssh: connect to host XXX.XXX.XXX.XXX port XXX: Operation timed out解决方
    服务器可能位于校园网或者公司网内部,而客户端没有连接校园网或者公司网,连接内网即可解决该问题。公网ip、端口号、主机名错误。以ubuntu系统的服务器为例,在终端中输入ip......
  • 介绍一款 ABAP 代码搜索工具 RS_ABAP_SOURCE_SCAN 的使用方法
    @目录ABAP代码搜索工具:ABAP报表RS_ABAP_SOURCE_SCAN实际工作中的一个需求:找到SAPCRM产品主数据搜索实现里使用了OPENCURSOR关键字的准确位置笔者曾经写过一篇文......
  • Hive SQL题库-高级
    第1题同时在线人数问题1.1题目需求现有各直播间的用户访问记录表(live_events)如下,表中每行数据表达的信息为,一个用户何时进入了一个直播间,又在何时离开了该直播间。......