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() 函数的文件中加入『
- //
- // 三、注意事项
- //
- // 1.ClassXP 使用了 Windows 中的一些新特性,需要在 Windows 98 及其以上版本中才能使用。
- // 2.目前只能将 PushButton、CheckBox、EditBox 和 ComboBox 设置为 ClassXP 风格,这些都没有用到
- // 图片,全部都是高效的 GDI 画出来的,有兴趣的话看看源代码……
- //
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 编译预处理
- // 定义为连接方式,指定编译为动态连接库
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 宏定义
- // 窗口类型
- // 窗口状态
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 宏定义
- // 窗口类型
- /*
- // 通用窗口状态
- */
- // 按钮、复选框状态
- // 编辑框状态
- // 滚动条、旋转控件状态
- // Thumb 箭头状态,用于旋转控件、下拉框、滚动条
- // 调用标志
- /*
- */
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- extern "C" BOOL WINAPI ClassXP(HWND hWnd = NULL, BOOL bEnable = TRUE);
- BOOL WINAPI ClassXP(HWND hWnd, BOOL bEnable);
- // 功能: 设置或取消 ClassXP 风格
- // 参数:
- // hWnd 指定要设置或取消窗口的句柄,如果为 NULL 则影响当前线程的所有窗口
- // bEnable 指定设置或取消 ClassXP 风格, TRUE 表示设置,FALSE 表示取消
- //
- // 返回: TRUE 表示成功,FALSE 表示失败
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 强制使用 C 语言方式编译
- extern "C"
- {
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 设置窗口状态
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 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);
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////
|