自己写的GRID控件源码(头文件)

#ifndef _RRGRID_H_2007_08_22_
#define _RRGRID_H_2007_08_22_


//#include <windows.h>

#define RR_GRIDCTRL_CLASS   "RRGridCtrl"

//############################定义Grid的风格
//GS_VISIBLE/GS_NO_COLHEAD/GS_NO_ROWHEAD创建时起作用
#define GS_VISIBLE               0x00000001L
#define GS_NO_COLHEAD     0x00000002L
#define GS_NO_ROWHEAD     0x00000004L


#define GS_READONLY      0x00001000L
//是否调整Grid高度,以显示完整的行高
#define GS_GRIDHIGH_NOADJUST   0x00002000L
//选择行是否可见(选择行高亮--可见)
#define GS_SELROW_INVISIBLE   0x00004000L

//是否使用Insert键插入行
#define GS_CANCEL_INSKEY    0x00010000L
//是否使用Delete键删除行
#define GS_CANCEL_DELKEY    0x00020000L
//是否在最后行被选择时按Enter键增加行
#define GS_CANCEL_ENTER_INSERT  0x00040000L

//是否拓展最后列到右边界
#define GS_LASTCOL_NOEXTEND   0x00100000L 
//列宽是否可变
#define GS_COLUMN_NORESIZE   0x00200000L
//列头(第0行)是否显示ABCDE标识
#define GS_COLHEAD_CUSTOM    0x00400000L
//行头(第0列)是否显示12345标识
#define GS_ROWHEAD_CUSTOM   0x00800000L

 

 

 

//####################通知码(给父窗口发通知消息的通知码)

//进入编辑后发通知
#define GN_ENTRY_CELL_EDITBOX      0x0001


//退出编辑前发通知
//GridNotify_T返回值为非0,将不会退出本单元的编辑
#define GN_EXIT_CELL_EDITBOX        0x0002

//退出编辑后发通知
#define GN_AFTER_EXIT_CELL_EDITBOX  0x0003

//在行改变之前发出通知,如果GridNotify_T返回非0,将不会改变行
//如果是在编辑中,则不能进入新行编辑
#define GN_ROW_CHANGED       0x0004

//Grid由外部得到焦点
#define GN_GET_FOCUS          0x0005
//焦点从Grid里移到外部
#define GN_LOST_FOCUS        0x0006

//增加新行前发通知给父窗口
//GridNotify_T返回值为非0,将不完成本次操作
#define GN_INSERT_ROW      0x0007  

//删除行前发通知给父窗口
//GridNotify_T返回值为非0,将不完成本次操作
#define GN_DELETE_ROW      0x0008

//单击单元
//GridNotify_T返回值为非0,将不会进行默认操作
//默认操作:在编辑中,单击另一数据单元,将转到另一单元编辑;
//在编辑中,单击发生在数据单元外,将退出编辑
//在非编辑中,单击将使该行变成选择状态
#define GN_CLICK_CELL      0x0009

//双击单元
//GridNotify_T返回值为非0,将不会进行默认操作
//默认:非编辑时,在数据单元上双击将进入该单元编辑
#define GN_DCLICK_CELL      0x000a

 

 


//########################################自定义消息

#define WM_GRID_USER_INNER      WM_USER

#define WM_GRID_USER_OUTER      WM_USER+20

//WM_GRID_USER_OUTER+1 -- WM_GRID_USER_OUTER+19内部使用

//Grid往父窗口发的通知消息
//wParam --通知码/控件id组成
//lParam --与父窗口进行信息交流的结构指针(GridNotify_T*)
#define GM_GRID_NOTIFY        WM_GRID_USER_OUTER+1

//wParam -- TRUE -- 只读;FALSE --可编辑;lParam -- 未用
#define GM_GRID_SET_READONLY       WM_GRID_USER_OUTER + 2

//设置列宽是否允许变化wParam: 0--不允许 1--允许;lParam:未用
#define GM_GRID_ALLOW_COL_RESIZE     WM_GRID_USER_OUTER + 3

//清除Grid所有单元文本
//wParam /lParam -- 未用
#define GM_GRID_CLEAR_TEXT       WM_GRID_USER_OUTER + 4

//返回值不包括第0行
#define GM_GRID_GET_ROWS        WM_GRID_USER_OUTER + 5

//返回值不包括第0列
#define GM_GRID_GET_COLS        WM_GRID_USER_OUTER + 6

//GM_GRID_SET_CELL_COUNT (重置Grid行列数)
//重置单元行列数,Grid现有数据将丢失
//wParam -- 行数 lParam -- 列数(这两个数值不包括0行/0列)
#define GM_GRID_SET_CELL_COUNT      WM_GRID_USER_OUTER +7


//增加新行wParam -- 新行号(不能插入第0行)
#define GM_GRID_INSERT_ROW       WM_GRID_USER_OUTER+8

//删除行(不能删除第0行,要删除/显示第0行/第0列,可将其相应宽高置为0)
//(要删除标题行可将标题文本重置为"/0")
#define GM_GRID_DELETE_ROW       WM_GRID_USER_OUTER+9

#define GM_GRID_GET_STYLE        WM_GRID_USER_OUTER+10

//设置GRID 风格,wParam -- 风格
#define GM_GRID_SET_STYLE        WM_GRID_USER_OUTER+11        

