Windows编程基础--第8节 MFC对话框控件访问的七种方法(上)

标签: mfc 控件
2026人阅读 评论(0) 收藏 举报
分类:

MFC对话框控件具有以下三种访问方式(当然还有很多别的访问方式,今天时间紧急,先学这三种),分别是:

第一种
GetDlgItem()->GetWindowText()
GetDlgItem()->SetWindowText()

第二种
GetDlgItemText()

第三种
GetDlgItemInt()
SetDlgItemInt()

1.新建一个对话框项目

参见上节,我们这节采用VS2010编写一个身高体重计算器(BMI),参见 第二节

2.布局

编辑布局如下:
这里写图片描述

EDIT名称 ID
身高 IDC_EDIT_SG
体重 IDC_EDIT_TZ
BMI IDC_EDIT_BMI

3.实现方法

双击确认按钮,编辑其点击消息处理函数;

void Cday08Dlg::OnBnClickedOk()
{
    // TODO: 在此添加控件通知处理程序代码
    int nHeight= GetDlgItemInt(IDC_EDIT_SG,NULL,TRUE);
    double dHeight = nHeight / 100.00;
    int nWeight = GetDlgItemInt(IDC_EDIT_TZ,NULL,TRUE);
    double bmi = nWeight/(dHeight*dHeight);
    char buf[28];
    sprintf(buf, "%.3f", bmi);
    SetDlgItemText(IDC_EDIT_BMI,buf);
}

这里可以看见使用到了GetDlgItemInt,这就是直接获取文本框的值,并返回为整形,然后用sprintf(buf, “%.3f”, bmi);将double类型值转换成字符串,并通过SetDlgItemText将字符串的值设置到ID为IDC_EDIT_BMI的文本框上;

4.编译运行

估计很多人会像我一样,VS2010会报这样的错误:
这里写图片描述
这是因为我们创建的项目的字符集为Unicode,不允许这样转换,这时我们只要将解决方案中右击项目名“day09”->“属性”->“配置属性”->”常规”->”字符集”->选择“使用多字节字符集”就好了,如下:
这里写图片描述
这里写图片描述
这时就可以通过编译,运行结果如下:
这里写图片描述

5.其他方法

再次编辑“确认”按钮的点击消息处理函数;
第二种

void Cday08Dlg::OnBnClickedOk()
{
    // TODO: 在此添加控件通知处理程序代码
    TCHAR tcHeight[10], tcWeight[10];
    GetDlgItem(IDC_EDIT_SG)->GetWindowText(tcHeight,10);
    GetDlgItem(IDC_EDIT_TZ)->GetWindowText(tcWeight,10);

    int nHeight = _ttoi(tcHeight);
    double dHeight = nHeight / 100.00;
    int nWeight = _ttoi(tcWeight);

    double bmi = nWeight/(dHeight * dHeight);
    char buf[28];
    sprintf(buf, "%.3f", bmi);
    GetDlgItem(IDC_EDIT_BMI)->SetWindowText(buf);
}

可以看见,这里用到了GetDlgItem(IDC_EDIT_SG)->GetWindowText(tcHeight,10)方法,这个方法的过程就是先通过GetDlgItem(IDC_EDIT_SG)获取到控件对象,然后调用控件的GetWindowText(tcHeight,10)方法来获取控件的显示文本;

第三种

void Cday08Dlg::OnBnClickedOk()
{
    TCHAR tcHeight[10], tcWeight[10] , tcBMI[10];
    GetDlgItemText(IDC_EDIT_SG,tcHeight,10);
    GetDlgItemText(IDC_EDIT_TZ,tcWeight,10);

    int nHeight = _ttoi(tcHeight);
    double dHeight = nHeight / 100.00;
    int nWeight = _ttoi(tcWeight);

    double bmi = nWeight/(dHeight * dHeight);
    char buf[28];
    sprintf(buf, "%.3f", bmi);
    SetDlgItemText(IDC_EDIT_BMI,buf);
}

可以看见,这里直接用到了GetDlgItemText(IDC_EDIT_SG,tcHeight,10)方法,这个方法的过程就是先通过GetDlgItem(IDC_EDIT_SG)获取到控件对象,然后调用控件的GetWindowText(tcHeight,10)方法来设置控件的显示文本;

虽然上面三种方法最终结果是一样的,但是其本质还是有所区别的

项目源码可以访问我的码云

查看评论

MFC访问对话框控件的7种方法

MFC访问对话框控件的一些常用方法
  • pengz0807
  • pengz0807
  • 2015-08-15 20:50:41
  • 747

MFC学习笔记之:7种访问对话框控件的方式

7种访问对话框控件的方式,他们分别是:·GetDlgItem()->Get(Set)WindowText()·Get(Set)DlgItemText()·Get(Set)DlgItemInt()·将控...
  • a408789699
  • a408789699
  • 2011-03-31 14:06:00
  • 2836

MFC(继续对话框,孙鑫C++第八讲笔记整理)

1.如何改变按纽的字体?在对话框的属性中改变字体的属性即可   2.逃跑按纽的实现    1.从CButton派生一个类,CWeixinBtn  2.将IDC_EDIT1关联成员变量m_bt...
  • u012377333
  • u012377333
  • 2014-11-04 20:00:13
  • 1020

一个对话框调用另一个对话框的控件值

我遇到的问题: 有两个平行对话框,其中一个对话框的校验和要根据另一个对话框的IP改变而重新计算改变,一直读取不到IP的值, 使用的方法,直接定义CIPDlg IPDlg,只能获得初值, exte...
  • nma_123456
  • nma_123456
  • 2012-08-10 11:27:36
  • 5042

MFC访问对话框控件的几种方式

1、通过对话框访问 /*******************************************/ int num1,num2,num3; CString str1,str2,str3...
  • h_wlyfw
  • h_wlyfw
  • 2014-03-07 12:11:06
  • 1431

MFC子线程访问主线程对话框程序的控件对象

最近在使用 VC 开发软件时需要用到多线程同步来解决开发过程中遇到的问题。本来以为只要象控制台程序一样,在主线程创建子线程,并设置好相应的对象事件就能解决问题,但是等到真正做起来,才在实践中发现原来事...
  • xbmoxia
  • xbmoxia
  • 2013-11-27 14:17:08
  • 4963

C++开发技术实例讲解

  • 2013年02月24日 16:36
  • 1.34MB
  • 下载

MFC 对话框载入背景图片-控件加载图片

Picture控件(其他控件也可以)加载BMP格式图片方法一:此方法是MFC的原始方法,只能加载BMP格式图片CRect pictureRect; m_ctrlPic.GetClientRect(&p...
  • u011100345
  • u011100345
  • 2017-03-21 15:51:11
  • 1397

VC中在对话框上的static控件中绘图

在MFC对话框上的static控件中绘制图形,发现的一些问题与解决方法
  • u010957054
  • u010957054
  • 2017-03-13 09:03:37
  • 1113

MFC对话框程序中当鼠标移动到控件上后改变形状

在当前的监控程序中,有两个按钮,分别处理时间点的上一个和下一个,想实现当鼠标移动到这两个按钮上时变为手的鼠标指针,Google了一下,发现csdn上titilima兄已经给出正确方法: ...
  • LuDan763656280
  • LuDan763656280
  • 2013-12-10 15:58:19
  • 1116
    个人资料
    持之以恒
    等级:
    访问量: 4万+
    积分: 711
    排名: 7万+
    文章存档