计划一个月内基本掌握MFC界面常规控件的应用以及相关知识。
1.布局设计
(博视)
AddWnd(GetDlgItem(nArrBtnID[i]), 0, 35, CLayout::eSizePolicy_Fixed)
GetDlgItem( ID )输出控件指针
CLayout::eSizePolicy_Fixed 布局类型“固定型”,

enum SizePolicy{eSizePolicy_Fixed = 0, // 固定eSizePolicy_Expand = 1, // 扩展eSizePolicy_Preferred = 2, // 默认};

SetWindowPos()
函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:
BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
第一个参数我不会用,一般设为NULL;
x、y控件位置;cx、cy控件宽度和高度;
nFlags常用取值:
SWP_NOZORDER:忽略第一个参数;
SWP_NOMOVE:忽略x、y,维持位置不变;
SWP_NOSIZE:忽略cx、cy,维持大小不变;

CWnd *pWnd;
pWnd = GetDlgItem( IDC_BUTTON1 );    //获取控件指针,IDC_BUTTON1为控件ID号
pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE );    //把按钮移到窗口的(50,80)处
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE );    //把编辑控件的大小设为(100,80),位置不变
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER );    //编辑控件的大小和位置都改变

VC++之根据对话框大小调整控件大小
1、在对话框类中加入成员变量CRect m_rect;用于保存对话框大小变化前的大小;
2、在对话框的OnInitDialog()函数中获取对话框创建时的大小:GetClientRect(&m_rect);
3、在WM_SIZE的响应函数OnSize()中加入以下代码:

CWnd * pWnd;
pWnd = GetDlgItem(IDC_LIST);      // 获取控件句柄
if (pWnd) // 判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{  CRect rect;    // 获取控件变化前大小   pWnd -> GetWindowRect( & rect);  ScreenToClient( & rect); // 将控件大小转换为在对话框中的区域坐标  //  cx/m_rect.Width()为对话框在横向的变化比例   rect.left = rect.left * cx / m_rect.Width(); /**/ /// //调整控件大小   rect.right = rect.right * cx / m_rect.Width();  rect.top = rect.top * cy / m_rect.Height();  rect.bottom = rect.bottom * cy / m_rect.Height();  pWnd -> MoveWindow(rect); // 设置控件大小
}
GetClientRect( & m_rect); // 将变化后的对话框大小设为旧大小

解决一个BUG:
加上 if(nType!=1){}
或者 if(nType!=SIZE_MINIMIZED ){}
不然窗口最小化后再恢复就产生BUG(整数除以0).

控件显示

GetDlgItem(IDC_BTN_MANUAL_TRATTER_COM)->EnableWindow(true)//false不显示,灰色

编辑框控件
编辑控件ID:IDC_EDIT_FOBC_P1,

GetDlgItemText(IDC_EDIT_FOBC_P1,strP1);//将控件中的内容赋值给strP1

下拉列表框COMBOX
1、假定已经创建了一个Dialog,并且从控件工具箱将 Combo Box 控件拖放到上面。打开 Class Wizard,添加控件对应变量,如:CComboBox m_cbExamble;在后面的代码中会不断使用这个变量。
2、向控件添加 Items

  1. 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。
  2. 利用函数 AddString() 向 Combo Box 控件添加 Items,如:
    m_cbExample.AddString(“StringData1”);
    m_cbExample.AddString(“StringData2”);
    m_cbExample.AddString(“StringData3”);
  3. 也可以调用函数 InsertString() 将 Item 插入指定位置 nIndex,如:
    m_cbExample.InsertString( nIndex, “StringData” );
    3、从控件得到选定的Item
    假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。这里会用到两个函数,如:
    int nIndex = m_cbExample.GetCurSel();
    CString strCBText;
    m_cbExample.GetLBText( nIndex, strCBText);
    这样,得到的内容就保存在 strCBText 中。
    若要选取当前内容,可调用函数GetWindowText(strCBText)。
    4、在控件中查找给定Item
    这种操作一般用于在程序中动态修改控件中该项的值,可以用函数FindStringExact() 精确匹配,如:
    int nIndex = m_cbExample.FindStringExact( nStartAfter, “value to be found”);
    nStartAfter指明从哪一行开始查找。如果查找成功,返回的是该项的位置;否则,返回CB_ERR。
    也可以选中包含指定字符串的项,如:
    int nIndex = m_cbExample.SelectString( nStartAfter, “value to be selected”);
    5、删除控件中的Item
    该操作可以利用函数DeleteString(),需要指定被删除项的位置,如:
    m_cbExample.DeleteString(nIndex);
    也可以使用函数ResetContent(),清除目前的所有项,如:
    m_cbExample.ResetContent();
    6、显示控件中的某项
    int nIndex = m_cbExample.GetCurSel(); //当前选中的项
    m_cbExample.SetCurSel(nIndex); //设置第nIndex项为显示的内容
    7、得到或设置输入框中被选中的字符位置
    DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar );
    BOOL LimitText( int nMaxChars ); 设置输入框中可输入的最大字符数。
  1. 获取下拉边框中的名字
