zoukankan      html  css  js  c++  java
  • 对话框

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

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

    3,  实例

    4,  通用对话框

    5,  常用函数

     

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

     

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

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

    void CDialogDlg::OnButton1()

    {

           COwnerDialog dlg;

           dlg.DoModal();

    }

    不要忘了#i nclude "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 
  • 相关阅读:
    jQuery上传插件Uploadify使用详解
    SQL之case when then用法
    myeclipse 上安装 Maven
    ps 简介
    Linux 查看进程和删除进程
    EL表达<%@page isELIgnored="false"%>问题
    刷新本地的DNS缓存
    IDEA中 @override报错的处理步骤
    Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file
    jsp中${param.user}不解析,原样输出。
  • 原文地址:https://www.cnblogs.com/ahuo/p/631130.html
Copyright © 2011-2022 走看看