使用之前 【澳门娱乐6165】要先注册这个皮肤,先

作者:澳门娱乐

近年来在求学soui分界面库。在那之中有用到SListCtrl这一个控件来未来文件新闻。控件用法基本上和mfc 的CListCtrl大概。也支撑Logo展现。可是Logo是要和煦进入Logo图片的。这些就有一些倒霉弄。于是作者就融洽实现了 windows系统文件Logo 的skin 皮肤。没有多少说了 ,直接上代码。

SOUI分界面库 增加 windows系统文件Logo皮肤,souiwindows

近年在学习soui分界面库。在那之中有用到SListCtrl那么些控件来今后文件消息。控件用法基本上和mfc 的CListCtrl大约。也支撑Logo呈现。可是Logo是要和谐投入图标图片的。那个就有一点不佳弄。于是小编就融洽落成了 windows系统文件Logo 的skin 皮肤。十分少说了 ,直接上代码。

 

 1 #ifndef __WINFILE_ICON_SKIN_HPP_
 2 #define __WINFILE_ICON_SKIN_HPP_
 3 
 4 #include "core/SSkinObjBase.h"
 5 #include <commoncontrols.h>
 6 //************************************
 7 // 这个是 系统文件图标 的皮肤控件。 使用SHGetFileInfo 来获取图标索引  
 8 // 使用之前先 注册 theApp->RegisterSkinFactory(TplSkinFactory<SSkinSystemIconList>());        //注册Skin
 9 // 然后在skin.xml 里 添加 资源  <sysiconlist name="sysiconlist" flag="1" />  flag 表示图标大小类型 这个必须要有
10 // 
11 //************************************
12 class SSkinSystemIconList: public SSkinObjBase
13 {
14     SOUI_CLASS_NAME(SSkinSystemIconList, L"sysiconlist")
15 
16 public:
17     SSkinSystemIconList()
18         : m_hIconList(NULL)
19     {            
20         
21     }
22     virtual ~SSkinSystemIconList()
23     {
24         if(NULL != m_hIconList)
25         {
26             ((IImageList*)m_hIconList)->Release();
27             m_hIconList = NULL;
28         }
29     }
30 
31     virtual SIZE GetSkinSize()
32     {
33         return m_szSimpleIcon;
34     }
35 protected:
36     virtual void _Draw(IRenderTarget *pRT, LPCRECT rcDraw, DWORD dwState,BYTE byAlpha)
37     {
38         if(NULL == m_hIconList)
39             return ;
40 
41         HICON hIcon = NULL;
42         ((IImageList*)m_hIconList)->GetIcon(dwState, ILD_NORMAL, &hIcon);
43         if(NULL != hIcon)
44         {
45             pRT->DrawIconEx(rcDraw->left, rcDraw->top, hIcon, rcDraw->right-rcDraw->left, rcDraw->bottom-rcDraw->top, DI_NORMAL);
46             DestroyIcon(hIcon);
47             hIcon = NULL;
48         }
49     }
50 private:
51     HIMAGELIST*        m_hIconList;
52     SIZE                    m_szSimpleIcon;
53 
54     SOUI_ATTRS_BEGIN()
55         ATTR_CUSTOM(L"flag", OnAttrFlag)   //XML文件中指定的图片资源名,(type:name) flag 表示图标类型 有small large 
56     SOUI_ATTRS_END()
57 protected:
58     LRESULT OnAttrFlag(const SStringW &strValue,BOOL bLoading)
59     {
60         int nRet=0;   
61         ::StrToIntExW(strValue, STIF_SUPPORT_HEX, &nRet);
62 
63         //#define SHIL_LARGE          0   // normally 32x32
64         //#define SHIL_SMALL          1   // normally 16x16
65         //SHIL_EXTRALARGE获取48 * 48的图标, SHIL_JUMBO 获取256 * 256的图标。
66         HRESULT hResult = ::SHGetImageList(nRet , IID_IImageList, (void**)&m_hIconList);
67         if(S_OK != hResult)
68             return S_FALSE;
69 
70         //计算图标大小 
71         int nX = 0;
72         int nY = 0;
73         ((IImageList*)m_hIconList)->GetIconSize(&nX, &nY);
74         m_szSimpleIcon.cx = nX;
75         m_szSimpleIcon.cy = nY;
76 
77         return S_OK;
78     }
79 };
80 //////////////////////////////////////////////////////////////////////////
81 #endif // __WINFILE_ICON_SKIN_HPP_

先说说怎么使用啊。

  1. 最新版的soui分界面Curry增多了 skin.xml 。全体的图纸能源都要在此处丰硕。

    flag 表示图标大小类型 这个必须要有

flag那些绝对要有。因为系统Logo也是有成都百货上千中。1 表示的是  小Logo。具体能够看代码。

//#define SHIL_LARGE 0 // normally 32x32
//#define SHIL_SMALL 1 // normally 16x16

 

选取以前 要先注册那一个皮肤。

SApplication *theApp=new SApplication(NULL, hInstance);
theApp->RegisterSkinFactory(TplSkinFactory<SSkinSystemIconList>());        //注册Skin

 

接下来就足以在 布局 mainwnd.xml 里应用了。使用方式和别的的未有分别。

iconSkin="sysiconlist"

最终再用 SHGetFileInfo来获取具体的Logo索引了。

 

 

完。。。

 

增添windows系统文件Logo皮肤,souiwindows 近来在攻读soui分界面库。当中有用到SListCtrl那些控件来未来文件消息。控件用法基本上和...

 

 1 #ifndef __WINFILE_ICON_SKIN_HPP_
 2 #define __WINFILE_ICON_SKIN_HPP_
 3 
 4 #include "core/SSkinObjBase.h"
 5 #include <commoncontrols.h>
 6 //************************************
 7 // 这个是 系统文件图标 的皮肤控件。 使用SHGetFileInfo 来获取图标索引  
 8 // 使用之前先 注册 theApp->RegisterSkinFactory(TplSkinFactory<SSkinSystemIconList>());        //注册Skin
 9 // 然后在skin.xml 里 添加 资源  <sysiconlist name="sysiconlist" flag="1" />  flag 表示图标大小类型 这个必须要有
10 // 
11 //************************************
12 class SSkinSystemIconList: public SSkinObjBase
13 {
14     SOUI_CLASS_NAME(SSkinSystemIconList, L"sysiconlist")
15 
16 public:
17     SSkinSystemIconList()
18         : m_hIconList(NULL)
19     {            
20         
21     }
22     virtual ~SSkinSystemIconList()
23     {
24         if(NULL != m_hIconList)
25         {
26             ((IImageList*)m_hIconList)->Release();
27             m_hIconList = NULL;
28         }
29     }
30 
31     virtual SIZE GetSkinSize()
32     {
33         return m_szSimpleIcon;
34     }
35 protected:
36     virtual void _Draw(IRenderTarget *pRT, LPCRECT rcDraw, DWORD dwState,BYTE byAlpha)
37     {
38         if(NULL == m_hIconList)
39             return ;
40 
41         HICON hIcon = NULL;
42         ((IImageList*)m_hIconList)->GetIcon(dwState, ILD_NORMAL, &hIcon);
43         if(NULL != hIcon)
44         {
45             pRT->DrawIconEx(rcDraw->left, rcDraw->top, hIcon, rcDraw->right-rcDraw->left, rcDraw->bottom-rcDraw->top, DI_NORMAL);
46             DestroyIcon(hIcon);
47             hIcon = NULL;
48         }
49     }
50 private:
51     HIMAGELIST*        m_hIconList;
52     SIZE                    m_szSimpleIcon;
53 
54     SOUI_ATTRS_BEGIN()
55         ATTR_CUSTOM(L"flag", OnAttrFlag)   //XML文件中指定的图片资源名,(type:name) flag 表示图标类型 有small large 
56     SOUI_ATTRS_END()
57 protected:
58     LRESULT OnAttrFlag(const SStringW &strValue,BOOL bLoading)
59     {
60         int nRet=0;   
61         ::StrToIntExW(strValue, STIF_SUPPORT_HEX, &nRet);
62 
63         //#define SHIL_LARGE          0   // normally 32x32
64         //#define SHIL_SMALL          1   // normally 16x16
65         //SHIL_EXTRALARGE获取48 * 48的图标, SHIL_JUMBO 获取256 * 256的图标。
66         HRESULT hResult = ::SHGetImageList(nRet , IID_IImageList, (void**)&m_hIconList);
67         if(S_OK != hResult)
68             return S_FALSE;
69 
70         //计算图标大小 
71         int nX = 0;
72         int nY = 0;
73         ((IImageList*)m_hIconList)->GetIconSize(&nX, &nY);
74         m_szSimpleIcon.cx = nX;
75         m_szSimpleIcon.cy = nY;
76 
77         return S_OK;
78     }
79 };
80 //////////////////////////////////////////////////////////////////////////
81 #endif // __WINFILE_ICON_SKIN_HPP_

先说说怎么采用呢。

  1. 最新版的soui分界面库里添加了 skin.xml 。全体的图纸能源都要在此间丰硕。

    flag 表示图标大小类型 这个必须要有

flag这几个必须求有。因为系统Logo也可以有繁多中。1 表示的是  小Logo。具体能够看代码。

//#define SHIL_LARGE 0 // normally 32x32
//#define SHIL_SMALL 1 // normally 16x16

 

澳门娱乐6165,选择从前 要先挂号这一个皮肤。

SApplication *theApp=new SApplication(NULL, hInstance);
theApp->RegisterSkinFactory(TplSkinFactory<SSkinSystemIconList>());        //注册Skin

 

接下来就足以在 布局 mainwnd.xml 里选取了。使用方法和别的的未有区分。

iconSkin="sysiconlist"

最后再用 SHGetFileInfo来获取具体的Logo索引了。

 

 

完。。。

 

本文由澳门娱乐6165发布,转载请注明来源

关键词: