SkinPPWTL.h
上传用户:flyanjing
上传日期:2015-10-09
资源大小:649k
文件大小:7k
- #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_