//进入指定单元编辑
//慎用,避免死循环(系统本身已提供了一套编辑/退出编辑机制)
//若在GN_CLICK_CELL/GN_DCLICK_CELL通知响应中取消了默认操作,可以尝试使用
#define GM_GRID_ENTRY_EDITBOX       WM_GRID_USER_OUTER+12 

 

//退出单元编辑
//慎用,避免死循环(系统本身已提供了一套编辑/退出编辑机制)
//若在GN_CLICK_CELL/GN_DCLICK_CELL通知响应中取消了默认操作,可以尝试使用
#define GM_GRID_EXIT_EDITBOX       WM_GRID_USER_OUTER+13     


//wParam -- 单元(GridCell_T类型指针) ;lParam --文本字符串
#define GM_SET_CELL_TEXT       WM_GRID_USER_OUTER + 21 //或RR_GridCtrl_SetCellText

//wParam -- 单元(GridCell_T类型指针) ;
//lParam --缓存区,为避免数据溢出,需先调用GM_GET_CELL_TEXT_LEN得到数据长度以设置缓存区
#define GM_GET_CELL_TEXT      WM_GRID_USER_OUTER + 22 //或RR_GridCtrl_GetCellText

//发送GM_GET_CELL_TEXT之前调用,得到数据长度来设置缓冲区
//缓存区最小大小需在该消息返回值基础上+1('/0')
//wParam -- GridCell_T类型指针;lParam -- 未用
#define GM_GET_CELL_TEXT_LEN     WM_GRID_USER_OUTER+23

//wParam --列号(从0开始,0--对应第0列)
#define GM_GET_COL_WIDTH       WM_GRID_USER_OUTER + 24

//返回行高:wParam/lParam 未用
#define GM_GET_ROW_HEIGHT      WM_GRID_USER_OUTER + 25

//返回第0行高度:wParam/lParam 未用
#define GM_GET_HEADERROW_HEIGHT     WM_GRID_USER_OUTER + 26
 
//返回当前选择的行号:wParam/lParam 未用
#define GM_GET_SELECT_ROW      WM_GRID_USER_OUTER + 27

//wParam --新高度(如果<=0,则没有第0行)
#define GM_SET_HEADER_ROW_HEIGHT    WM_GRID_USER_OUTER + 28

//wParam --新高度
#define GM_SET_ROW_HEIGHT      WM_GRID_USER_OUTER + 29

//wParam -- 列号lParam 新宽度
#define GM_SET_COL_WIDTH       WM_GRID_USER_OUTER + 30


//得到当前编辑状态:返回TRUE -- 正在编辑;FALSE --非编辑状态;
//wParam :未使用
//lParam  : GridCell_T指针,返回当前正在编辑的单元
#define GM_GET_EDIT_STATUS     WM_GRID_USER_OUTER+31


//设置栅格线颜色wParam -- RGB值(COLORREF)
#define GM_SET_GRID_LINE_COLOR     WM_GRID_USER_OUTER + 32

//设置选择行在Grid没有焦点时前景色和背景色
//wParam -- 前景色,lParam -- 背景色
#define GM_SET_NOFOCUS_SELLINE_COLOR   WM_GRID_USER_OUTER + 33

//设置选择行在Grid有焦点时前景色和背景色
#define GM_SET_FOCUS_SELLINE_COLOR    WM_GRID_USER_OUTER + 34

//设置当Grid只读时的前景色和背景色
#define GM_SET_READONLY_COLOR     WM_GRID_USER_OUTER + 35

//设置Grid背景色和前景色
#define GM_SET_GRID_COLOR      WM_GRID_USER_OUTER + 36 

#define GM_SET_TITLE_FONT       WM_GRID_USER_OUTER + 37

#define GM_SET_HEADING_FONT      WM_GRID_USER_OUTER + 38

#define GM_SET_BODY_FONT      WM_GRID_USER_OUTER + 39    


//得到GRID修改标志
//返回值0 --未被修改,非0--被修改
#define GM_GET_GRID_MODIFY     WM_GRID_USER_OUTER + 40

//设置GRID内容修改标志:lParam --值
#define GM_SET_GRID_MODIFY     WM_GRID_USER_OUTER + 41  

//得到行修改标志:wParam --行号
//可以在GN_ROW_CHANGED通知中获得该标志
#define GM_GET_ROW_MODIFY      WM_GRID_USER_OUTER + 42

//设置行修改标志:wParam--行号;lParam --值
#define GM_SET_ROW_MODIFY      WM_GRID_USER_OUTER + 43

//得到单元修改标志:wParam -- GridCell_T指针
//退出编辑之后该标志是无效的
//可以在GN_EXIT_CELL_EDITBOX通知中获得该标志
#define GM_GET_CELL_MODIFY     WM_GRID_USER_OUTER + 44

//设置单元修改标志 :wParam -- GridCell_T指针;lParam --值
#define GM_SET_CELL_MODIFY      WM_GRID_USER_OUTER + 45


typedef struct _tagGridCell
{
         int row;
         int col;
}GridCell_T;

typedef struct _tagGridNotifyStruct
{
 HWND hwndFrom;//Window handle to the control sending a message
     UINT idFrom;//Identifier of the control sending a message.
     UINT code;//Notification code
 LPARAM param;
 
 /*父窗口消息响应中的返回值(用这个变量返回值比直接
 用SendMessage返回值可靠,检测到该值未被改变,这可能是
 父窗口没有响应该消息或消息响应有意保持Grid后续的默
 认处理,但消息返回后Grid都可以放心地按默认处理)*/
     int    retVal;
 
 
}GridNotify_T; 

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值