vc入门宝典五(对话框)

原创 2004年03月01日 09:58:00

对话框<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

                                         

何志丹

主要内容:

1,  建立有模式对话框和无模式对话框

2,  控件的对齐及焦点设置

3,  实例

4,  通用对话框

5,  常用函数

 

对话框可按其动作模式分为“有模式”和“无模式”两大类。对于有模式对话框,在对话框被关闭之前,用户无法进行其它工作。而无模式的对话框,而它仍然保留在屏幕上的同时,用户可以在应用程序的其它窗口进行工作。

 

    建立一个基于对话框的程序Dialog.

在资源管理器中插入一个对话框,Ctrl+w新建一个类COwnerDiaog;IDD_DIALOG_DIALOG中加一个按钮,双击它编辑代码。

void CDialogDlg::OnButton1()

{

       COwnerDialog dlg;

       dlg.DoModal();

}

不要忘了#include "OwnerDialog.h"。你不关闭它,无法对主对话框下达命令,但你仍然可以打开其它程序。我们删除刚刚添加的代码。

void CDialogDlg::OnButton1()

{

       COwnerDialog *pDlg=new COwnerDialog();

       pDlg->Create(IDD_DIALOG1);

       pDlg->ShowWindow(SW_RESTORE);

}

这是一个无模式对话框,你可以在处理子对话框之前,对主对话框下达命令。注意如果你关闭了主对话框,则子对话框也被关闭了。

 

Layout中有四个功能是十分有用的,Tab Order(快捷键Ctrl+D):依次单击按钮决定它们的焦点顺序。

这样当用户,按Tab键切换焦点时,控件获得焦点的顺序就是我们设定好的。例如一个对话框要我们输入用户名,口今,再按确定。我们将它们的焦点顺序分别设为1,2,3,这样用户输入了用户名,再按Tab,输入口今,回车就可以了。

   Layout  Align                            将选择的控件按某种方式对齐

   Layout  Space evenly      平均分配选择的控件的间隔

   Layout  Make same size    使选择的控件大小相同

 

我们来编一个简单程序,程序随机产生一个x,用户输入y=x*x,的值,程序检查对错,如果错了,还要改正。

生成一个基于对话框的应用程序,去掉”TODO: 在这里设置对话控制”,这个静态控件没什么用。加入两编辑控件(如果控件多的话最好改成一个容易理解的ID),Ctrl+W将两个控件

与两个整形变量m_x,m_y(命名要容易理解)相关联。加一个按钮,ID改为IDC_CHECK,双击它编辑代码。

void CCheckDlg::OnCheck()

{

       UpdateData();

       if(m_y == m_x * m_x)

              MessageBox("你对了");

       else

       {

              m_y = m_x * m_x;

              UpdateData(false);

              MessageBox("根据结果想想");

       }

}

找到构造函数(最好在中OnInitDialog()处理),找到m_x = 0;改成

CTime t=CTime::GetCurrentTime();

       int n=t.GetSecond();

       for(int i=0;i<n;i++)

       m_x = rand()%10;

其实rand并不随机,第一次调用返回值总是相同的,我们可以取当前时间的秒数,来决定调用次数。设置各个控件的Caption,并按上述方法设置焦点,并调整各控件的大小。

   控件显示的值与控件相关联的数(成员变量)的值不是同步的,我们必须调用UpDateData();当我们输入了数据,就调用UpdateData(true)来更新成员变量;UpdateData(false)

将成员变量的值显示在屏幕上。CDialogUpDateData()更新所有的控件,如果只想更新一个控件,可以调用控件类的UpDateData().

 

       通用对话框,经常用的是CColorDialog,CFontDialog,CFileDialog,类似于

CColorDialog dlg;

       if(IDOK==dlg.DoModal())

       {

              …dlg.GetColor();

       }

注意CFileDialog dlg(false),表示是另存为对话框,为true表示是打开对话框,第一个参数没有默认值。

 

常用函数:

CDialog::CloseWindow();最小化对话框。

CDialog::DestroyWindow();关闭对话框,OnOk,OnCancel也可以关闭对话框。

CDialog::GetClientRect();获得客户区范围;

CDialog::GetFocus();      获得焦点;

