📄 classxp.h
字号:
////////////////////////////////////////////////////////////////////////////////////////////////////
// 工程: 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 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 // 有效区状态
////////////////////////////////////////////////////////////////////////////////////////////////////
#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))
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
// 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);
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 "EditXP.H"
#include "ComboXP.H"
////////////////////////////////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
}
#endif // __cplusplus
////////////////////////////////////////////////////////////////////////////////////////////////////
#endif // !defined(AFX_CALSSXP_H__F89F6F21_1CEF_11D9_AF5C_0050BAB04A6A__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -