如何使MsFlexGrid控件具有编辑功能

转自: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)

  参数:

  1hdc:设备上下文环境的句柄。

  2nIndex:指定返回项,该参数取下列一值。(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就编程可编辑的了。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值