SkinPPWTL.h
上传用户:tjjuxin
上传日期:2021-06-01
资源大小:3552k
文件大小:7k
源码类别:

Shell编程

开发平台:

Visual C++

  1. #ifndef _SKINPPWTL_H_
  2. #define _SKINPPWTL_H_
  3. #ifdef _SKINPP_STATIC
  4. #define SKINPPWTL_API
  5. #else
  6. #ifdef SKINPPWTL_EXPORTS
  7. #define SKINPPWTL_API __declspec(dllexport)
  8. #else
  9. #define SKINPPWTL_API __declspec(dllimport)
  10. #endif
  11. #endif
  12. #define WM_TOOLBARPAINTPRE (WM_USER + 802)
  13. #define WM_TOOLBARPAINTEND (WM_USER + 803)
  14. #define SM_LBUTTONUP (WM_USER + 804)
  15. //按钮状态
  16. enum BUTTONSTATE 
  17. {
  18. NORMAL = 0,
  19. PRESS = 1,
  20. DISABLE = 2,
  21. HOT = 3,
  22. FOCUS   = 4,
  23. LAST = 5
  24. };
  25. //绘制类型
  26. enum DRAWTYPE
  27. {
  28. BUTTON = 0,
  29. SCROLLARROWUP = 1,
  30. SCROLLARROWDOWN = 2,
  31. SPLITTERBARHORZ = 3,
  32. SPLITTERBARVERT = 4,
  33. SPLITTERBARBORDER = 5,
  34. LISTHEAD = 6
  35. };
  36. //获得皮肤资源的类型
  37. enum SKINOBJTYPE
  38. {
  39. DIALOGTYPE = 0,
  40. BUTTONTYPE = 1,
  41. CHECKBOXTYPE = 2,
  42. RADIOBOXTYPE = 3,
  43. STATICTYPE = 4,
  44. TRACKBARTYPE = 5,
  45. };
  46. struct ListBoxItem
  47. {
  48. HIMAGELIST hImageList;
  49. int nImageIndex;
  50. ListBoxItem()
  51. {
  52. hImageList = NULL;
  53. nImageIndex = -1;
  54. }
  55. };
  56. #define REST_BITMAP      0x0001 //.bmp
  57. #define REST_ICON        0x0002 //.ico
  58. #define REST_CURSOR      0x0003 //.cur
  59. #define REST_ANIMATE  0x0004 //.ani
  60. typedef struct _ResourceInfo
  61. {
  62. HGDIOBJ hGdiObj;//[OUT]
  63. DWORD   dwType; //[OUT]
  64. int nWidth; //[OUT]
  65. int nHeight;//[OUT]
  66. TCHAR szResImageName[_MAX_FNAME];//[IN]
  67. BOOL bHorzSplit;//[IN]
  68. int nLength;//[IN]
  69. int nCount; //[IN]
  70. int nIndex; //[IN]
  71. _ResourceInfo()
  72. {
  73. hGdiObj = NULL;
  74. dwType = REST_BITMAP;
  75. nWidth = 0;
  76. nHeight = 0;
  77. _tcscpy(szResImageName,_T(""));
  78. bHorzSplit = TRUE;
  79. nLength = -1;
  80. nCount = -1;
  81. nIndex = -1;
  82. }
  83. }ResInfo,* PRESINFO;
  84. //////////////////////////////////////////////////////////////////////////
  85. //加载皮肤
  86. //SkinFile :皮肤路径,注意可以是*.ssk,也可以是皮肤目录中的INI文件.
  87. //bFromIni :该参数指定皮肤文件是从*.ssk读取,还是从INI文件读取.
  88. SKINPPWTL_API BOOL  skinppLoadSkin(TCHAR* szSkinFile,BOOL bFromIni = FALSE);
  89. SKINPPWTL_API BOOL skinppLoadSkinFromRes(HINSTANCE hInstance,LPCTSTR szResourceName,
  90.  LPCTSTR szResourceType,TCHAR* szSkinFileName);
  91. //移除皮肤
  92. SKINPPWTL_API BOOL  skinppRemoveSkin();
  93. //退出界面库,做清理工作。
  94. SKINPPWTL_API BOOL  skinppExitSkin();
  95. //设置ListBox控件的自画信息
  96. //hWnd : ListBox控件的句柄
  97. //nIndex : Item项的索引
  98. //pListBoxItem : Item项自画的结构信息
  99. SKINPPWTL_API void skinppSetListBoxItemDrawInfo(HWND hWnd,int nIndex,struct ListBoxItem* pListBoxItem);
  100. //获得换肤后的系统颜色
  101. //nColorIndex : 要获取的颜色类型
  102. SKINPPWTL_API COLORREF skinppGetSkinSysColor(int nColorIndex);
  103. //获得Windows系统默认的颜色
  104. //nColorIndex : 要获取的颜色类型
  105. SKINPPWTL_API COLORREF skinppGetDefaultSysColor(int nColorIndex);
  106. //hWnd : 对话框窗口的句柄
  107. //nResID : 对话框资源ID
  108. SKINPPWTL_API BOOL skinppSetWindowResID(HWND hWnd,int nResID);//[多语言]
  109. SKINPPWTL_API BOOL skinppSetFreeDlgID(HWND hWnd,int nResID);
  110. SKINPPWTL_API BOOL skinppSetSkinResID(HWND hWnd,int nResID);
  111. //设置ListHeader窗口的排序信息
  112. //hWnd : ListHeader的窗口句柄
  113. //nSortColumn : 要对ListHeader排序的列的索引
  114. //bSortAscending: 是否为升序
  115. SKINPPWTL_API void skinppSetListHeaderSortInfo(HWND hWnd,int nSortColumn,BOOL bSortAscending = TRUE);
  116. //在给定的HDC上,指定相应的绘制类型和状态,在相应的矩形区域中进行绘制.
  117. //hdc :目标DC
  118. //rect :绘制区域
  119. //eDrawType :绘制类型,目前支持SPLITTERBARHORZ,SPLITTERBARVERT,SPLITTERBARBORDER
  120. //nState :选择绘制状态
  121. SKINPPWTL_API void  skinppDrawSkinObject(HDC hdc,RECT rect,DRAWTYPE eDrawType,int nState);
  122. //通过资源ID,获得相应类型的皮肤资源位图句柄
  123. //nSkinObjType : 皮肤类型,目前支持 DIALOGTYPE,BUTTONTYPE,CHECKBOXTYPE,RADIOBOXTYPE
  124. //nResID : 资源ID
  125. //nState : 状态,对BUTTONTYPE,CHECKBOXTYPE,RADIOBOXTYPE有效
  126. SKINPPWTL_API HBITMAP skinppGetResFromID(SKINOBJTYPE nSkinObjType,int nResID,int nState =0 );
  127. //设置是否自己画对话框背景,该方法用在需要自己对背景进行处理的情况下.
  128. //hWnd : 对话框的句柄
  129. //bErase : TRUE 为自己画背景,FALSE 为Skin++画,如果没有调用该方法,Skin++将画对话框背景.
  130. SKINPPWTL_API void skinppSetDialogEraseBkgnd(HWND hWnd,BOOL bErase);
  131. //设置对话框背景是否剪切子控件区域。
  132. //hWnd : 对话框句柄
  133. //bNoClip : TRUE为不需要剪切,FALSE为需要剪切区域
  134. //bAllChild : TRUE为该窗体的所有子对话框都剪切.
  135. SKINPPWTL_API void skinppSetDialogBkClipRgn(HWND hWnd,BOOL bClip,BOOL bAllChild = TRUE);
  136. //通过皮肤资源名称获得皮肤资源中位图
  137. //szName : 皮肤资源名称
  138. //HBITMAP : 返回资源中的位图
  139. SKINPPWTL_API HBITMAP skinppGetBitmapRes(LPCTSTR szName);
  140. //通过资源名称取资源的内存指针
  141. //szName : 资源名称
  142. //nSize : 资源大小
  143. //pByte : 返回值,成功返回非NULL,失败返回NULL
  144. SKINPPWTL_API BYTE*  skinppGetSkinResource(LPCTSTR szName,int& nSize);
  145. //通过皮肤资源的名称获得位图不被拉伸的区域值
  146. //szName : 皮肤资源名称
  147. //nTopHeight : 返回不被拉伸的顶高
  148. //nBottomHeight : 返回不被拉伸的底高
  149. //nLeftWidth : 返回不被拉伸的左宽
  150. //nRightWidth : 返回不被拉伸的右宽
  151. SKINPPWTL_API BOOL skinppGetBitmapResRect(LPCTSTR szName,int& nTopHeight,int& nBottomHeight,
  152.    int& nLeftWidth,int& nRightWidth);
  153. //设置窗口自画是否自己来处理,该方法用于自画部分需要自己处理的情况下
  154. //hWnd : 要自画的窗口句柄
  155. //bCustomDraw : TRUE为自己处理自画,FALSE为交给Skin++处理自画
  156. SKINPPWTL_API void skinppSetCustomDraw(HWND hWnd,BOOL bCustomDraw);
  157. //设置菜单的皮肤标识
  158. //hWnd : 拥有菜单的窗口句柄
  159. //nSkinObjectID : 菜单皮肤的标识
  160. SKINPPWTL_API void skinppSetMenuSkinObjectID(HWND hWnd,int nSkinObjectID);
  161. //设置是否对自画菜单进行换肤
  162. //bSkin : TRUE为换肤
  163. SKINPPWTL_API void skinppSetSkinOwnerMenu(BOOL bSkin);
  164. //对菜单进行换肤控制
  165. //hMenu   : 想换肤的菜单句柄
  166. //bNoSkin : 是否换肤,TRUE为不换肤,FALSE为换肤
  167. SKINPPWTL_API void  skinppSetDrawMenu(HMENU hMenu,BOOL bNoSkin);
  168. //对指定的窗口去掉皮肤,并且保证不会再被换肤,即使使用SetSkinHwnd也不会换肤.
  169. //hWnd : 指定的窗口句柄
  170. //bChildNoSkin : 是否对该窗口中的子窗口去掉皮肤
  171. SKINPPWTL_API void skinppSetNoSkinHwnd(HWND hWnd,BOOL bChildNoSkin = TRUE);
  172. //对指定的窗口进行换肤
  173. //hWnd : 指定的窗口句柄
  174. //szClassName : 要子类化的Skin类型 WC_DIALOGBOX/WC_CONTROLBAR等
  175. SKINPPWTL_API void skinppSetSkinHwnd(HWND hWnd,LPCTSTR szClassName = NULL);
  176. //对指定的窗口临时去掉皮肤,可以通过SetSkinHwnd进行再次换肤
  177. SKINPPWTL_API void skinppRemoveSkinHwnd(HWND hWnd);
  178. //是对SetNoSkinHwnd的进一步处理,可以解决使用SetNoSkinHwnd引起的Debug版的断言错
  179. #define SETNOSKINHWND(x) {
  180.     HWND w=(x).UnsubclassWindow();
  181. skinppSetNoSkinHwnd(w);
  182. (x).SubclassWindow(w);
  183. //是对RemoveSkinHwnd的进一步处理,可以解决使用RemoveSkinHwnd引起的Debug版的断言错
  184. #define REMOVESKINHWND(x){
  185.     HWND w=(x).UnsubclassWindow();
  186. skinppRemoveSkinHwnd(w);
  187. (x).SubclassWindow(w);
  188. }
  189. SKINPPWTL_API HGDIOBJ skinppGetResFromID(PRESINFO pResInfo);
  190. #endif //_SKINPPWTL_H_