如何使MsFlexGrid控件具有编辑功能
2014-07-24 14:49
148 查看
转自:http://blog.sina.com.cn/s/blog_460b9cbf0100hdyv.html
控件所在位置:C:\WINDOWS/system32\MSFLXGRD.OCX
1. 插入控件:
在对话框上点击鼠标右键->Insert ActiveX Control->Microsoft
FlexGrid Control,version 6.0。
2.修改控件属性
在控件上点击鼠标右键->Properties,在弹出的对话框上修改:
Rows: 14 Fixed Rows 1
Cols: 3 Fixed Cols 0
3.在对话框区域点击右键->ClassWizard->Member
Variables,然后双击Control IDs区域的IDC_MSFLEXGRID1,会弹出一个对话框提示:
The ActiveX Control “Microsoft FlexGrid Control, version 6.0(SP6)” has not been inserted into project. Developer Studio will do this
now and generate a C++ wrapper class for it
点击“确定”按钮,为该控件添加变量m_flex;
4. 然后引入MyEditGrid.h头文件和MyEditGrid.cpp源文件
5. 在gridDlg.h(对话框类文件)中添加头文件:
#include “MyEditGrid.h”
修改变量声明:
CMSFlexGrid m_flex;
为
CMyEditGrid m_flex;
6. 为MSFLEXGRID控件添加单击事件处理函数:
7. 在gridDlg.cpp文件中的BOOL
CGridDlg::OnInitDialog()函数中添加函数调用:
m_flex.Init();
这样就成功了。
答案:我的做法是在双击MsFlexGrid控件的单元格时,显示编辑框,但是如何精确定位编辑框在MsFlexGrid控件中的位置呢?
rc即为该格大小位置
函数功能:该函数检索指定设备的设备指定信息。
函数原型:int
GetDeviceCaps(HDC hdc, int nlndex);
参数:
1、hdc:设备上下文环境的句柄。
2、nIndex:指定返回项,该参数取下列一值。(C++)
LOGPIXELSX:沿屏幕宽度每逻辑英寸的像素数,在多显示器系统中,该值对所显示器相同;
LOGPIXELSY:沿屏幕高度每逻辑英寸的像素数,在多显示器系统中,该值对所显示器相同;
则1440 / pDC->GetDeviceCaps(LOGPIXELSX) 代表每个像素等于多少缇。
则 m_FlexGrid.GetColPos(lCol)/nTwipsPerDotX代表像素值即位置坐标。
其中m_FlexGrid.GetColPos(lCol)代表多少缇。
则m_FlexGrid.GetColWidth(lCol)/nTwipsPerDotX代表以像素为单位表示的宽度。
其中m_FlexGrid.GetColWidth(lCol)表示以缇为单位表示的宽度。
友情提示:
m_EditCtl.MoveWindow(rc)语句表示把编辑框移动到选中的MsFlexGrid的位置,这样MsFlexGrid就编程可编辑的了。
控件所在位置:C:\WINDOWS/system32\MSFLXGRD.OCX
1. 插入控件:
在对话框上点击鼠标右键->Insert ActiveX Control->Microsoft
FlexGrid Control,version 6.0。
2.修改控件属性
在控件上点击鼠标右键->Properties,在弹出的对话框上修改:
Rows: 14 Fixed Rows 1
Cols: 3 Fixed Cols 0
3.在对话框区域点击右键->ClassWizard->Member
Variables,然后双击Control IDs区域的IDC_MSFLEXGRID1,会弹出一个对话框提示:
The ActiveX Control “Microsoft FlexGrid Control, version 6.0(SP6)” has not been inserted into project. Developer Studio will do this
now and generate a C++ wrapper class for it
点击“确定”按钮,为该控件添加变量m_flex;
4. 然后引入MyEditGrid.h头文件和MyEditGrid.cpp源文件
5. 在gridDlg.h(对话框类文件)中添加头文件:
#include “MyEditGrid.h”
修改变量声明:
CMSFlexGrid m_flex;
为
CMyEditGrid m_flex;
6. 为MSFLEXGRID控件添加单击事件处理函数:
Void CGridDlg::OnClickMsflexgrid1() { m_flex.OnClickGrid(); }
7. 在gridDlg.cpp文件中的BOOL
CGridDlg::OnInitDialog()函数中添加函数调用:
m_flex.Init();
这样就成功了。
答案:我的做法是在双击MsFlexGrid控件的单元格时,显示编辑框,但是如何精确定位编辑框在MsFlexGrid控件中的位置呢?
CRect rect; m_FlexGrid.GetWindowRect(rect); ScreenToClient(rect); long lRow = m_FlexGrid.GetRowSel(); long lCol = m_FlexGrid.GetColSel(); //MsFlexGrid控件的函数的长度单位是“缇(twips)”, //需要将其转化为像素,1440缇 = 1英寸 CDC* pDC = GetDC(); int nTwipsPerDotX = 1440 / pDC->GetDeviceCaps(LOGPIXELSX) ; int nTwipsPerDotY = 1440 / pDC->GetDeviceCaps(LOGPIXELSY) ; // long y = m_FlexGrid.GetRowPos(lRow)/nTwipsPerDotY; long x = m_FlexGrid.GetColPos(lCol)/nTwipsPerDotX; long width = m_FlexGrid.GetColWidth(lCol)/nTwipsPerDotX+1; long height = m_FlexGrid.GetRowHeight(lRow)/nTwipsPerDotY+1; CRect rc(x,y,x+width,y+height); rc.OffsetRect(rect.left+1,rect.top+1);
rc即为该格大小位置
注释: GetDeviceCaps
函数功能:该函数检索指定设备的设备指定信息。函数原型:int
GetDeviceCaps(HDC hdc, int nlndex);
参数:
1、hdc:设备上下文环境的句柄。
2、nIndex:指定返回项,该参数取下列一值。(C++)
LOGPIXELSX:沿屏幕宽度每逻辑英寸的像素数,在多显示器系统中,该值对所显示器相同;
LOGPIXELSY:沿屏幕高度每逻辑英寸的像素数,在多显示器系统中,该值对所显示器相同;
则1440 / pDC->GetDeviceCaps(LOGPIXELSX) 代表每个像素等于多少缇。
则 m_FlexGrid.GetColPos(lCol)/nTwipsPerDotX代表像素值即位置坐标。
其中m_FlexGrid.GetColPos(lCol)代表多少缇。
则m_FlexGrid.GetColWidth(lCol)/nTwipsPerDotX代表以像素为单位表示的宽度。
其中m_FlexGrid.GetColWidth(lCol)表示以缇为单位表示的宽度。
友情提示:
m_EditCtl.MoveWindow(rc)语句表示把编辑框移动到选中的MsFlexGrid的位置,这样MsFlexGrid就编程可编辑的了。
相关文章推荐
- 关于如何让VC6.0 VS代码编辑具有智能提醒功能的软件Visual Assist X
- 让CListCtrl的SubItem也具有编辑功能
- Excel中如何能使单元格具有复选功能
- 如何让你的eclipse的像vs2008一样具有强大的代码提示功能
- 详解如何让MyEclipse具有强大的提示功能
- 如何让TextBox控件具有自动完成输入功能
- 听刘如鸿先生《如何设计具有可扩展性功能的软件架构》感想
- 如何才能作具有超强安全性功能的网站
- 如何让你的系统具有向外发送手机短信或即时消息的功能?
- 11.16 如何验证当前用户是否具有指定的功能权限?
- 11.28 如何选择具有某一功能权限的当事人?
- 在ASP.NET 2.0 下如何实现DataList的编辑功能
- 用C++Builder开发具有历史记录功能的编辑控件
- 如何让MyEclipse具有强大的提示功能
- 如何实现 clistctrl每个subitem编辑功能
- 如何完成一个具有Pause和Continue这两个功能的Windows Service
- 孙鑫vc++ 第十一课 笔记 如何让CDC上输出的文字、图形具有保持功能
- 如何开发动态表格编辑功能
- 让CListCtrl的SubItem也具有编辑功能:
- 如何让你的eclipse的像vs2008一样具有强大的代码提示功能