GetDlgItemText(IDC_COMBO_COMMAND_LIST,strCmd);

列表控件
定义列表控件 CListCtrl m_listCtrlCmdRemark

DWORD dwStyle = m_listCtrlCmdRemark.GetExtendedStyle();//获取列表扩展属性dwStyle |= LVS_EX_GRIDLINES;//网格线dwStyle |= LVS_EX_FULLROWSELECT;//选择所有行dwStyle |= LVS_EX_SINGLEROW;//单行m_listCtrlCmdRemark.SetExtendedStyle(dwStyle);//设置列表属性CRect rtList;m_listCtrlCmdRemark.GetClientRect(&rtList);//获取列表区域m_listCtrlCmdRemark.InsertColumn(0, _T("指令"), 0, 100);//插入第一列,名字为指令,第三个是对齐方式:分别为左对齐,右对齐和中心对齐,设置为0是左对齐。第四个是宽度。m_listCtrlCmdRemark.InsertColumn(1, _T("参数描述"), 0, 200);m_listCtrlCmdRemark.InsertColumn(2, _T("功能描述"), 0, 150);

InsertItem()插入行:

int nItem = -1;nItem = m_listCtrlCmdRemark.InsertItem(nItem+1, _T("拍照指令"));//第一行插入“拍照指令”for (int i = 0; i < m_CmdRemardRes.m_vSearchCmd.size(); i++){nItem = m_listCtrlCmdRemark.InsertItem(nItem+1, m_CmdRemardRes.m_vSearchCmd[i].strCmd);//第二行第一列名字m_listCtrlCmdRemark.SetItemText(nItem, 1, m_nLanguage == 0 ?  m_CmdRemardRes.m_vSearchCmd[i].strChsParam : m_CmdRemardRes.m_vSearchCmd[i].strEnParam);//第二行行第2列m_listCtrlCmdRemark.SetItemText(nItem, 2, m_nLanguage == 0 ?  m_CmdRemardRes.m_vSearchCmd[i].strChsRemark : m_CmdRemardRes.m_vSearchCmd[i].strEnRemark);//第二行行第3列}

