123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 工程: ClassXP
- // 版本: 0.32
- // 更新: 2003-3-10
- // 说明:
- // 一、简介
- // ClassXP 是一个为 Windows 98/ME/2000/XP 系统而设计的控件界面库。使用 ClassXP 能非常简单
- // 快速地把应用程序界面设置成 Windows XP 的风格。
- //
- // 二、使用方法
- // ClassXP 开发语言为 Win32SDK/C。如果使用 C++ 类的组织代码将会使编写难度大大降低,但是考
- // 虑到在 C 中使用以及效率问题,ClassXP 使用了非 OOP 的编程语言,借用了 OOP 的思维方法。因此,
- // ClassXP 的源代码可以直接在 Visual C++ 的 Win32SDK 和 MFC 等工程中使用。ClassXP 在编写过程中
- // 使用的编译环境是 Visual Studio .NET 2002 或 Visual C++ 6.0,可以用两种方式编译:
- //
- // 1.动态连接库方式
- // (1).在 Visual C++ 中建立空的动态连接库工程,将 ClassXP.c 和 ClassXP.h 文件加入到工程中。
- // (2).编译连接生成动态连接库,其中导出函数 ClassXP(),可在所有的语言中使用。
- //
- // 2.源代码方式
- // (1).在 Visual C++ 的工程中加入 ClassXP.c 和 ClassXP.h 文件。
- // (2).在要使用 ClassXP() 函数的文件中加入『#include "ClassXP.h"』,然后在调用它。
- //
- // 三、注意事项
- //
- // 1.ClassXP 使用了 Windows 中的一些新特性,需要在 Windows 98 及其以上版本中才能使用。
- // 2.目前只能将 PushButton、CheckBox、EditBox 和 ComboBox 设置为 ClassXP 风格,这些都没有用到
- // 图片,全部都是高效的 GDI 画出来的,有兴趣的话看看源代码……
- //
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 编译预处理
- #pragma once
- #ifdef _USRDLL
- // 定义为连接方式,指定编译为动态连接库
- #define CXP_DLLMODE
- #endif
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- #if !defined(AFX_CLASSXP_H__F89F6F21_1CEF_11D9_AF5C_0050BAB04A6A__INCLUDED_)
- #define AFX_CLASSXP_H__F89F6F21_1CEF_11D9_AF5C_0050BAB04A6A__INCLUDED_
- #include <Windows.h>
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 宏定义
- // 窗口类型
- #define CXPT_UNKNOWN -1 // 不能处理的类型
- #define CXPT_PUSHBUTTON 0 // 按钮
- #define CXPT_CHECKBOX 1 // 复选框
- #define CXPT_RADIOBOX 2 // 单选框
- #define CXPT_GROUPBOX 3 // 组窗口
- #define CXPT_STATEBOX 4 // 说明条
- #define CXPT_EDITBOX 5 // 编辑框
- #define CXPT_COMBOBOX 6 // 组合框
- #define CXPT_LISTBOX 7 // 列表框
- #define CXPT_SCROLLBOX 8 // 滚动条
- #define CXPT_DIALOG 9 // 弹出窗口
- #define CXPT_SPINBOX 10 // 旋转控件
- #define CXPT_MONTHCAL 11 // 月历
- #define CXPT_PROGRESS 12 // 进度条
- #define CXPT_TRACKBAR 13 // 追踪条
- #define CXPT_DATETIME 14 // 时间
- // 窗口状态
- #define CXPS_DISABLED 0x00000001L // 禁用状态
- #define CXPS_PRESSED 0x00000002L // 按下状态
- #define CXPS_HOTLIGHT 0x00000004L // 高亮状态 (鼠标在该窗口上)
- #define CXPS_FOCUS 0x00000008L // 具有键盘输入焦点
- #define CXPS_DEFAULT 0x00000010L // 默认状态 (用于按钮)
- #define CXPS_CHECKED 0x00000020L // 选中状态 (用于复选框)
- #define CXPS_INDETERMINATE 0x00000040L // 未确定状态 (用于复选框)
- #define CXPS_READONLY 0x00000080L // 只读状态 (用于编辑框)
- #define CXPS_NOPAINT 0x00000100L // 无效区状态
- #define CXPS_PAINT 0x00000200L // 有效区状态
- #define CXPS_HORIZON 0x00000400L // 窗口具有水平属性 (滚动条、旋转控件)
- #define CXPS_VERTICAL 0x00000800L // 窗口具有垂直属性 (滚动条、旋转控件)
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 宏定义
- // 窗口类型
- /*
- #define CXPT_UNKNOWN -1 // 不能处理的类型
- #define CXPT_PUSHBUTTON 0 // 按钮
- #define CXPT_CHECKBOX 1 // 复选框
- #define CXPT_RADIOBOX 2 // 单选框
- #define CXPT_EDITBOX 3 // 编辑框
- #define CXPT_COMBOBOX 4 // 组合框
- #define CXPT_SPINBOX 5 // 旋转控件
- #define CXPT_SCROLLBAR 6 // 滚动条
- #define CXPT_MONTHCAL 7 // 月历
- #define CXPT_TABCONTROL 8 // TAB 控件
- #define CXPT_PROGRESS 9 // 进度条
- #define CXPT_TRACKBAR 10 // 追踪条
- // 通用窗口状态
- #define CXPS_DISABLED 0x00000001L // 禁用状态
- #define CXPS_PRESSED 0x00000002L // 按下状态
- #define CXPS_HOTLIGHT 0x00000004L // 高亮状态 (鼠标在该窗口上)
- #define CXPS_NCHOTLIGHT 0x00000008L // 非客户区高亮状态 (比如鼠标在滚动条上)
- #define CXPS_FOCUS 0x00000010L // 具有键盘输入焦点
- #define CXPS_HORIZON 0x00000020L // 窗口具有水平属性 (滚动条、旋转控件)
- */
- // 按钮、复选框状态
- #define CXPB_DEFAULT 0x00010000L // 默认状态
- #define CXPB_CHECKED 0x00020000L // 选中状态
- #define CXPB_INDETERMINATE 0x00040000L // 未确定状态
- // 编辑框状态
- #define CXPE_LEFTSPIN 0x00010000L // 左边有旋转控件
- #define CXPE_RIGHTSPIN 0x00020000L // 右边有旋转控件
- #define CXPE_READONLY 0x10000000L // 只读状态
- // 滚动条、旋转控件状态
- #define CXPU_UPPART 0x00010000L // 鼠标位于向上/向左框区域
- #define CXPU_MIDDLEPART 0x00020000L // 鼠标位于中间区域 (滚动块)
- #define CXPU_DOWNPART 0x00040000L // 鼠标位于向下/向右区域
- #define CXPU_ALIGNLEFT 0x00100000L // 位于编辑框左边
- #define CXPU_ALIGNRIGHT 0x00200000L // 位于编辑框右边
- // Thumb 箭头状态,用于旋转控件、下拉框、滚动条
- #define CXPH_LARGEARROW 0x01000000L // 大的箭头标志
- #define CXPH_DROPHANDLE 0x02000000L // 滚动条中间的滚动块使用的托动标志
- #define CXPH_SMALLARROW 0x04000000L // 小的箭头标志
- #define CXPH_LEFTWARDS 0x08000000L // 箭头向左
- #define CXPH_UPWARDS 0x10000000L // 箭头向上
- #define CXPH_RIGHTWARDS 0x20000000L // 箭头向右
- #define CXPH_DOWNWARDS 0x40000000L // 箭头向下
- #define CXPH_HASFRAME 0x80000000L // 具有外框
- #define CXPH_AREA 0x00100000L // 绘滚动条中心区域
- // 调用标志
- /*
- #define CXPC_CALLCOMMON 0x00010000L // 调用 ClasssifyMsgXP() 取得后继调用标志
- #define CXPC_PRECALLWNDPROC 0x00020000L // 在绘制之前调用 CallWindowProc()
- #define CXPC_PRECALLDEFPROC 0x00040000L // 在绘制之前调用 DefWindowProc()
- #define CXPC_DRAWCLASSXP 0x00080000L // 绘制 ClassXP 风格
- #define CXPC_CALLWNDPROC 0x00100000L // 在绘制之后调用 CallWindowProc()
- #define CXPC_CALLDEFPROC 0x00200000L // 在绘制之后调用 DefWindowProc()
- #define CXPC_RETURNVALUE 0x00800000L // 返回一个 16 位的数值 (扩充为 LRESULT)
- */
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- #ifdef __cplusplus
- extern "C" BOOL WINAPI ClassXP(HWND hWnd = NULL, BOOL bEnable = TRUE);
- #else // __cplusplus
- BOOL WINAPI ClassXP(HWND hWnd, BOOL bEnable);
- #endif // __cplusplus
- // 功能: 设置或取消 ClassXP 风格
- // 参数:
- // hWnd 指定要设置或取消窗口的句柄,如果为 NULL 则影响当前线程的所有窗口
- // bEnable 指定设置或取消 ClassXP 风格, TRUE 表示设置,FALSE 表示取消
- //
- // 返回: TRUE 表示成功,FALSE 表示失败
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 强制使用 C 语言方式编译
- #ifdef __cplusplus
- extern "C"
- {
- #endif // __cplusplus
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 设置窗口状态
- #define CXPM_SETSTATE(Data, Mask, IsSet) ((IsSet) ? (Data |= Mask) : (Data &= ~Mask))
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // SCROLLXP 结构,所有的代码都是围绕这个结构而编写的
- typedef struct tagSCROLLXP
- {
- RECT m_ThumbRect;
- RECT m_ThumbRectOld;
- RECT m_BottomArrowRect;
- RECT m_TopArrowRect;
- RECT m_LeftArrowRect;
- RECT m_RightArrowRect;
- RECT m_SizeArea;
- RECT m_AreaRect ;
- BOOL m_bMouseDownArrowForback; //上移
- BOOL m_bMouseDownArrowForwad; //下移
- BOOL m_bMouseDown;
- POINT m_MouseDownPoint;
- UINT m_MouseDownTime;
- BOOL m_bDragging; //正在拖动
- UINT m_nThumbTrackPos;
- }
- SCROLLXP, * PSCROLLXP;
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // CLASSXP 结构,所有的代码都是围绕这个结构而编写的
- typedef struct tagCLASSXP
- {
- HWND hWnd; // 窗口句柄
- DWORD dwType; // 窗口的类型
- DWORD dwState; // 窗口的状态
- WNDPROC wpPrev; // 子类化之前的窗口回调函数地址
- HRGN hRgn; // 圆形窗区域
- HICON hIconDisabled; //禁止时的图标
- void *pData;
- struct tagCLASSXP * pNext; // 指向下一个 CLASSXP 结构,这里采用单向链表结构
- }
- CLASSXP, * PCLASSXP;
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // MEMDCXP 结构,为了方便使用内存兼容设备场景而设计
- typedef struct tagMEMDCXP
- {
- HWND hWnd; // 窗口句柄,输入参数
- HDC hDC; // 窗口设备场景,输出参数
- HDC hMemDC; // 窗口内存兼容设备场景,输出参数
- BOOL bTransfer; // 是否要用在 hDC 和 hMemDC 间传送数据,输入参数
- HBITMAP hBitmap; // 位图句柄,输入和输出参数
- }
- MEMDCXP, * LPMEMDCXP;
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 函数声明
- PCLASSXP WINAPI CreateClassXP(HWND hWnd);
- PCLASSXP WINAPI DeleteClassXP(HWND hWnd);
- PCLASSXP WINAPI GetClassXP(HWND hWnd);
- DWORD WINAPI GetWindowTypeXP(HWND hWnd);
- HDC WINAPI GetMemDCXP(LPMEMDCXP pMdcxp);
- VOID WINAPI ReleaseMemDCXP(LPMEMDCXP pMdcxp);
- VOID WINAPI GradientRectXP(HDC hDC, LPRECT pRect,COLORREF crColor[4]);
- //VOID WINAPI DrawDropGripXP(HDC hDC, LPRECT pRect, COLORREF crColor[4], DWORD crBack);
- VOID WINAPI GradientRectXP2(HDC hdc, const RECT &rt,COLORREF crColor[], int fillType);
- BOOL CALLBACK EnumWndProcXP(HWND hWnd, LPARAM lParam);
- LRESULT CALLBACK HookProcXP(int iCode, WPARAM wParam, LPARAM lParam);
- LRESULT CALLBACK WindowProcXP(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- //VOID WINAPI DrawPushButtonXP(PCLASSXP pCxp);
- //VOID WINAPI DrawCheckBoxXP(PCLASSXP pCxp);
- //VOID WINAPI DrawRadioBoxXP(PCLASSXP pCxp);
- //VOID WINAPI DrawEditBoxXP(PCLASSXP pCxp);
- //VOID WINAPI DrawComboBoxXP(PCLASSXP pCxp);
- //VOID WINAPI DrawListBoxXP(PCLASSXP pCxp);
- //VOID WINAPI DrawScrollBoxXP(PCLASSXP pCxp);
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- #include "DialogXP.H"
- #include "ButtonXP.H"
- #include "EditXP.H"
- #include "ComboXP.H"
- #include "ScrollXP.H"
- #include "SpinXP.H"
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- #ifdef __cplusplus
- }
- #endif // __cplusplus
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- #endif // !defined(AFX_CALSSXP_H__F89F6F21_1CEF_11D9_AF5C_0050BAB04A6A__INCLUDED_)
|