CDialog::GetFont()      获得字体;

CDialog::SetWindowText);设置对话框标题;

CDialog::SetMenu();     设置菜单;

CDialog::SetFocus();     设置焦点;

CDialog::SetFont();      设置字体;

有些东西我们无法在构造函数中进行,如SetTimer,我们可以在OnInitDialog()中进行,或者在WM_SHOWWINDOW的响应函数中进行。

ShowWindow(SW_HIDE);它的参数还可以是:

  • SW_HIDE    SW_MINIMIZE    SW_RESTORE       SW_SHOWMAXIMIZED    SW_SHOWMINIMIZED    SW_SHOWMINNOACTIVE  SW_SHOWNA    SW_SHOWNOACTIVATE  SW_SHOWNORMAL   

 

vc入门宝典(九)

集合类使用心得何志丹MFC提供集合类(Collect)专门负责数据对象的存储和管理,MFC的集合类分为三类,分别用于处理三类不同性质的数据结构:表(List,类似于数据结构的双链表),数组(Array...
  • he_zhidan
  • he_zhidan
  • 2003年07月07日 17:12
  • 2340

vc入门宝典(十)

消息何志丹PreTranslateMessage函数顾名思义,就是在消息被翻译之前,做的一些事.我们可以屏蔽一个键或一个命令.下面是一些常用消息的相关信息.这些信息放pMsg中.WM_KEYDOWN ...
  • he_zhidan
  • he_zhidan
  • 2003年07月08日 12:55
  • 1722

VC入门宝典

VC入门宝典 何志丹 『针对对象』想学VC,而不会VC的朋友.如果你刚学VC,可以看一下本系列的其他文章. 『摘要』1,建立最简单的VC程序2,Debug和release的区别及切换方式3,如何备份V...
  • he_zhidan
  • he_zhidan
  • 2003年07月07日 13:38
  • 12906

入门区块链必读的宝典

入门区块链必读的宝典 区块链是什么?     “区块链”技术最初是由一位化名中本聪的人为比特币(一种数字货币)而设计出的一种特殊的数据库技术,它基于密码学中的椭圆曲线数字签名算法(EC...
  • huangshulang1234
  • huangshulang1234
  • 2018年01月20日 09:59
  • 97

VC++ 读取和保存文件对话框及默认目录

From: http://blog.csdn.net/miaoshengwu/article/details/1627283 void Openfile() { // TODO: Add ...
  • JoeBlackzqq
  • JoeBlackzqq
  • 2012年08月22日 20:28
  • 3873

VC++中打开文件对话框和保存文件对话框

CString filePath; char szFilter[] = {"All Files(*.*)|*.*||"}; CFileDialog dlg(TRUE,NULL,NULL,OFN...
  • tanyouliang
  • tanyouliang
  • 2012年04月08日 18:47
  • 8599

VC多对话框界面程序,界面之间的切换问题

void CDlgTopDlg::OnButton1() { // TODO: Add your control notification handler code here // ShowW...
  • yanhc519
  • yanhc519
  • 2012年10月07日 19:10
  • 2845

VC如何让对话框一显示就最大化

VC如何让对话框一显示就最大化方法一:在OnInitDialog()函数中 ShowWindow(SW_SHOWMAXIMIZED); 初始化的时候方法二:当然,你可以获取屏幕大小,然后设置窗口位...
  • u011100345
  • u011100345
  • 2016年10月08日 13:42
  • 655

VC++实现文件选择对话框 及目录

VC++实现文件选择对话框 及目录   2010-04-26 22:19:49|  分类: 默认分类 |  标签: |字号大中小 订阅 char Filter[]=...
  • elcoteq983
  • elcoteq983
  • 2012年02月15日 14:35
  • 5565

【VC】DLL文件中添加对话框资源。。

创建“MFC DLL”工程,工程命CTestDll,接下来选择“使用 MFC DLL 共享 DLL”,点击“完成”。 资源工程中,从菜单中选择Insert->Resource,添加“Dialog”,...
  • shen_wei
  • shen_wei
  • 2013年07月02日 15:12
  • 1813
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vc入门宝典五(对话框)
举报原因:
原因补充:

(最多只允许输入30个字)