MFC编程基础 1 基于对话框的Windows应用程序(5)

2019-06-11 12:05

做如图选择,点击“add and

Edit”就把OnHScroll函数添加进去。

说明 :

① pScrollBar 指向用户正在进行操作的滚动条。 ② nPos 表示滑块当前的位置。

③ nSBCode 指示用户正在进行的操作,其取值及其意义见表。

程序代码:

…………………………………………………………

void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default if (pScrollBar==&m_s) { int iNowPos;

switch(nSBCode) { case SB_THUMBTRACK: // 拖动滚动滑块时 m_s.SetScrollPos(nPos); m_e=nPos; break; case SB_LINELEFT : // 单击滚动条向左的箭头 iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值 iNowPos=iNowPos-2; if(iNowPos<0) iNowPos=0;

21

m_s.SetScrollPos(iNowPos); m_e=iNowPos; break; case SB_LINERIGHT : // 单击滚动条向右的箭头 iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值 iNowPos=iNowPos+2; if(iNowPos>100) iNowPos=100; m_s.SetScrollPos(iNowPos); m_e=iNowPos; break; case SB_PAGELEFT : // 单击滚动条左边的箭头与滑块之间的区域 iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值 iNowPos=iNowPos-10; if(iNowPos<0) iNowPos=0; m_s.SetScrollPos(iNowPos); m_e=iNowPos; break;

case SB_PAGERIGHT : // 单击滚动条右边的箭头与滑块之间的区域 iNowPos=m_s.GetScrollPos(); // 获取滑块当前位置所代表的值 iNowPos=iNowPos+10; if(iNowPos>100) iNowPos=100; m_s.SetScrollPos(iNowPos); m_e=iNowPos; break; } } UpdateData(FALSE); CDialog::OnHScroll(nSBCode, nPos, pScrollBar); }

………………………………………………………… 说明:

(1)由于对话框上可能有多个滚动条,因此函数首先需要根据指针 pScrollBar 确定事件发生在哪一个滚动条上,方法是使用表达式 pScrollBar==&m_s 。因为, pScrollBar 指向发生事件的滚动条,所以这个表达式为真时,意味着用户对滚动条 m_s 进行了操作。

(2)用户对滚动条的操作有 5 种,因此函数中必须以这 5 种情况分别进行处理。

1.7 程序举例

对话框是 Windows 应用程序中最常用的一种与用户交互的方式。用户通过对话框输入数据,程序通过对话框显示执行的情况。

【例 1.9】 设计如图所示的对话框。若选定了“日期”或“时间”复选框,则在对应

22

的只读编辑框中显示系统当前日期或时间。

IDC_CHECK1 IDC_CHECK2

分析: CTime 是 MFC 中的一个类,封装了日期和时间。它有一个静态成员 GetCurrentTime() ,返回系统当前的日期和时间。

实现:

(1)界面设计

首先创建一个对话框程序框架,然后放置各控件,按表进行属性设置和连接变量。

(2)消息处理函数

?????????????????????? void CTESTDlg::OnCheck1() {

// TODO: Add your control notification handler code here UpdateData(TRUE); if(m_k1==TRUE)

{ CTime Time=CTime::GeTCurrentTime();

m_e1=Time.Format(\.%m.%d\// 构造“ YYYY.MM.DD ”形式的日期字符串

} else

m_e1=\

UpdateData(FALSE); }

?????????????????????? void CTESTDlg::OnCheck2() {

// TODO: Add your control notification handler code here

23

UpdateData(TRUE); if(m_k2==TRUE)

{ CTime Time=CTime::GetCurrentime();

m_e2=Time.Format(\构造“ HH:MM:SS ”形式的时间字符串 } else

m_e2=\

UpdateData(FALSE); }

??????????????????????

【例1.10】 设计如图所示的对话框。单击“确定”按钮后,在列表框中显示选择的信息。

(1)界面设计

首先创建一个对话框程序框架,然后放置各控件,按图所示设置属性和连接变量。其中, m_e2 编辑框设置为只读,组合框和列表框取消排序属性。

(2)初始化

组合框的选项在设计阶段输入,其余控件的初始化在对话框的初始化函数中完成。 BOOL CTESTDlg::OnInitDialog() { ┆

// TODO: Add extra initialization here

CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1); m_sc.SetScrollRange(0,30); m_sc.SetScrollPos(10); m_e2=10;

UpdateData(FALSE); ┆ }

(3)滚动条消息处理函数

请参照滚动条部分自己完成。为了不影响其它控件,应开始处添加命令:

24

UpdateData(TRUE);

(4)命令按钮的消息处理函数

?????????????????????? void CTESTDlg::OnButton1() {

// TODO: Add your control notification handler code here

UpdateData(TRUE); // 用各控件中的值更新对应的连接变量 m_l.ResetContent(); // 删除列表框中所有的内容 m_l.AddString(m_e1);

if(IsDlgButtonChecked(IDC_RADIO1)) m_l.AddString(\男 \ else

m_l.AddString(\女 \

if (m_c1) m_l.AddString(\旅游 \ if (m_c2) m_l.AddString(\运动 \ if (m_c3) m_l.AddString(\音乐 \ CString s;

s.Format(\是 int 类型,将它转换成字符串 m_l.AddString(s);

m_l.AddString(m_conb); }

??????????????????????

系统要求首先进入一个登录对话框,输入用户名和密码正确才进入系统菜单, 通过菜单选择执行哪个程序,打开相应的对话框

1. 新建单文档工程:班级_学号(注意此名由设计者自己任取例如:hg1205-12345);

2. 在ResourceView, 单击Insert Dialog,插入一对话框IDD_DIALOG1(默认ID号);

3. 右键选中新建的对话框,利用类向导建立一个新类Create a new class,名称为:Cdlg_login ;//类名前面以大写C开头

4. 在MainFrm.cpp文件的前面,语句#include “MainFrm.h”的后面添加新类的头文件:

#include \毛似是#include \

1. 在FileView中点击source files,双击MainFrm.cpp。找到:

CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct), 这是窗体框架创建函数。在该函数的后面(在return 0 ;的前面)加入语句(注意大小写): Cdlg_login dlg; //定义一个登录对话框类的对象dlg dlg.DoModal(); //让对话框对象以有模式形式显示出来

1. 此时对话框与单文档联接完成。

登录对话框退出按钮代码 //确定按钮

25

void CDlg_login::OnOK() { // TODO: Add extra validation here this->UpdateData(true); if(this->m_name1==\ CDialog::OnOK(); else { MessageBox(\登录有误\ ExitProcess(0); //退出 } //CDialog::OnOK(); }

//取消按钮

void CDlg_login::OnCancel() { // TODO: Add extra cleanup here ExitProcess(0); //退出 }

7. 在ResourceView, 单击Insert Dialog,插入一对话框IDD_DIALOG2(默认ID号); 8. 在对话框中完成相应的功能; 9. 右键选中新建的对话框,利用类向导建立一个新类Create a new class,例如名称为:Cdlg_jc(自己命名);

10. 在 hg1205-12345View.cpp :文件中语句#include \hg1205-12345View.h\的后面添加新类的头文件:

#include \

11. 在主菜下通过“建立类向导”命令,从“Class name”组合框中选择Chg1205_12345view ,并在函数OnJc()编写代码如下:

void Chg1205_12345View::OnJc()

{ // TODO: Add your command handler code here Cdlg_jc jc; //定义一个求阶层对话框对象jc jc.DoModal(); //让对话框对象以有模式形式显示出来 }

12. 此时单文档菜单项与对话框联接完成。

26


MFC编程基础 1 基于对话框的Windows应用程序(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《电气控制与可编程控制器》教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: