#ifndef _SKINPPWTL_H_ #define _SKINPPWTL_H_ #ifdef _SKINPP_STATIC #define SKINPPWTL_API #else #ifdef SKINPPWTL_EXPORTS #define SKINPPWTL_API __declspec(dllexport) #else #define SKINPPWTL_API __declspec(dllimport) #endif #endif #define WM_TOOLBARPAINTPRE (WM_USER + 802) #define WM_TOOLBARPAINTEND (WM_USER + 803) #define SM_LBUTTONUP (WM_USER + 804) //按钮状态 enum BUTTONSTATE { NORMAL = 0, PRESS = 1, DISABLE = 2, HOT = 3, FOCUS = 4, LAST = 5 }; //绘制类型 enum DRAWTYPE { BUTTON = 0, SCROLLARROWUP = 1, SCROLLARROWDOWN = 2, SPLITTERBARHORZ = 3, SPLITTERBARVERT = 4, SPLITTERBARBORDER = 5, LISTHEAD = 6 }; //获得皮肤资源的类型 enum SKINOBJTYPE { DIALOGTYPE = 0, BUTTONTYPE = 1, CHECKBOXTYPE = 2, RADIOBOXTYPE = 3, STATICTYPE = 4, TRACKBARTYPE = 5, }; struct ListBoxItem { HIMAGELIST hImageList; int nImageIndex; ListBoxItem() { hImageList = NULL; nImageIndex = -1; } }; #define REST_BITMAP 0x0001 //.bmp #define REST_ICON 0x0002 //.ico #define REST_CURSOR 0x0003 //.cur #define REST_ANIMATE 0x0004 //.ani typedef struct _ResourceInfo { HGDIOBJ hGdiObj;//[OUT] DWORD dwType; //[OUT] int nWidth; //[OUT] int nHeight;//[OUT] TCHAR szResImageName[_MAX_FNAME];//[IN] BOOL bHorzSplit;//[IN] int nLength;//[IN] int nCount; //[IN] int nIndex; //[IN] _ResourceInfo() { hGdiObj = NULL; dwType = REST_BITMAP; nWidth = 0; nHeight = 0; _tcscpy(szResImageName,_T("")); bHorzSplit = TRUE; nLength = -1; nCount = -1; nIndex = -1; } }ResInfo,* PRESINFO; ////////////////////////////////////////////////////////////////////////// //加载皮肤 //SkinFile :皮肤路径,注意可以是*.ssk,也可以是皮肤目录中的INI文件. //bFromIni :该参数指定皮肤文件是从*.ssk读取,还是从INI文件读取. SKINPPWTL_API BOOL skinppLoadSkin(TCHAR* szSkinFile,BOOL bFromIni = FALSE); SKINPPWTL_API BOOL skinppLoadSkinFromRes(HINSTANCE hInstance,LPCTSTR szResourceName, LPCTSTR szResourceType,TCHAR* szSkinFileName); //移除皮肤 SKINPPWTL_API BOOL skinppRemoveSkin(); //退出界面库,做清理工作。 SKINPPWTL_API BOOL skinppExitSkin(); //设置ListBox控件的自画信息 //hWnd : ListBox控件的句柄 //nIndex : Item项的索引 //pListBoxItem : Item项自画的结构信息 SKINPPWTL_API void skinppSetListBoxItemDrawInfo(HWND hWnd,int nIndex,struct ListBoxItem* pListBoxItem); //获得换肤后的系统颜色 //nColorIndex : 要获取的颜色类型 SKINPPWTL_API COLORREF skinppGetSkinSysColor(int nColorIndex); //获得Windows系统默认的颜色 //nColorIndex : 要获取的颜色类型 SKINPPWTL_API COLORREF skinppGetDefaultSysColor(int nColorIndex); //hWnd : 对话框窗口的句柄 //nResID : 对话框资源ID SKINPPWTL_API BOOL skinppSetWindowResID(HWND hWnd,int nResID);//[多语言] SKINPPWTL_API BOOL skinppSetFreeDlgID(HWND hWnd,int nResID); SKINPPWTL_API BOOL skinppSetSkinResID(HWND hWnd,int nResID); //设置ListHeader窗口的排序信息 //hWnd : ListHeader的窗口句柄 //nSortColumn : 要对ListHeader排序的列的索引 //bSortAscending: 是否为升序 SKINPPWTL_API void skinppSetListHeaderSortInfo(HWND hWnd,int nSortColumn,BOOL bSortAscending = TRUE); //在给定的HDC上,指定相应的绘制类型和状态,在相应的矩形区域中进行绘制. //hdc :目标DC //rect :绘制区域 //eDrawType :绘制类型,目前支持SPLITTERBARHORZ,SPLITTERBARVERT,SPLITTERBARBORDER //nState :选择绘制状态 SKINPPWTL_API void skinppDrawSkinObject(HDC hdc,RECT rect,DRAWTYPE eDrawType,int nState); //通过资源ID,获得相应类型的皮肤资源位图句柄 //nSkinObjType : 皮肤类型,目前支持 DIALOGTYPE,BUTTONTYPE,CHECKBOXTYPE,RADIOBOXTYPE //nResID : 资源ID //nState : 状态,对BUTTONTYPE,CHECKBOXTYPE,RADIOBOXTYPE有效 SKINPPWTL_API HBITMAP skinppGetResFromID(SKINOBJTYPE nSkinObjType,int nResID,int nState =0 ); //设置是否自己画对话框背景,该方法用在需要自己对背景进行处理的情况下. //hWnd : 对话框的句柄 //bErase : TRUE 为自己画背景,FALSE 为Skin++画,如果没有调用该方法,Skin++将画对话框背景. SKINPPWTL_API void skinppSetDialogEraseBkgnd(HWND hWnd,BOOL bErase); //设置对话框背景是否剪切子控件区域。 //hWnd : 对话框句柄 //bNoClip : TRUE为不需要剪切,FALSE为需要剪切区域 //bAllChild : TRUE为该窗体的所有子对话框都剪切. SKINPPWTL_API void skinppSetDialogBkClipRgn(HWND hWnd,BOOL bClip,BOOL bAllChild = TRUE); //通过皮肤资源名称获得皮肤资源中位图 //szName : 皮肤资源名称 //HBITMAP : 返回资源中的位图 SKINPPWTL_API HBITMAP skinppGetBitmapRes(LPCTSTR szName); //通过资源名称取资源的内存指针 //szName : 资源名称 //nSize : 资源大小 //pByte : 返回值,成功返回非NULL,失败返回NULL SKINPPWTL_API BYTE* skinppGetSkinResource(LPCTSTR szName,int& nSize); //通过皮肤资源的名称获得位图不被拉伸的区域值 //szName : 皮肤资源名称 //nTopHeight : 返回不被拉伸的顶高 //nBottomHeight : 返回不被拉伸的底高 //nLeftWidth : 返回不被拉伸的左宽 //nRightWidth : 返回不被拉伸的右宽 SKINPPWTL_API BOOL skinppGetBitmapResRect(LPCTSTR szName,int& nTopHeight,int& nBottomHeight, int& nLeftWidth,int& nRightWidth); //设置窗口自画是否自己来处理,该方法用于自画部分需要自己处理的情况下 //hWnd : 要自画的窗口句柄 //bCustomDraw : TRUE为自己处理自画,FALSE为交给Skin++处理自画 SKINPPWTL_API void skinppSetCustomDraw(HWND hWnd,BOOL bCustomDraw); //设置菜单的皮肤标识 //hWnd : 拥有菜单的窗口句柄 //nSkinObjectID : 菜单皮肤的标识 SKINPPWTL_API void skinppSetMenuSkinObjectID(HWND hWnd,int nSkinObjectID); //设置是否对自画菜单进行换肤 //bSkin : TRUE为换肤 SKINPPWTL_API void skinppSetSkinOwnerMenu(BOOL bSkin); //对菜单进行换肤控制 //hMenu : 想换肤的菜单句柄 //bNoSkin : 是否换肤,TRUE为不换肤,FALSE为换肤 SKINPPWTL_API void skinppSetDrawMenu(HMENU hMenu,BOOL bNoSkin); //对指定的窗口去掉皮肤,并且保证不会再被换肤,即使使用SetSkinHwnd也不会换肤. //hWnd : 指定的窗口句柄 //bChildNoSkin : 是否对该窗口中的子窗口去掉皮肤 SKINPPWTL_API void skinppSetNoSkinHwnd(HWND hWnd,BOOL bChildNoSkin = TRUE); //对指定的窗口进行换肤 //hWnd : 指定的窗口句柄 //szClassName : 要子类化的Skin类型 WC_DIALOGBOX/WC_CONTROLBAR等 SKINPPWTL_API void skinppSetSkinHwnd(HWND hWnd,LPCTSTR szClassName = NULL); //对指定的窗口临时去掉皮肤,可以通过SetSkinHwnd进行再次换肤 SKINPPWTL_API void skinppRemoveSkinHwnd(HWND hWnd); //是对SetNoSkinHwnd的进一步处理,可以解决使用SetNoSkinHwnd引起的Debug版的断言错 #define SETNOSKINHWND(x) {\ HWND w=(x).UnsubclassWindow();\ skinppSetNoSkinHwnd(w);\ (x).SubclassWindow(w);\ } //是对RemoveSkinHwnd的进一步处理,可以解决使用RemoveSkinHwnd引起的Debug版的断言错 #define REMOVESKINHWND(x){\ HWND w=(x).UnsubclassWindow();\ skinppRemoveSkinHwnd(w);\ (x).SubclassWindow(w);\ } SKINPPWTL_API HGDIOBJ skinppGetResFromID(PRESINFO pResInfo); #endif //_SKINPPWTL_H_