转自:http://blog.sina.com.cn/s/blog_460b9cbf0100hdyv.html
控件所在位置:C:\WINDOWS/system32\MSFLXGRD.OCX
1. 插入控件:
2.修改控件属性
在控件上点击鼠标右键->Properties,在弹出的对话框上修改:
Rows: 14
Cols: 3
3.在对话框区域点击右键->ClassWizard->Member Variables,然后双击Control IDs区域的IDC_MSFLEXGRID1,会弹出一个对话框提示:
点击“确定”按钮,为该控件添加变量m_flex;
4. 然后引入MyEditGrid.h头文件和MyEditGrid.cpp源文件
5. 在gridDlg.h(对话框类文件)中添加头文件:
#include “MyEditGrid.h”
修改变量声明:
为
CMyEditGrid m_flex;
6.
Void CGridDlg::OnClickMsflexgrid1()
{
m_flex.OnClickGrid();
}
7.
这样就成功了。
答案:我的做法是在双击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
则
其中m_FlexGrid.GetColPos(lCol)代表多少缇。
则m_FlexGrid.GetColWidth(lCol)/nTwipsPerDotX代表以像素为单位表示的宽度。
其中m_FlexGrid.GetColWidth(lCol)表示以缇为单位表示的宽度。
友情提示: