MFC/C++学习系列之简单记录3——不同IDE版本和MSFlexGrid的使用

MFC/C++学习系列之简单记录3------不同IDE版本和MSFlexGrid的使用

  • 前言
  • VC 6.0与VS 2008
  • MSFlexGrid的使用以及单元格输入
    • 简单介绍几个功能的使用
    • 编辑单元格内容
  • 引用
  • 总结

前言

常学常新,简单记录!


VC 6.0与VS 2008

暂时发现的区别:

  • MFC创建Dialog的项目不同:6.0生成.dsw的工作控件,而2008生成的是.sln。这里就会导致2008创建的版本无法在6.0上打开。
  • 控件的不一样:
    6.0中的MSFlexGrid可以直接通过工具箱controls拖拉出来(如果没有也需要添加,Project------>Add to Project------>Components and Controls------>查找范围Gallery------>Registered ActiveX Controls------>选择需要添加的控件)。如果以上添加还是会出现"不支持此接口",请在界面上鼠标右击,然后Insert ActiveX Control,在这里找寻对应的控件。
    2008中需要在"工具"------>"选择工具箱"------>"COM组件"中找到Microsoft FlexGrid Control,Version 6.0,添加对应的控件库,然后会在工具箱中的常规找到6.0中对应的MSFlexGrid。

在运行使用中,如果项目新建后没有任何控件使用与插入,那么运行就会报错,提示Internal error。两者都会提示该错误,请新手注意!!!

MSFlexGrid的使用以及单元格输入

点击事件:双击控件,会主动添加点击事件的函数。如果需要删除,需要在"ClassWizard"中找到Messages中的Click对应的Member functions。

重载对话框函数:这里是对表格添加成员变量,为了后续在程序中的使用。ClassWizard------>Member Variables------>Add Variable...(如果之前没有msflexgrid的相关文件会自己添加,只需确认就好)

可以查看DoDataExchange中是否添加了对应的变量。同时.h文件中已经定义对应的变量,例如CMSFlexGrid m_xx;

简单介绍几个功能的使用

  • 设置表头
cpp 复制代码
CString str_row="1|2|3";
XX.SetFormatString(str_row);
  • 获取单元数、设置宽度
cpp 复制代码
xx.GetCols();
xx.SetColWidth(第几列,设置宽度)
  • 设置文本对齐方式
cpp 复制代码
xx.SetColAlignment(第几列,设置方式);
  • 设置滚动条轨道
cpp 复制代码
xx.SetScrollTrack(TRUE);

编辑单元格内容

在VC 6.0中需要使用MSFlexGrid控件进行数据输入,通过查阅资料,需要考虑以下几个方面的问题:

  • MSFlexGrid的矩形窗口换算:MSFlexGrid控件需要将其长度转化为像素,当鼠标点击时,需要考虑鼠标点击的位置。
    MSFlexGrid的长度单位为twips,计算每英寸水平逻辑像素数------1440/pDC->GetDeviceCaps(LOGPIXELSX),同理计算每英寸垂直逻辑像素数------1440/pDC->GetDeviceCaps(LOGPIXELSY)。
    通过MSFlexGrid的GetRowPos与GetColPos获取对应的确定指定行和列的左上角相对于表格左上角的距离(以像素为单位),这里也需要与前者进行计算获取对应的左上角的坐标。
    再通过MSFlexGrid的GetColWidth与GetRowHeight,计算对应单元格的长宽。
cpp 复制代码
CDC* pDC=GetDC();
int x_bili=1440/pDC->GetDeviceCaps(LOGPIXELSX);
int y_bili=1440/pDC->GetDeviceCaps(LOGPIXELSY);
long x = m_FlexGrid.GetColPos(lCol)/x_bili;
long y = m_FlexGrid.GetRowPos(lRow)/y_bili;
long width = m_FlexGrid.GetColWidth(lCol)/x_bili;
long height = m_FlexGrid.GetRowHeight(lRow)/y_bili;
  • VC 6.0中Edit_box的设置
    这里需要根据上文得到的x、y、宽度和高度,设置Edit_box的大小以及位置。这里需要注意,应使用CWnd来设置控件。CWnd提供了创建和管理 Windows 窗口的基本功能,CWnd 可以访问和操作窗口的各种属性和行为。
cpp 复制代码
CWnd *pWnd;
pWnd = GetDlgItem( 控件名称 );    //控件指针
pWnd->ShowWindow( SW_SHOW );     //设置控件显示
pWnd->MoveWindow(rc);           //改变大小并移到选中格位置
pWnd->SetWindowText(strValue);  //显示文本
pWnd->SetFocus();               //获取焦点

SetFocus 它用于将键盘输入焦点设置到指定的窗口。当一个窗口获得焦点时,它通常会显示一个光标,并且能够接收键盘输入。

  • 数据回传
cpp 复制代码
CString Input;
GetDlgItemText(控件名称,Input);      //获取输入框内容
MSFlexGrid的名称.SetText(Input);     //设置单元格内容
CWnd *pWnd;
pWnd = GetDlgItem( 控件名称 );       //控件指针
pWnd->ShowWindow(SW_HIDE);           //隐藏输入框

引用

https://www.cnblogs.com/jxnclyk/archive/2010/05/25/1743403.html

https://www.cnblogs.com/armstrong-cn/archive/2011/11/04/2236500.html

总结

主要内容是介绍在使用过程中VC6.0与VS2008的区别和MSFlexGrid的使用及单元格数据输入!

相关推荐
西哥写代码2 天前
基于dcmtk的dicom工具 第十三章 dicom文件导出bmp、jpg、png、tiff、mp4
c++·mfc·dicom·dcmtk·tiffopen·dipngplugin·dijpegplugin
西哥写代码6 天前
基于dcmtk的dicom工具 第十二章 响应鼠标消息实现图像的调窗、缩放、移动
c++·mfc·dicom·dcmtk·vs2017
西哥写代码7 天前
基于dcmtk的dicom工具 第十章 读取dicom文件图像数据并显示
c++·mfc·dcmtk·vs2017
R-G-B11 天前
【10】MFC入门到精通——MFC 创建向导对话框、属性页类、属性表类、代码
c++·mfc·创建向导对话框·创建属性页类·创建属性表类
今天又在学代码写BUG口牙11 天前
MFC应用程序,工作线程学习记录
c++·mfc·1024程序员节
滴_咕噜咕噜13 天前
【MFC】sqlite3数据库类导入MFC项目调用
sqlite·mfc
R-G-B13 天前
【23】MFC入门到精通——MFC资源视图 报错“在另一个编辑器中打开” ,MFC Dialog窗口消失 资源视图“在另一个编译器中打开”
c++·编辑器·mfc·“在另一个编辑器中打开”·mfc dialog窗口消失
滴_咕噜咕噜14 天前
【MFC】数据库操作:数据库动态生成
数据库·c++·mfc
R-G-B14 天前
【25】MFC入门到精通——MFC静态文本框 中字符串 连续输出 不覆盖先前的文本 换行输出
c++·mfc·mfc静态文本框输出字符串·mfc静态文本框连续输出字符串·mfc静态文本框换行输出字符串
ajassi200014 天前
开源 C++ QT QML 开发(二十三)程序发布
c++·qt·mfc