怎么设置GridCtrl为不可编辑啊?

52001314 2002-10-06 03:45:21
初始化的时候用了m_Grid.SetEditable(FALSE);但是不行。

还要加什么语句??请指点。
...全文
463 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
52001314 2002-10-08
  • 打赏
  • 举报
回复
唉,人比较笨,SetEditable()有时候行有时候不行,不懂为什么。哪位大侠可以教教我??


只好对每一格用m_Grid.SetItemState(row,col, m_Grid.GetItemState(row,col) | GVIS_READONLY);这样也可以实现readonly.


感谢power4的帮助。下午结贴。

52001314 2002-10-08
  • 打赏
  • 举报
回复
还是不行啊。哪位大侠遇到过这种情况,快救救我
power4 2002-10-07
  • 打赏
  • 举报
回复
这个类我只是粗略看了一下,就设置了这几个属性,呵呵,你好好看看他的代码好了,还有很多功能,!!!!
power4 2002-10-07
  • 打赏
  • 举报
回复
怎么会不行呢!怪!我给你我的代码
//
m_Grid.RedrawWindow();
m_Grid.SetEditable(FALSE);
m_Grid.SetListMode(FALSE);
m_Grid.EnableDragAndDrop(FALSE);

try {
m_Grid.SetRowCount(nRows);
m_Grid.SetColumnCount(nCols);
m_Grid.SetFixedRowCount(nFixRows);
m_Grid.SetFixedColumnCount(nFixCols);
}
//异常处理
catch (CMemoryException* e)
{
e->ReportError();
e->Delete();
return ;
}
m_Grid.SetGridColor(BLUE);
m_Grid.SetBkColor(ALLBackGround);
m_Grid.SetTextBkColor(WHITE);
m_Grid.SetFixedBkColor(WHITE);
//第一列
m_Grid.DisPlayRowTitle(QING,SHENGLAN,w0,height2,0, 0,"设备名");

52001314 2002-10-07
  • 打赏
  • 举报
回复
还是不行啊。我的代码:
m_Grid.RedrawWindow();
m_Grid.SetEditable(FALSE);
m_Grid.SetListMode(FALSE);
m_Grid.EnableDragAndDrop(FALSE);



try {
m_Grid.SetRowCount(20);
m_Grid.SetColumnCount(20);
m_Grid.SetFixedRowCount(1);
m_Grid.SetFixedColumnCount(1);
}
//异常处理
catch (CMemoryException* e)
{
e->ReportError();
e->Delete();
return FALSE;
}


我看了一下他的代码。
void SetEditable(BOOL bEditable = TRUE)
{ m_bEditable = bEditable; }

但是m_bEditable就只有在BOOL IsEditable() const { return m_bEditable; }中出现过一次。没有其他实现语句。

你的代码是哪里载的,我也去载一个算了。

还是说要用其他语句?我觉得这个函数够了。
52001314 2002-10-06
  • 打赏
  • 举报
回复
Up一下
52001314 2002-10-06
  • 打赏
  • 举报
回复
to power4:我试了,不行啊。

还有什么办法吗?大家快帮忙啊!!!
power4 2002-10-06
  • 打赏
  • 举报
回复
如果不行的话,就加一句 m_Grid.RedrawWindow();
52001314 2002-10-06
  • 打赏
  • 举报
回复
感觉国庆节挺多人去休假了,回答问题的少了不少,羡慕啊:(
52001314 2002-10-06
  • 打赏
  • 举报
回复
大家帮忙看看啊。
52001314 2002-10-06
  • 打赏
  • 举报
回复
不行,资源中只能设为disable,但我的意思是想readonly.

如果disable,则GridCtrl的一些功能,例如列的大小拉伸就不能操作了。

WadeHan 2002-10-06
  • 打赏
  • 举报
回复
直接在资源属性中设置一下试试。
下午发的那个RRGrid有个地方的测试没有取消,会造成内存泄漏,再发一个

顺便把头文件发出来

#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

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

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

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

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

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

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





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

#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;

extern "C"_declspec(dllimport)
BOOL RR_GridCtrl_Register(HINSTANCE);

extern "C"_declspec(dllimport)
BOOL RR_GridCtrl_Register(HINSTANCE);

extern "C"_declspec(dllimport)
void RR_GridCtrl_SetCell(GridCell_T *cell,int row, int col);

//比较两个单元,行列号相等返回TRUE,否则返回FALSE
extern "C"_declspec(dllimport)
BOOL RR_GridCtrl_CmpCell(const GridCell_T *pCell1,const GridCell_T *pCell2);

extern "C"_declspec(dllimport)
BOOL RR_GridCtrl_GetCellText(HWND hGrid,int row ,int col ,char *pszBuf,int buf_size);

extern "C"_declspec(dllimport)
BOOL RR_GridCtrl_SetCellText(HWND hGrid,int row ,int col ,char *pszText);

extern "C"_declspec(dllimport)
HWND RR_Create_GridCtrl(DWORD dwStyle,HWND hWndParent,RECT *pGridRect, int nId,char szGridTitle[],int rows,int cols);

extern "C"_declspec(dllimport)
BOOL RR_Load_GridCtrl(char szFile[],HWND hGrid);

extern "C"_declspec(dllimport)
BOOL RR_Save_GridCtrl(char szFile[],HWND hGrid);

extern "C"_declspec(dllimport)
HWND RR_GetDlgGridItem(HWND hDlg,int id);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