您的位置:首页 > 其它

如何使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控件添加单击事件处理函数:

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就编程可编辑的了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: