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

时间:2023-01-24 13:55:11


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);