CHCK BOX控件
1.设定Check Box为 选中状态
((CButton*)GetDlgItem(ID号))->SetCheck(TRUE);
(SetCheck(FALSE)) 为不选中,如果想初始化为选中状态,则在InitDlg函数中加入下面这段语句。
( (CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);
2.检查Check Box是否为选中状态
可使用GetCheck()这个函数,如下:
if(BST_CHECKED==((CButton*)GetDlgItem(IDC_RADIO1))->GetCheck()) 判断是否选中;
if(BST_UNCHECKED==((CButton*)GetDlgItem(IDC_RADIO3))->GetCheck()) 判断是否未选中。
3.还可以通过添加事件,例如选中后启动按钮,和重置按钮。

RADIO BOX控件
radio控件与check控件差不多:

((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不选上
((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck();返回1表示选上,0表示没选上

分组过程;
首先ctrl+D,单击排序
其次
每组的第一个单选按钮设置属性:Group,Tabstop,Auto;其余按钮设置属性Tabstop,Auto。如:
Radio1、Radio2、Radio3为一组,Radio4、Radio5为一组
设定Radio1属性:Group,Tabstop,Auto
设定Radio2属性:Tabstop,Auto
设定Radio3属性:Tabstop,Auto

设定Radio4属性:Group,Tabstop,Auto
设定Radio5属性:Tabstop,Auto
PICTURE CONTROL控件
1)将上面添加的图片控件的Image属性IDB_BITMAP1清空,Type属性不变。
2)修改图片控件的ID为IDC_PICTURE_STATIC,然后为其添加CStatic类型控件变量m_Picture。(若不修改ID则无法为其添加控件变量)
3)在对话框下方添加一按钮控件,Caption属性改为“加载图片”,ID设为IDC_LOAD_PIC_BUTTON。
4)为按钮IDC_LOAD_PIC_BUTTON添加点击消息的处理函数CExample27Dlg::OnBnClickedLoadPicButton(),然后修改此函数的函数实。

 void CExample26Dlg::OnBnClickedLoadPicButton()
{// TODO:  在此添加控件通知处理程序代码CBitmap bitmap;  // CBitmap对象,用于加载位图   HBITMAP hBmp;    // 保存CBitmap加载的位图的句柄   bitmap.LoadBitmap(IDB_BITMAP1);  // 将位图IDB_BITMAP1加载到bitmap  hBmp = (HBITMAP)bitmap.GetSafeHandle();  // 获取bitmap加载位图的句柄  m_Picture.SetBitmap(hBmp);    // 设置图片控件m_Picture的位图图片为IDB_BITMAP1
}

MFC学习(实时更新)相关推荐

  1. 结合本科C++项目的MFC学习总结

    MFC学习笔记 个人财务管理软件设计中MFC控件的使用(List) list control控件的使用 combo box控件的使用 文件保存 登录对话框的建立 问题-MFC读取文件在EditCont ...

  2. RocketMQ:消息消费队列与索引文件的实时更新以及文件恢复源码解析

    文章目录 消息存储 1.实时更新消息消费队列和索引文件 1.1.转发到ConsumerQueue 1.2.转发到Index 2.消息队列和索引文件恢复 2.1.存储文件加载 2.1.1.加载commi ...

  3. 点击展开 表格_CAD怎么将excel表格的数据导入并且实时更新?

    打造带着微信干工程的实用公众号!欢迎关注本公众号! 小编推荐好文 筑龙至尊套餐 | 全套施工技能培训视频 | 免费分享 全套工程视频合集 | 交底学习必备 | 部分可下载 全套质量通病及防治 | 联盟 ...

  4. 3D点云论文汇总-实时更新

    目录 1.论文实时更新 1.论文实时更新 PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation-CV ...

  5. ios pusher使用_如何使用JavaScript和Pusher实时更新用户状态

    ios pusher使用 by Rahat Khanna 通过拉哈特·汉娜 如何使用JavaScript和Pusher实时更新用户状态 (How to update a User's Status i ...

  6. php 实时更新内容_亿级视频内容如何实时更新?优酷视频背后的技术揭秘

    简介: 优酷视频内容数据天然呈现巨大的网络结构,各类数据实体连接形成了数十亿顶点和百亿条边的数据量,面对巨大的数据量,传统关系型数据库往往难以处理和管理,图数据结构更加贴合优酷的业务场景,图组织使用包 ...

  7. MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结

    MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结 1.MFC单文档程序运行流程 1.首先利用全局变量对象 theApp 启动应用程序 (这是因为这个全局对象,基类CWinApp中 this ...

  8. mfc 学习的第三天

    mfc 学习的第三天 消息映射 消息映射是一个将消息和成员函数相互关联的表.比如,框架窗口接收到一个鼠标左击消息,MFC将搜索该窗口的消息映射,如果存在一个处理WM_LBUTTONDOWN消息的处理程 ...

  9. mfc 学习的第二天

    mfc 学习的第二天 MFC 入门 1.1 MFC是什么 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class librari ...

  10. mfc 学习的第一天

    mfc 学习的第一天 1 通过底层实现窗口 1.1 sdk api 句柄 1.2 消息处理机制 1.3 头文件 windows.h 1.4 程序入口 winMain 2 具体6个步骤 2.1 1.设计 ...

最新文章

  1. 为什么分布式一定要有消息队列?
  2. dagger2 依赖注入
  3. HTML5中的websocket实现直播
  4. 为什么说语言是思维的最有效的工具
  5. HTML 5.2 新特性介绍
  6. TCP/IP / PDU 是什么
  7. 【亲测好用!】Centos6.5安装Sublime text 3-----可创建桌面图标
  8. 微信小程序获取用户信息以及唯一openid
  9. 刷屏!边学边用,这个学Python方法彻底火了!
  10. XP搭建winwebmail具体步骤
  11. espcms联动筛选功能开发
  12. Asp.net 5种页面转向方法 转载
  13. coreldraw x4忽略视图样式补丁_Coreldraw x4忽略颜色样式和视图样式补丁
  14. maven工程报错:One or more constraints have not been satisfied
  15. linux vi如何输入井号,Linux Vi命令用法详解
  16. iOS 卡顿原因及优化思路
  17. MATLAB有趣或有用小程序合集
  18. 专业计算机基础教学,计算机基础教学计划
  19. java多线程学习笔记--一.多线程的基础知识
  20. linux怎么做bt种子文件,linux 制作BT种子并获取BT种子信息

热门文章

  1. BZOJ2592: [Usaco2012 Feb]Symmetry
  2. android使用遥控器模拟鼠标拖拽操作
  3. 数字信号处理matlab——系统响应和系统稳定
  4. OpenCV编程:最大熵阈值分割算法实现(代码可运行)
  5. 安装完office没有图标_很多人不会设置路由器?只因没有弄懂安装顺序,看完你就会了...
  6. ubuntu 创建Fdfs文件服务器
  7. FastNetMon 使用笔记
  8. 怎么关闭eureka的服务_SpringCloud之Eureka
  9. 放弃 Google 搜索引擎,Firefox 欲用必应替代?
  10. 《线性代数及其应用》系列笔记