做如图选择,点击“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