精华内容
下载资源
问答
  • 在通用对话框控件建立打开
    千次阅读
    2021-12-06 20:35:29

    一、实验目的:

    1、 熟悉 Windows 对话框应用程序开发的基本过程;

    2、 学习标准控件的使用;

    3、 学些 CommonDialog ActiveX 控件的使用;

    4、 练习较复杂的交互式操作的控制流程;

    5、 练习文件输入/输出流的使用。

    二、实验内容

    实现一个具有一定实用价值的通讯录程序设计。界面如图所示

    三、 实验主要原理说明

    ①界面的基本设计

    1. 开发windows应用程序,往往是从界面开发开始。在资源视图中把对话框调出,把对话框中自带的控件删掉,放入自己所需要的控件。

    2. 先设立两个组合框Group Box(Group Box组合框会将组合框内的控件标识为一组控件来使用:只能选择其中的一个控件),将两个组合框属性中的描述文字分别改为:联系人、地址簿,便于用户区分。在联系人组合框中放入两组Static Text和Eidt Control分别表示姓名和电话号码,并再放一组Static Text和Combo Box(组合框控件:由一个文本输入控件和一个下拉菜单组成。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里输入文本。)表示用户可以选择的群组。Ctrl选中联系人里面的控件进行位置调整。

    3. 在对话框中放入六个Button控件,Ctrl选中这六个控件进行位置调整,并在属性中对这六个按钮的描述文字依次改成载入、保存、退出、新建、更新、删除,供用户进行使用。

    4. 在地址簿这个组合框中放入List Control控件(相当于一个表格),调整大小,在该控件的属性栏中,单选设置为True(表示用户只能选择该列表的一个元素)、视图设为Report(以报表的形式呈现给用户)、文本右对齐设为True、始终显示选定的内容设置为True、

    5. 为所有用户需要的控件进行ID修改,以便后面类向导给控件绑定变量时进行区分:

      控件ID
      姓名Edit ControlIDC_EDITNAME
      号码Edit ControlIDC_EDITNUMBER
      群组Combo BoxIDC_COMBOGROUP
      载入ButtonIDC_BUTTONLOAD
      保存 ButtonIDC_BUTTONSAVE
      退出 ButtonIDC_BUTTONEXIT
      新建 ButtonIDC_BUTTONNEW
      更新 ButtonIDC_BUTTONUPDATA
      删除 ButtonIDC_BUTTONDELETE
      地址簿List ControlIDC_LISTCONTROL
    6. 插入ActiveX控件:Microsoft Common Dialog Control version6.0(这是一个共用控件,可以调用字体格式选择对话框,打开文件对话框,打印对话框,保存对话框,颜色选择框),该对话框对于用户来说是不可见的。在属性一栏中,将Filter设置为:文本文件(.txt)|.txt|所有文件(.)|.* 。下表是通用对话框的使用方法:

      *方法**所显示的对话框*
      *ShowOpen*显示“打开”对话框
      *ShowSave*显示“另存为”对话框
      *ShowColor*显示“颜色”对话框
      *ShowFont*显示“字体”对话框
      *ShowPrinter*显示“打印”或“打印选项”对话框
      *ShowHelp*调用 Windows 帮助引擎
    7. 打开类向导,添加成员变量

      控件ID控件类型类别名称访问变量类型
      IDC_COMBOGROUPCOMBOBOXm_sGrouppublicCString
      IDC_COMBOGROUPCOMBOBOX控件m_ComboGrouppublicCComboBox
      IDC_COMMONDIALOG1OCX控件FileDialogpublicCOMMONDIALOG1
      IDC_EDITNAMEEDITm_sNamepubilcCString
      IDC_EDITNAMEEDIT控件m_EditNamepublicCEdit
      IDC_EDITNUMBEREDITm_sNumberpublicCString
      IDC_LISTCONTROLSysListView32控件m_ListControlpublicCListCtrl

      CString、CComboBox、COMMONDIALOG1、CEdit、CString、CListCtrl这些变量类型都是MFC已经封装好的类,里面有对应的方法可以使用、查看。添加完这些成员变量之后,我们的项目中会有三个类被创建:COMMONDIALOG1、CExperiment3App、CExperiment3Dlg。界面的设计基本已经完成

    ②类的基本设计

    1. 将实验一中的代码拷贝到现在的项目中,进行复用(在头文件中添加address.h 在源文件中添加addresss.cpp)。

    2. 在Experiment3Dlg.h中添加头文件address.h ,即(#include “address.h”) ,并在CExperiment3Dlg.cpp、addressbook.cpp中添加头文件pch.h。(在MFC项目中所有的源文件前都必须含有pch.h这个头文件)

    3. 在Experiment3Dlg.h中除了之前用类向导添加的变量,另外添加AddressBook的实例book。

    4. 给用户操作的按钮:载入、保存、新建、更新、删除 都需要有对应的方法来对数据进行操作。另外,需要一个辅助函数对数据进行刷新。可以右键类Addressbook,选中添加函数,可快速添加函数。

      方法对应的按钮函数名返回类型访问.cpp文件参数
      载入LoadFilevoidpublicAddressbook.cppCString Filename
      保存SaveFilevoidpublicAddressbook.cppCString Filename
      新建AddContactvoidpublicAddressbook.cppstring
      更新UpdatevoidpublicAddressbook.cppInt nstring namestring numberstring group
      删除DeletevoidpublicAddressbook.cppInt n
      辅助函数RefreshDatavoidpublicAddressbook.cppbool fromDlgToVector

      但这样操作也会产生相对应的问题:

      如果Addressbook中存在名称为Delete的函数,即使我们添加的函数返回值和传入参数不一样,也不能添加名称为Delete的函数。需要自己手动添加。

      Tip:由于涉及到读入文件,记得在源文件前加入fstream文件流(#include “fstream”)

      对应的函数代码如下:

      载入按钮:

      void AddressBook::LoadFile(CString Filename)
      {
          // TODO: 在此处添加实现代码.
          ifstream inputFile;
          string Name, Number, Group;
          try
          {
              inputFile.open(Filename);
              Book.clear();
      ​
              while (!inputFile.eof())
              {
                  inputFile >> Name >> Number >> Group;
                  AddContact(Name, Number, Group);
              }
          }
          catch (exception& e)
          {
              throw(e);
          }
      }

      保存按钮:

      void AddressBook::SaveFile(CString Filename)
      {
          // TODO: 在此处添加实现代码.
          ofstream outputFile;
          string Name, Number, Group;
          try
          {
              outputFile.open(Filename);
              int Count = Book.size();
              for (int index = 0 ; index < Count; index++)
              {
                  if (index > 0)
                      outputFile << endl;
                  Book[index].getContact(Name, Number, Group);
                  outputFile << Name << " " << Number << " " << Group;
              }
          }
          catch (exception& e)
          {
              throw(e);
          }
      }

      删除按钮:

      void AddressBook::Delete(int n)
      {
          if (n >= 0 && n < Book.size())
          {
              vector<CContact>::iterator pos = Book.begin() +n ;
              Book.erase(pos);
          }
      }
      ​
      更新按钮:
      
      void AddressBook::Update(int n, string name, string number, string group)
      {
          if (n >= 0 && n < Book.size())
          {
              Book[n].setContact(name,number,group);
          }
      }

    ③事件的基本设计

    所谓事件设计,就相当于是界面设计(呈现给用户的操作方式)和类设计(对于数据的操作)中间的桥梁。

    1. 初始化过程

      1). 对于地址簿(List Control)的初始化

      地址簿对应的变量名为m_ListControl,变量类型为CListCtrl.

      (CListCtrl是列表控件类,列表控件的每一行叫做一个item,每一列叫做一个subitem。每一行和每一列都有个ID号,可以确定唯一的单元格。)

      该类中具有两个构建列表的方法:

      m_pListCtrl->InsertColumn(0,"第一列");

      列索引从0开始,InsertColumn函数将在列表中建立一个列,如果数据有三列,就调用三次此函数,索引分别是0,1,2。

      m_pListCtrl->InsertItem(0,"第一行");

      行索引从0开始,InsertColumn函数将在列表中建立一个行,如果数据有三行,就调用三次此函数,索引分别是0,1,2。

      这里我们的初始化代码如下:

          m_ListControl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100);
          m_ListControl.InsertColumn(1, _T("电话号码"), LVCFMT_LEFT, 100);
          m_ListControl.InsertColumn(2, _T("群组"), LVCFMT_LEFT, 100);

      2).对于群组进行初始化

      群组对应的控件变量名为m_ComboGroup,变量类型为CComboBox.

      群组对应的值变量名为m_sGroup,变量类型为CString.

      这里我们的初始化代码如下:

      m_ComboGroup.AddString(_T("朋友"));
      
      m_ComboGroup.AddString(_T("同事"));
      
      m_ComboGroup.AddString(_T("家人"));
      
      m_ComboGroup.AddString(_T("同学"));
      
      m_ComboGroup.AddString(_T("网友"));
      
      m_sGroup = _T("朋友");

      _T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式

      3).对于文件的初始化

      FileName = "";

      (涉及到文件,在Experiment3Dlg.h中添加访问对象为pubilc,类型为CString,名称为FileName的变量)

      4).UpdateData(FALSE);

      (UpdateData(TRUE)的作用是将文本框界面值跟新到控件变量;

      UpdateData(FALSE)的作用是将控件变量的值更新到界面中)

    2. 为按钮载入、保存、退出、新建、更新、删除添加事件处理程序

      按钮消息类型函数名
      载入CExperiment3DlgBN_CLICKEDOnBnClickedButtonload
      保存CExperiment3DlgBN_CLICKEDOnBnClickedButtonsave
      退出CExperiment3DlgBN_CLICKEDOnBnClickedButtonexit
      新建CExperiment3DlgBN_CLICKEDOnBnClickedButtonnew
      更新CExperiment3DlgBN_CLICKEDOnBnClickedButtonupdata
      删除CExperiment3DlgBN_CLICKEDOnBnClickedButtondelete

      载入按钮的事件处理程序:

      void CExperiment3Dlg::OnBnClickedButtonload()
      {
          // TODO: 在此添加控件通知处理程序代码
          FileDialog.ShowOpen();
          FileName = FileDialog.get_FileName();
          try
          {
              book.LoadFile(FileName);
              RefreshData(false);
          }
          catch (exception& e)
          {
              MessageBox(CString(e.what()),CString("Warning!"));
          }
      }

      为了方便刷新数据,创建一个RefreshData函数:

      void CExperiment3Dlg::RefreshData(bool fromDlgToBook)
      {
          // TODO: 在此处添加实现代码.
          if (fromDlgToBook)
          {
              int Count = m_ListControl.GetItemCount(); //获取列表框的行数
              CString sName, sNumber, sGroup;
              string name, number, group;
              if (Count > 0)
              {
                  book.clear();
                  for (int index = 0; index < Count; index++)
                  {
                      sName = m_ListControl.GetItemText(index, 0);
                      sNumber = m_ListControl.GetItemText(index, 1);
                      sGroup = m_ListControl.GetItemText(index, 2);
                      name = string(CW2A(sName.GetString()));
                      number = string(CW2A(sNumber.GetString()));
                      group = string(CW2A(sGroup.GetString()));
                      book.AddContact(name, number, group);
                  }
              }
      ​
          }
          else
          {
              int Count = book.getCount();
              CString sName, sNumber, sGroup;
              string name, number, group;
              if (Count > 0)
              {
                  m_ListControl.DeleteAllItems();
                  for (int index = 0; index < Count; index++)
                  {
                      book[index].getContact(name, number, group);
                      sName = CString(name.c_str());
                      sNumber = CString(number.c_str());
                      sGroup = CString(group.c_str());
                      m_ListControl.InsertItem(index, sName);
                      m_ListControl.SetItemText(index, 1, sNumber);
                      m_ListControl.SetItemText(index, 2, sGroup);
                  }
              }
          }
      }

      如果传入值为True,就把列表框中的数据更新到我们的vector中,如果传入值为False,就把vector中的数据更新到列表框中。

      我们定义的这个函数其实有点类似于MFC自带的UpdateData函数(之前在初始化的时候用过),只不过UpdateData函数实现的是对话框中的数据和控件变量数据之间的更新,而我们这里定义的RefreshData函数,实现的是控件变量和vector容器之间的更新。

      Tip: CW2A 将宽字符集(Unicode)转化为多字符集(ASCII)

      CA2W 将多字符集(ASCII)转化为宽字符集(Unicode)

      为列表添加一个事件处理程序,消息类型为NM_CLICK.表示如果选中地址簿中的一行,可以将该行的数据更新到联系人中给用户看:

      void CExperiment3Dlg::OnNMClickListcontrol(NMHDR* pNMHDR, LRESULT* pResult)
      {
          LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
          // TODO: 在此添加控件通知处理程序代码
          POSITION pos;
          pos = m_ListControl.GetFirstSelectedItemPosition();
          int index = m_ListControl.GetNextSelectedItem(pos);
          if (index >= 0)
          {
              string name, number, group;
              book[index].getContact(name, number, group);
              m_sName = CString(name.c_str());
              //m_sNumber
              m_sNumber = CString(number.c_str());
              m_sGroup = CString(group.c_str());
              UpdateData(FALSE);
          }
          *pResult = 0;
      }

      保存按钮的事件处理程序:

      void CExperiment3Dlg::OnBnClickedButtonsave()
      {
          // TODO: 在此添加控件通知处理程序代码
          if (FileName.IsEmpty())
          {
              FileDialog.ShowSave();
              FileName = FileDialog.get_FileName();
          }
          try
          {
              book.SaveFile(FileName);
          }
          catch (exception& e)
          {
              MessageBox(CString(e.what()), CString("Warning!"));
          }
      }

      新建按钮的事件处理程序:

      void CExperiment3Dlg::OnBnClickedButtonnew()
      {
          // TODO: 在此添加控件通知处理程序代码
          UpdateData(TRUE);
          if (!m_sName.IsEmpty())
          {
              int count = m_ListControl.GetItemCount();
              m_ListControl.InsertItem(count, m_sName);
              m_ListControl.SetItemText(count, 1, m_sNumber);
              m_ListControl.SetItemText(count, 2, m_sGroup);
              string name(CW2A(m_sName.GetString()));
              string number(CW2A(m_sNumber.GetString()));
              string group(CW2A(m_sGroup.GetString()));
              book.AddContact(name, number, group);
              m_sName = "";
              m_sNumber = "";
              m_sGroup = "朋友";
              UpdateData(FALSE);
              m_EditName.SetFocus();
          }
      }

      退出按钮的事件处理程序:

      void CExperiment3Dlg::OnBnClickedButtonexit()
      {
          // TODO: 在此添加控件通知处理程序代码
          OnOK();
      }

      更新按钮的事件处理程序:

      void CExperiment3Dlg::OnBnClickedButtonupdate()
      {
          // TODO: 在此添加控件通知处理程序代码
          UpdateData(TRUE);
          int position(m_ListControl.GetSelectionMark());
          book[position].setContact(string(CW2A(m_sName.GetString())), string(CW2A(m_sNumber.GetString())), string(CW2A(m_sGroup.GetString())));
          RefreshData(FALSE);
      }

      删除按钮的事件处理程序:

      void CExperiment3Dlg::OnBnClickedButtondelete()
      {
          // TODO: 在此添加控件通知处理程序代码
          int position(m_ListControl.GetSelectionMark());
          book.Delete(position);
          m_sName = "";
          m_sNumber = "";
          m_sGroup = "朋友";
          UpdateData(FALSE);
          RefreshData(FALSE);
      }

      排序按钮的事件处理程序:

      void CExperiment3Dlg::OnBnClickedButtonsort()
      {
          book.sort();
          RefreshData(FALSE);
      }

    到这里,该MFC设计基本就结束了

    这本是一篇实验报告,至于为什么产生将它写好并发出来的想法,主要是明白了写实验报告的意义,刚开始跟着老师做完这个实验的时候,对里面的很多东西都是懵的,直到在写实验报告时,才慢慢理解写实验报告的目的其实就是内化这个项目里面所涉及到的知识的过程。也逐渐明白为什么会有那么多人在CSDN上发博客,一方面是内化自己所学的东西,一方面也是为了给那些正在学的人提供帮助。之前也有在学python的Django框架,但学的过程中很多地方不理解,就没有再学下去了。现在也知道以后该怎么去学习做一个项目,等有空一定要把Django拿下,也希望自己的这篇文章能给有需要的人提供力所能及的帮助。

    更多相关内容
  • 3.VB中可以建立 菜单和 菜单...为了把通用对话框控件加到工具箱中应工程菜单中选择部件命令弹出部件对话框部件对话框的控件选项卡中选择 2.建立打开文件保存文件颜色字体和打印对话框所使用的方法分别为 Showopen
  • 调用通用对话框控件的Showopen方法,能够直接打开在该通用对话框中指定的文件 D.调用通用对话框控件的ShowColor方法,可以打开颜色对话框窗口 35.设在工程文件中有一个标准模块,其中定义了下列记录类型: Type ...

    b698fa289b6847d44d16d998e02353e5.png

    无忧考网为大家收集整理了《2014年计算机二级考试VB专家预测试卷》供大家参考,希望对大家有所帮助!!!

    1.下列叙述中正确的是( )。

    A.栈是“先进先出”的线性表

    B.队列是“先进后出”的线性表

    C.循环队列是非线性结构

    D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构

    2.支持子程序调用的数据结构是( )。

    A.栈

    B.树

    C.队列

    D.二叉树

    3.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是( )。

    A.10

    B.8

    C.6

    D.4

    4.下列排序方法中,最坏情况下比较次数最少的是( )。

    A.冒泡排序

    B.简单选择排序

    C.直接插入排序

    D.堆排序

    5.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下列属于应用软件的是( )。

    A.编译程序

    B.操作系统

    C.教务管理系统

    D.汇编程序

    6.下列叙述中错误的是( )。

    A.软件测试的目的是发现错误并改正错误

    B.对被调试的程序进行“错误定位”是程序调试的必要步骤

    C.程序调试通常也称为Debug

    D.软件测试应严格执行测试计划,排除测试的随意性

    7.耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是( )。

    A.提高耦合性降低内聚性有利于提高模块的独立性

    B.降低耦合性提高内聚性有利于提高模块的独立性

    C.耦合性是指一个模块内部各个元素问彼此结合的紧密程度

    D.内聚性是指模块间互相连接的紧密程度

    8.数据库应用系统中的核心问题是( )。

    A.数据库设计

    B.数据库系统设计

    C.数据库维护

    D.数据库管理员培训

    9.有两个关系R,S如下:

    由关系R通过运算得到关系S,则所使用的运算为( )。

    A.选择

    B.投影

    C.插入

    D.连接

    10.将E—R图转换为关系模式时,实体和联系都可以表示为( )。

    A.属性

    B.键

    C.关系

    D.域

    11.执行语句Dim X,Y As Integer后,( )。

    A.X和Y均被定义为整型变量

    B.X和Y均被定义为变体类型变量

    C.X被定义为整型变量,Y被定义为变体类型变量

    D.X被定义为变体类型变量,Y被定义为整型变量

    12.下列关系表达式中,其值为True的是( )。

    A."XYZ">"XYz"

    B."VisualBasic"<>"visualbasic"

    C."the"="there"

    D."Integer"  13.执行下列程序段

    a$="visual Basic Programming"

    b$="C++"

    C$=UCase(Left$(a$,7))&b$&Right$(a$,1 2)

    后,变量c$的值为( )。

    A.Visual BASIC Programming

    B.VISUAL C++Programming

    C.Visual C++Programming

    D.VISUAL BASIC Programming

    14.下列叙述中正确的是( )。

    A.MsgBox语句的返回值是一个整数

    B.执行MsgBox,语句并出现信息框后,不用关闭信息框即可执行其他操作

    C.MsgBox语句的第一个参数不能省略

    D.如果省略MsgBox语句的第三个参数(Title),则信息框的标题为空

    15.在窗体上画一个文本框(名称为Text1)和一个标签(名称为Labe11),程序运行后,在文本框中每输入一个字符,都会立即在标签中显示文本框中字符的个数。下列可以实现上述操作的事件过程是( )。

    A.Private Sub Text1 Change()

    Labe11.Caption=Str(Len(Text1.Text))

    End Sub

    B.Private Sub Text1 Click()

    Labe11.Caption=str(Len(Text1.Text))

    End Sub

    C.Private Sub Text1 Change()

    Labe11.Caption=Text1.Text

    End Sub

    D.Private Sub Labe1 1_Change()

    Labe11.Caption=Str(Len(Text1.Text))

    End Sub

    16.在窗体上画两个单选按钮(名称分别为Option1、Option2,标题分别为“微软雅黑”和“黑

    体”)、1个复选框(名称为Check1,标题为“粗体”)和1个文本框(名称为Text1,Text属性为“改变文字字体”),窗体外观如下图所示。程序运行后,要求“微软雅黑”单选钮和“粗体”复选框被选中,则下列能够实现上述操作的语句序列是( )。

    A.Option1.Valve=False

    Checkl.Vaim=True

    B.Option1.Value=True

    Check1.Value=0

    C.Olption2.Value=False

    Check1.Value=2

    D.Option1.Value=True

    Check1.Value=1

    17.在窗体上画一个名称为Command1的命令按钮,然后编写下列事件过程:

    Private Sub Command1Click()

    C=1234

    c1=Trim(Str(c))

    For i=1 To 4

    Print

    Next

    End Sub

    程序运行后,单击命令按钮,要求在窗体上显示下列内容:1

    12

    123

    1234

    则在横线处应填入的内容为( )。

    A.Right(c1,i)

    B.Left(c1,i)

    C.Mid(c1,i,1)

    D.Mid(c1,i,i)

    18.假定有下列程序段

    For i=1 TO 3

    For j=5 TO 1 Step-1

    Print i*j

    Next j

    Next i

    则语句Print i*j的执行次数是( )。

    A.15

    B.16

    C.17

    D.18

    19.在窗体上画两个文本框(名称分别为Text1和Text2)和一个命令按钮(名称为Command1),然后编写下列事件过程:

    Private Sub Command1 Click()

    x=0

    DO While x<50

    x=(x+2)*(x4.3)

    n=n+1

    Loop

    Text1.Text=Str(n)

    Text2.Text=Str(x)

    End Sub

    程序运行后,单击命令按钮,在两个文本框中显示的值分别为( )。

    A.1和0

    B.2和72

    C.3和50

    D.4和168

    20.阅读程序:

    Private Sub Form Click()

    a=0

    For j=1 To 15

    a=a+j Mod 3

    Next j

    Print a

    End Sub

    程序运行后,单击窗体,输出结果是( )。

    A.105

    B.1

    C.120

    D.15

    21.下列说法中正确的是( )。

    A.当焦点在某个控件上时,按下一个字母键,就会执行该控件的KeyPress事件过程

    B.因为窗体不接受焦点,所以窗体不存在自己的KeyPress事件过程

    C.若按下的键相同,KeyPress事件过程中的KeyAscii参数与KeyDown事件过程中的KeyCode参数的值也相同

    D.在KeyPress事件过程中,KeyAscii参数可以省略

    22.语句Dim a(-3 To 4,3 To 6)As Integer定义的数组元素个数是( )。

    A.18

    B.28

    C.21

    D.32

    23.在窗体上画一个命令按钮,其名称为Command1,然后编写下列代码:

    Option Base l

    Private Sub Command1 Click()

    Dim a

    a=Array(1,2,3,4)

    j=1

    For i=4 To 1 Step-1

    s=s+a(i)*j

    j=j*10

    Next i

    Print S

    End Sub

    程序运行后,单击命令按钮,其输出结果是( )。

    A.4321

    B.1234

    C.34

    D.12

    24.假定通过复制、粘贴操作建立了一个命令按钮数组Command1,下列说法中错误自是( )。

    A.数组中每个命令按钮的名称(Name属性)均为Command1

    B.若未做修改,数组中每个命令按钮的大小都一样

    C.数组中各个命令按钮使用同一个Click事件过程

    D.数组中每个命令按钮的Index属性值都相同

    25.在窗体上画一个命令按钮,名称为Command1,然后编写下列代码:

    Option Base 0

    Private Sub Command1 Click()

    Dim A1(4)As Integer,A2(4)As Integer

    For k=0 To 2

    A1(k+1)=InputBox(”请输入一个整数”)

    A2(3-k)=A1(k+1)

    Next k

    Print A2(k)

    End Sub

    程序运行后,单击命令按钮,在输入对话框中依次输入2、4、6,则输出结果为( )。

    A.0

    B.1

    C.2

    D.3

    26.下列关于函数过程的叙述中,正确的是( )。

    A.函数过程形参的类型与函数返回值的类型没有关系

    B.在函数过程中,过程的返回值可以有多个

    C.当数组作为函数过程的参数时,既能以传值方式传递,也能以传址方式传递

    D.如果不指明函数过程参数的类型,则该参数没有数据类型

    27.在窗体上画两个标签和一个命令按钮,其名称分别为Label1、Label2和Command1,然后编写下列程序:

    Private Sub rune(L AS Labe1)

    L.Caption="1234"

    End Sub

    Private Sub Form Load()

    Labe11.Caption="ABCDE"

    Labe12.Caption=10

    End Sub

    Private Sub Command1Click()

    a=Va1(Label2.Caption)

    Call func(Label1)

    Label2.Caption a

    End Sub

    程序运行后,单击命令按钮,则在两个标签中显示的内容分别为( )。

    A.ABCD和10 B.1234和100

    C.ABCD和100 D.1234和10

    28.在窗体上画一个命令按钮(名称为Command1),并编写下列代码:

    Function Fun1(ByVa1 a As Integer,b As Integer)As Integer

    Dim t As Integer

    t=a-b

    b=t+a

    Fun1=t+b

    End Function

    Private Sub Command1Click()

    Dim X As Integer

    x=10

    Print Fun1(Vun1(X,(Fun1(x,x-1))),x-1)

    End Sub

    程序运行后,单击命令按钮,输出结果是( )。

    A.10

    B.0

    C.11

    D.21

    29.下列关于过程及过程参数的描述中,错误的是( )。

    A.过程的参数可以是控件名称

    B.调用过程时使用的实参的个数应与过程形参的个数相同

    C.只有函数过程能够将过程中处理的信息返回到调用程序中

    D.窗体可以作为过程的参数

    30.设有下列通用过程:

    Public Function Fun(xStr As String)As String

    Dim tStr As String,strL As Integer

    tStr=""

    strL=Len(xStr)

    i=strL/2

    DO While i<=StrL

    tStr=tStr&Mid(xStr,i+1,1)

    i=i+1

    Loop

    Fun=tStr&tStr

    End Function

    在窗体上画一个名称为Textl的文本框和一个名称为Command1的命令按钮。然后编写下列的事件过程:

    Private Sub Commandl Click()

    Dim S1 As String

    S1="ABCDEF"

    Text1.Text=LCase(Fun(S1))

    End Sub

    程序运行后,单击命令按钮,文本框中显示的是( )。

    A.ABCDEF

    B.abedef

    C.defdef

    D.defabc

    31.在窗体上画一个命令按钮和一个文本框(名称分别为Command1和Text1),并把窗体的KeyPreview属性设置为True,然后编写下列代码:

    Dim SaveAll As String

    Private Sub Form Load()

    Show

    Text1.Text=""

    Text1.SetFocus

    End Sub

    Private Sub Command1 Click()

    Text1.Text=LCase(SaveAll)+SaveAll

    End Sub

    Private Sub Form KeyPress(KeyAscii As Integer)

    SaveAll=SaveAll+Chr(KeyAscii)

    End Sub

    程序运行后,直接用键盘输入VB,再单击命令按钮,则文本框中显示的内容为( )。

    A.vbVB

    B.不显示任何信息

    C.VB

    D.出错

    32.设有下列程序

    Private Sub Form Click()

    X=50

    For i=1 T0 4

    y=InputBox("请输入一个整数")

    y=Val(v)

    If y Mod 5=0 Then

    a=a+y

    x=y

    Else

    a=a+x

    End If

    Next i

    Print a

    End Sub

    程序运行后,单击窗体,在输入对话框中依次输入15、24、35、46,输出结果为( )。

    A.100

    B.50

    C.120

    D.70

    33.下列关于菜单的叙述中,错误的是( )。

    A.当窗体为活动窗体时,用键可以打开菜单编辑器

    B.把菜单项的Enabled属性设置为False,则可删除该菜单项

    C.弹出式菜单在菜单编辑器中设计

    D.程序运行时。利用控件数组可以实现菜单项的增加或减少

    34.下列叙述中错误的是( )。

    A.在程序运行时,通用对话框控件是不可见的

    B.调用同一个通用对话框控件的不同方法(如ShowOpen或ShowSave),可以打开不同的对话框窗口

    C.调用通用对话框控件的Showopen方法,能够直接打开在该通用对话框中指定的文件

    D.调用通用对话框控件的ShowColor方法,可以打开颜色对话框窗口

    35.设在工程文件中有一个标准模块,其中定义了下列记录类型:

    Type Books

    Name As String*10

    TelNum As String*20

    End,Type

    在窗体上画一个名为Command1的命令按钮,要求当执行事件过程Command1 Click 时,在顺序文件Person.txt中写入一条Books类型的记录。下列能够完成该操作的事件过程是

    ( )。

    A. Private Sub Command1 Click()

    Dim B AS Books

    Open"Person txt"For Output As#1

    B.Name=InputBox(”输入姓名”)

    B.relNum=lnputBox(”输入电话号码”)

    Wlite#1 B Name,B TelNum

    Ch,se#1

    End Sub

    B. Private Sub Command1 Click()

    Dim B AS Books

    Open"Person txt"For Input As#1

    B.Name=InputBox("输入姓名")

    B.TelNum=InputBox("输入电话号码")

    Print#1,B.Name,B.TelNam

    Close#1

    End Sub

    C. Private Sub Command1 Click()

    Dim BAS Books

    Open"Person txt"For Output As#1

    B.Name=InputBox("输入姓名")

    B.TelNum=InputBox("输入电话号码")

    Write#1,B

    Close#1

    End Sub

    D.Private Sub Commandl Click()

    Open"Person txt"For Input As#1

    Name=lnputBox("输入姓名")

    TelNum=lnputBox("输入电话号码")

    Prim#1 Name TelNum

    Close#1

    End Sub

    36.窗体上有一个名称为Command1的命令按钮,其单击事件过程及有关函数过程如下:

    Private Sub Command1 Click()

    Dim n As Integer

    n=add(5,10)

    Print n

    End Sub

    Function add(v1 As Integer,v2 As Integer,Optiona1 v3)As Integer

    If Not IsMissing(v3)Then

    add=v1+v2+v3

    Else

    add=v1+v2

    End If

    End Function

    运行程序,单击命令按钮,以下叙述中正确的是( )。

    A.程序不能正常运行,因为函数add的参数定义有错

    B.程序不能正常运行,因为函数定义与函数调用语句的参数个数不匹配

    C.程序能正常运行,结果是在窗体上显示15

    D.程序能正常运行,结果是在窗体上显示510v3

    37.目录列表框Path属性所表示的含义是( )。

    A.当前驱动器或指定驱动器上的路径

    B.当前驱动器或指定驱动器上的某目录下的文件列表

    C.根目录下的文件列表

    D.指定路径下的文件列表

    38.以下关于函数过程的叙述中错误的是( )。

    A.函数过程一定有返回值

    B.函数过程一定有参数

    C.函数过程可以在窗体模块和标准模块中定义

    D.函数过程参数的类型与返回值的类型无关

    39.在窗体上画一个名称为Command1的命令按钮,然后编写如下程序:

    Public Enum S

    a=4

    b=3

    End Enum

    Private Sub Command1 Click()

    Dim x As Integer

    x=a

    If x>=3 Then MsgBox"Pass!"

    End Sub

    运行程序,其结果是( )。

    A.运行错误.因为Enum定义有错

    B.运行错误.因为x=a类型不匹配

    C.运行正常结束,不显示任何信息

    D.运行正常.显示内容为“Pass!”的信息框

    40.设有如下程序:

    Option Base 1

    Private Sub Form Click()

    Dim a(5)As String,i As Integer

    For i=1 To 5

    a(i)=Chr(Asc("A")+i)

    Call f(a,i)

    Next i

    End Sub

    Sub f(ta()As String,n As.Integer)

    Dim i As Integer

    For i=1 To n

    Print ta(i);

    Next i

    Print

    End Sub

    对上述程序.以下叙述中正确的是( )。

    A.程序有错,因为在过程f的定义中数组参数格式不正确

    B.程序可正常运行,输出内容的第一行是一个字母“A”

    C.程序可正常运行,输出内容的第一行是一个字母“B”

    D.程序可正常运行,输出内容的第一行是数字65

    2829f2ca24f0d0090cbba57f30759f23.png

    2014年计算机二级考试VB专家预测试卷.doc

    下载Word文档到电脑,方便收藏和打印[全文共7390字]

    编辑推荐:

    8b95f2eb3d3f7ce4dc3bf1178c74941e.png

    8b95f2eb3d3f7ce4dc3bf1178c74941e.png

    8b95f2eb3d3f7ce4dc3bf1178c74941e.png

    8b95f2eb3d3f7ce4dc3bf1178c74941e.png

    8b95f2eb3d3f7ce4dc3bf1178c74941e.png

    下载Word文档

    展开全文
  • WIN32汇编语言之通用对话框的使用

    千次阅读 2016-04-22 11:54:27
    以前学习过自定义的对话框,属性需要自己定义,包括边框,标题,模态与非模态等等,如果创建模态对话框(windows为它内建...因此当你用到相关的通用对话框的时候,需要程序的开头写上相关的声明:include comdlg32.in

    以前学习过自定义的对话框,属性需要自己定义,包括边框,标题,模态与非模态等等,如果创建模态对话框(windows为它内建的消息循环),你不用再去自己写消息循环与注册窗口和显示窗口这几个部分,可以很好的偷懒,这次要介绍的是WINDOWS已经建立好的对话框(已经写好在Comdlg32.dll中),因此当你用到相关的通用对话框的时候,需要在程序的开头写上相关的声明:include comdlg32.inc  与includelib  comdlg32.lib

    每当我们使用windows操作系统的时候,当你使用画图工具的时候,你选择“选择颜色”属性的时候,就会跳出一个标题为颜色的对话框ChooseColor(刚开始对于这个对话框我有一个疑问就是能不能把这个对话框的标题改为自己定义的字符串,仔细查看每个通用对话框相应的结构才发现只有“打开”和“另存为”  两个通用对话框的相关的结构中包含对话框的标题lpstrtitle  这个元素,而其他的几个通用对话框相应的结构中并没有哪一项涉及到修改对话框的标题的元素,对于这个问题现在还是很疑惑希望了解的人给与评论),这个对话框就是系统的通用对话框;当你使用QQ截图的时候你选择另存为这个选项的时候,就会弹出一个标题为"另存为"的通用对话框GetSaveFileName(这个标题是可以自己定义的),当你新建一个文本文档需要打开一个以前写好的文本的时候,就会弹出一个标题为“打开”的通用对话框GetOpenFileName(这个通用对话框的标题也是可以修改的),当你在一个文本文档里面选择“格式”--“字体”选项的时候会弹出一个标题为“字体”的通用对话框ChooseFont,用来选择需要选择的字体和字体的大小。同样还有“页面设置”这个通用对话框PageSetupDlg,“查找字符串”的通用对话框FindText      “替换字
    符串”的通用对话框ReplaceText。其中每一个通用对话框都对应一个相关的数据结构,用来对对话框的一些属性值进行设置,每个对话框的名字和相应的函数以及相应的结构如下表:

    通用对话框
    通用对话框使用的函数使用的数据结构
    选择颜色ChooseColor()CHOOSECOLOR
    打开文件GetOpenFileName()OPENFILENAME
    保存文件GetSaveFileName()OPENFILENAME
    页面设置PageSetupDlg()PAGESETUPDLG
    选择字体ChooseFont()CHOOSEFONT
    查找字符串FindText()FINDREPLACE
    替换字符串ReplaceText()FINDREPLACE


    介绍完了通用对画框的基本内容,下面来看一下资源文件的建立:资源文件需要三个部分

    首先是最简单的程序图标文件,为了简单,我建立的是一个加粗了的“2”(IDI_ICON1),关于图标,有一个问题:因为创建的是模态对话框(DialogboxParam),不需要再去注册窗口类,写消息循环,显示窗口这几步操作,所以加载图标不需要写出来,windows自己会加载资源图标,对于这个问题当时也是很纠结,图标文件在资源文件定义的时候并没有被选择加入到对话框资源中,菜单是被选择加入到对话框的,它可以附带着对话框的的过程被载入到程序中,但是这个图标并没有相关的操作,我自己理解为是windows自己加载的,(还请了解的指点)

    下面看一下资源脚本代码:

    // Generated by ResEdit 1.6.6
    // Copyright (C) 2006-2015
    // http://www.resedit.net
    #include <windows.h>
    #include <commctrl.h>
    #include <richedit.h>
    #include "resource.h"
    //
    // Menu resources
    //
    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    IDR_MENU1 MENU
    {
        POPUP "文件(&F)"
        {
            MENUITEM "打开文件(&O)", IDM_OPEN
            MENUITEM "文件另存为(&C)", IDM_SAVEAS
            MENUITEM SEPARATOR
            MENUITEM "页面设置(&P)", IDM_PAGESETUP
            MENUITEM SEPARATOR
            MENUITEM "退出(&X)", IDM_EXIT
        }
        POPUP "查看"
        {
            MENUITEM "查找字符串(&S)", IDM_FIND
            MENUITEM "替换字符串(&R)", IDM_REPLACE
            MENUITEM SEPARATOR
            MENUITEM "选择字体(&F)", IDM_SELFONT
            MENUITEM "选择颜色(&B)", IDM_SELCOLOR
        }
    }
    //
    // Dialog resources
    //
    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    IDD_DIALOG1 DIALOG 0, 0, 186, 95
    STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
    EXSTYLE WS_EX_STATICEDGE
    CAPTION "通用对话框示例"
    MENU IDR_MENU1
    FONT 8, "Ms Shell Dlg"
    {
    }
    //
    // Icon resources
    //
    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    IDI_ICON1          ICON           "icon2.ico"


    这次资源文件代码也挺短的,参数都占了一大堆,编译就不说了,都很熟悉了。


    下面来看一下实现程序的功能代码的一些疑问

    首先第一个问题:看下程序中这几句代码,用意就是利用wsprintf()函数将数值或者字符按指定的格式翻译成字符串,具体查看该函数的详细用法,太长了,没有出现什么问题就不详细介绍用法了。看代码:这是数据段的一个变量的定义。

    szFormatFont       db'您的选择:',0dh,0ah,'字体名称:%s',0dh,0ah
    db '字体颜色值:%08x,字体大小:%d ',0

    要注意的是“字体大小:%d ',0”这句,意思就是输出整数在这个位置,就是选中字体的大小,但是运行程序后可以发现其实对话框中输出的数值(即选择字体的大小)后面多一个“0”,刚开始很不理解,来看一下选择字体这个通用对话框所对应的数据结构CHOOSEFONT中的iPointSize字段的含义:返回用户选择的字号大小,单位是1/10磅,因此返回的数值等于对话框中选择的字号大小乘以10,刚开始因为不知道字体的大小使用的是什么单位,认为返回的数值和弹出的字体通用对话框中选择的字体大小相等,纠结了许久。关于字体单位大小可以参考一下下面这个表:(这个表我也是在网上看到别人写的写得很好就采用了)



    每一个通用对话框都有相对应的数据结构,每个数据结构中的字段比较多,在书写的时候,很容易出现错误,不仅仅是书写,就像上面这个疑问,就是对某个字段没有理解造成的。其他就没什么错误了,下面来看一下源代码:

                   

     .386
    .model flat, stdcall
    option casemap :none
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ; Include 文件定义
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    include windows.inc
    include user32.inc
    includelib user32.lib
    include kernel32.inc
    includelib kernel32.lib
    include Comdlg32.inc
    includelib Comdlg32.lib
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ; Equ 等值定义
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    IDI_ICON1 equ 110
    IDD_DIALOG1 equ108
    IDR_MENU1 equ 111
    IDM_OPEN equ 100
    IDM_SAVEAS equ101
    IDM_PAGESETUP equ102
    IDM_EXIT equ 103
    IDM_FIND equ 104
    IDM_REPLACE equ105
    IDM_SELFONT equ106
    IDM_SELCOLOR equ107
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ; 数据段
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .data?
    
    
    hInstance dd ?
    hWinMain dd ?
    dwFontColor dd?
    dwBackColor dd?
    dwCustColors dd16 dup (?)
    stLogFont LOGFONT<?>
    szFileName db MAX_PATH dup (?)
    szBuffer db 1024 dup (?)
    ;********************************************************************
    ; 查找替换对话框使用
    ;********************************************************************
    idFindMessage dd?
    stFind FINDREPLACE<?>
    szFindText db 100 dup (?)
    szReplaceText db100 dup (?)
    
    
    .const
    FINDMSGSTRING db'commdlg_FindReplace',0
    szSaveCaption db'请输入保存的文件名',0
    szFormatColor db'您选择的颜色值:%08x',0
    szFormatFont db'您的选择:',0dh,0ah,'字体名称:%s',0dh,0ah
    db '字体颜色值:%08x,字体大小:%d ',0
    szFormatFind db'您按下了“%s”按钮',0dh,0ah,'查找字符串:%s',0dh,0ah
    db '替换字符串:%s',0
    szFormatPrt db'您选择的打印机:%s',0
    szCaption db '执行结果',0
    szFindNext db '查找下一个',0
    szReplace db '替换',0
    szReplaceAll db'全部替换',0
    szFilter db 'Text Files(*.txt)',0,'*.txt',0,'All Files(*.*)',0,'*.*',0,0
    szDefExt db 'txt',0
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ; 代码段
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .code
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ; 页面设置对话框
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    _PageSetup proc
    local @stPS:PAGESETUPDLG
    
    
    invoke RtlZeroMemory,addr @stPS,sizeof @stPS
    mov @stPS.lStructSize,sizeof @stPS
    push hWinMain
    pop @stPS.hwndOwner
    invoke PageSetupDlg,addr @stPS
    .if eax && @stPS.hDevMode
    mov eax,@stPS.hDevMode
    mov eax,[eax]
    invoke wsprintf,addr szBuffer,addr szFormatPrt,eax
    invoke MessageBox,hWinMain,addr szBuffer,addr szCaption,MB_OK
    .endif
    ret
    
    
    _PageSetup endp
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ; 显示“保存文件”对话框
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    _SaveAs proc
    local @stOF:OPENFILENAME
    
    
    invoke RtlZeroMemory,addr @stOF,sizeof @stOF
    mov @stOF.lStructSize,sizeof @stOF
    push hWinMain
    pop @stOF.hwndOwner
    mov @stOF.lpstrFilter,offset szFilter
    mov @stOF.lpstrFile,offset szFileName
    mov @stOF.nMaxFile,MAX_PATH
    mov @stOF.Flags,OFN_PATHMUSTEXIST
    mov @stOF.lpstrDefExt,offset szDefExt
    mov @stOF.lpstrTitle,offset szSaveCaption
    invoke GetSaveFileName,addr @stOF
    .if eax
    invoke MessageBox,hWinMain,addr szFileName,addr szCaption,MB_OK
    .endif
    ret
    
    
    _SaveAs endp
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ; 显示“打开文件”对话框
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    _OpenFile proc
    local @stOF:OPENFILENAME
    
    
    invoke RtlZeroMemory,addr @stOF,sizeof @stOF
    mov @stOF.lStructSize,sizeof @stOF
    push hWinMain
    pop @stOF.hwndOwner
    mov @stOF.lpstrFilter,offset szFilter
    mov @stOF.lpstrFile,offset szFileName
    mov @stOF.nMaxFile,MAX_PATH
    mov @stOF.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
    invoke GetOpenFileName,addr @stOF
    .if eax
    invoke MessageBox,hWinMain,addr szFileName,addr szCaption,MB_OK
    .endif
    ret
    
    
    _OpenFile endp
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ; 选择颜色
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    _ChooseColor proc
    local @stCC:CHOOSECOLOR
    
    
    invoke RtlZeroMemory,addr @stCC,sizeof @stCC
    mov @stCC.lStructSize,sizeof @stCC
    push hWinMain
    pop @stCC.hwndOwner
    push dwBackColor
    pop @stCC.rgbResult
    mov @stCC.Flags,CC_RGBINIT or CC_FULLOPEN
    mov @stCC.lpCustColors,offset dwCustColors
    invoke ChooseColor,addr @stCC
    .if eax
    push @stCC.rgbResult
    pop dwBackColor
    invoke wsprintf,addr szBuffer,addr szFormatColor,dwBackColor
    invoke MessageBox,hWinMain,addr szBuffer,addr szCaption,MB_OK
    .endif
    ret
    
    
    _ChooseColor endp
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ; 选择字体
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    _ChooseFont proc
    local @stCF:CHOOSEFONT
    
    
    invoke RtlZeroMemory,addr @stCF,sizeof @stCF
    mov @stCF.lStructSize,sizeof @stCF
    push hWinMain
    pop @stCF.hwndOwner
    mov @stCF.lpLogFont,offset stLogFont
    push dwFontColor
    pop @stCF.rgbColors
    mov @stCF.Flags,CF_SCREENFONTS or CF_INITTOLOGFONTSTRUCT or CF_EFFECTS
    invoke ChooseFont,addr @stCF
    .if eax
    push @stCF.rgbColors
    pop dwFontColor
    invoke wsprintf,addr szBuffer,addr szFormatFont,addr stLogFont.lfFaceName,\
    dwFontColor,@stCF.iPointSize
    invoke MessageBox,hWinMain,addr szBuffer,addr szCaption,MB_OK
    .endif
    ret
    
    
    _ChooseFont endp
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    _ProcDlgMain procuses ebx edi esi hWnd,wMsg,wParam,lParam
    local @szBuffer[128]:byte
    
    mov eax,wMsg
    .if eax ==WM_CLOSE
    invoke EndDialog,hWnd,NULL
    .elseif eax == WM_INITDIALOG
    ;********************************************************************
    ; 注册“查找”对话框消息,初始化“查找”对话框的结构
    ;********************************************************************
    mov eax,hWnd
    mov hWinMain,eax
    mov stFind.hwndOwner,eax
    mov stFind.lStructSize,sizeof stFind
    mov stFind.Flags,FR_DOWN
    mov stFind.lpstrFindWhat,offset szFindText
    mov stFind.wFindWhatLen,sizeof szFindText
    mov stFind.lpstrReplaceWith,offset szReplaceText
    mov stFind.wReplaceWithLen,sizeof szReplaceText
    invoke RegisterWindowMessage,addr FINDMSGSTRING
    mov idFindMessage,eax
    .elseif eax == WM_COMMAND
    mov eax,wParam
    .if ax ==IDM_EXIT
    invoke EndDialog,hWnd,NULL
    .elseif ax == IDM_OPEN
    invoke _OpenFile
    .elseif ax == IDM_SAVEAS
    invoke _SaveAs
    .elseif ax == IDM_PAGESETUP
    invoke _PageSetup
    .elseif ax == IDM_FIND
    and stFind.Flags,not FR_DIALOGTERM
    invoke FindText,addr stFind
    .elseif ax == IDM_REPLACE
    and stFind.Flags,not FR_DIALOGTERM
    invoke ReplaceText,addr stFind
    .elseif ax == IDM_SELFONT
    invoke _ChooseFont
    .elseif ax == IDM_SELCOLOR
    invoke _ChooseColor
    .endif
    ;********************************************************************
    .elseif eax == idFindMessage
    xor ecx,ecx
    .if stFind.Flags & FR_FINDNEXT
    mov ecx,offset szFindNext
    .elseif stFind.Flags & FR_REPLACE
    mov ecx,offset szReplace
    .elseif stFind.Flags & FR_REPLACEALL
    mov ecx,offset szReplaceAll
    .endif
    .if ecx
    invoke wsprintf,addr szBuffer,addr szFormatFind,\
    ecx,addr szFindText,addr szReplaceText
    invoke MessageBox,hWinMain,addr szBuffer,addr szCaption,MB_OK
    .endif
    ;********************************************************************
    .else
    mov eax,FALSE
    ret
    .endif
    mov eax,TRUE
    ret
    
    
    _ProcDlgMain endp
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    start:
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,offset _ProcDlgMain,NULL
    invoke ExitProcess,NULL
    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    end start



    win32汇编程序总会有许多相似的东西,就就像是一些固定的模板代码总是大同小异。关于源代码不再多赘述,也没什么问题了,下面来介绍一下本次遇到的一些新的API函数,以及新的结构类型:

    结构体:

    FINDREPLACEA           STRUCT
      lStructSize         DWORD   ?     ;结构长度
      hwndOwner           DWORD   ?     ;所属窗口
      hInstance           DWORD   ?     
      Flags               DWORD   ?     ;标志
      LpstrFindWhat       DWORD   ?     ;查找字符串
      lpstrReplaceWith    DWORD   ?     ;替换字符串
      wFindWhatLen        WORD    ?     ;查找字符串长度
      wReplaceWithLen     WORD    ?     ;替换字符串长度
      lCustData           DWORD   ?     
      lpfnHook            DWORD   ?     
      lpTemplateName      DWORD   ?     
    FINDREPLACEA          ENDS
    FINDREPLACE           EQU   <FINDREPLACEA>    
    
    
    
    OPENFILENAMEA         STRUCT
      lStructSize         DWORD  ?       ;结构的长度
      hwndOwner           DWORD  ?       ;所属窗口,可以为NULL
      hInstance           DWORD  ?       ;
      lpstrFilter         DWORD  ?       ;文件筛选字符串
      lpstrCustomFilter   DWORD  ?       
      nMaxCustFilter      DWORD  ?       
      nFilterIndex        DWORD  ?
      lpstrFile           DWORD  ?       ;全路径的文件名缓冲区
      nMaxFile            DWORD  ?       ;文件名缓冲区长度
      lpstrFileTitle      DWORD  ?       ;不包含路径的文件名缓冲区
      nMaxFileTitle       DWORD  ?       ;文件名缓冲区长度
      lpstrInitialDir     DWORD  ?       ;初始目录
      lpstrTitle          DWORD  ?       ;对话框标题
      Flags               DWORD  ?       ;标志
      nFileOffset         WORD   ?       ;文件名在字符串中的起始位置
      nFileExtension      WORD   ?       ;扩展名在字符串中的起始位置
      lpstrDefExt         DWORD  ?       ;默认扩展名
      lCustData           DWORD  ?       ;
      lpfnHook            DWORD  ?       
      lpTemplateName      DWORD  ?     
    OPENFILENAMEA         ENDS
    OPENFILENAME          equ   <OPENFILENAMEA>
    参数介绍:
    折叠lStructSize
    
    
    指定这个结构的大小,以字节为单位。
    
    
    Windows 95/98和Windows NT 4.0:特意为Windows 95/98或Windows NT 4.0,及带有WINVER和_WIN32_WINNT >= 0x0500编译时,为这个成员使用OPENFILENAME_SIZE_VERSION_400。
    
    
    Windows 2000及更高版本:这个参数使用sizeof (OPENFILENAME) 。
    
    
    折叠hwndOwner
    
    
    指向所有者对话框窗口的句柄。这个成员可以是任意有效窗口句柄,或如果对话框没有所有者它可以为NULL。
    
    
    折叠hInstance
    
    
    如果在Flags成员中设置了OFN_ENABLETEMPLATEHANDLE标记,hInstance成员指向包含一个对话框模板的内存对象。如果OFN_ENABLETEMPLATE标记被设置,hInstance是一个指向通过lpTemplateName成员命名的对话框模板的模块。如果两者都没有被设置,这个成员被忽略。
    
    
    如果OFN_EXPLORER标记被设置,系统使用Explorer风格的默认对话框的子窗口作为指定模板来建立一个对话框。如果OFN_EXPLORER标记没有被设置,系统使用模板建立一个旧风格的对话框。
    
    
    折叠lpstrFilter
    
    
    指向一对以空字符结束的过滤字符串的一个缓冲。缓冲中的最后一个字符串必须以两个NULL字符结束。
    
    
    第一个字符串是过滤器描述的显示字符串(例如,"文本文件"),第二个字符指定过滤样式(例如,"*.TXT")。要为一个显示字符串指定多个过滤样式,使用分号(";")分隔样式(例如,"*.TXT;*.DOC;*.BAK")。一个样式字符串中可以包含有效的文件名字字符及星号(*)通配符。不能在样式字符串中包含空格。
    
    
    系统不能改变过滤器的次序。它按lpstrFilter指定的次序显示在文件类型组合框中。
    
    
    如果lpstrFilter是NULL,对话框不能显示任何过滤器。
    
    
    折叠lpstrCustomFilter
    
    
    指向一个静态缓冲,它包含了一对以空字符结束的过滤器字符串,这个字符串是为了保留用户选择的过滤样式。第一个字符串是描述定制过滤器的显示字符串,第二个字符串是被用户选择的过滤器样式。第一次你的应用程序建立对话框,你指定的第一个字符串可以是任何非空的字符串。当用户选择了一个文件时,对话框复制当前过滤样式到第二个字符串。保留过滤样式可以是在lpstrFilter缓冲中指定的样式之一,或是用户输入的过滤器样式。在下一次对话框被建立时系统使用这个字符串去初始化用户自定义的文件过滤器。如果nFilterIndex成员是0,对话框使用定制过滤器。
    
    
    如果这个成员是NULL,对话框不能保留用户自定义过滤器样式。
    
    
    如果这个成员不是NULL,nMaxCustFilter成员的值必须指定以TCHARs为单位的lpstrCustomFilter缓冲的大小。对于ANSI版本,是字节的个数;对于Unicode版本,是字符的个数。
    
    
    折叠nMaxCustFilter
    
    
    指定特意为lpstrCustomFilter准备的以TCHARs为单位的缓冲大小。对于ANSI版本,是字节的个数;对于Unicode版本,是字符的个数。这缓冲应该最小在40个字符长。如果lpstrCustomFilter成员是NULL或是指向NULL的字符串,这个成员被忽略。
    
    
    折叠nFilterIndex
    
    
    指定在文件类型控件中当前选择的过滤器的索引。缓冲指向被lpstrFilter包含的一对定义了的过滤器的字符串。过滤器的第一对字符串的索引值为1,第二对为2,等等。0索引指出是通过lpstrCustomFilter指定的定制过滤器。你可以为对话框指定一个索引作为最初的过滤器描述及过滤器样式。当用户选择了一个文件时,nFilterIndex返回当前显示的过滤器的索引。
    
    
    如果nFilterIndex是0及lpstrCustomFilter是NULL,系统使用在lpstrFilter缓冲中的第一个过滤器。如果所有的三个成员都是0或NULL,系统不使用任何过滤器,在对话框的列表文件中不显示任何文件。
    
    
    折叠lpstrFile
    
    
    指向包含初始化文件名编辑控件使用的文件名的缓冲。如果不需要初始值,这个缓冲的第一个字符必须是NULL。当GetOpenFileName或GetSaveFileName函数返回成功时,这个缓冲包含驱动器,路径,文件名,及所选择的文件的扩展名。
    
    
    如果OFN_ALLOWMULTISELECT标记被设置并且用户选择了多个文件,缓冲包含了当前目录下被选择文件的文件名。对于Explorer风格对话框,目录和文件名字符串是被NULL分开的,在文件名之后有一个额外的NULL。对于旧风格对话框,字符串是被空格分开的并且函数为带有空格的文件名使用短文件名。你可以使用FindFirstFile函数在长短文件名之间转换。如果用户只选择了一个文件,lpstrFile字符串在路径和文件名之间没有分隔。
    
    
    如果缓冲太小,函数返回FALSE并且CommDlgExtendedError函数返回FNERR_BUFFERTOOSMALL.。既然这样,lpstrFile缓冲的首先两个字节包含必需的大小(字节或字符)。
    
    
    折叠nMaxFile
    
    
    指定lpstrFile缓冲的大小,以TCHARs为单位。对于ANSI版本,是字节的个数;对于Unicode版本,是字符的个数。这个缓冲必须足够存储路径和文件名字符串,包含结尾的null字符。如果缓冲太小,GetOpenFileName和GetSaveFileName函数返回假(FALSE)缓冲最小应该在256个字符长。
    
    
    折叠lpstrFileTitle
    
    
    指向接收选择的文件的文件名和扩展名的缓冲(不带路径信息)。这个成员可以是NULL。
    
    
    折叠nMaxFileTitle
    
    
    指定lpstrFileTitle缓冲的大小,以TCHARs为单位。对于ANSI版本,是字节的个数;对于Unicode版本,是字符的个数。如果lpstrFileTitle是NULL,这个成员被忽略。
    
    
    折叠lpstrInitialDir
    
    
    指向以空字符结束的字符串,可以在这个字符串中指定初始目录。Pointer to a null terminated string that can specify the initial directory. 在不同的平台上,为选择初始目录有不同的运算法则。
    
    
    Windows 7:
    
    
    如果lpstrInitialDir与应用程序第一次使用打开或另存为对话框的值相同,路径由用户选择作为初始目录。
    
    
    否则,如果lpstrFile包含路径,路径是初始目录。
    
    
    否则,如果lpstrInitialDir不是NULL,它指定初始目录。
    
    
    如果lpstrInitialDir为NULL,并且当前目录包含有一些指定过滤器类型的文件,初始目录是当前目录。
    
    
    否则,初始目录是当前用户的个人目录(即我的文档)。
    
    
    否则,初始目录是桌面文件夹。
    
    
    Windows 2000:
    
    
    如果lpstrFile包含了一个路径,这个路径就是初始目录。
    
    
    否则,lpstrInitialDir指定的为初始目录。
    
    
    如果lpstrInitialDir为NULL,并且当前目录下包含有一些指定过滤器类型的文件,初始目录就是当前目录。
    
    
    否则,如果应用程序在过去使用过打开哐另存为对话框,使用最近选择的路径作为初始目录。然而,如果一个应用程序长时间没有运行过,它保存的选择的路径将被丢弃。
    
    
    否则,初始目录是当前用户的私人文件目录(即我的文档)。
    
    
    否则,初始目录是桌面文件夹。
    
    
    Windows 98:
    
    
    lpstrInitialDir指定初始目录。
    
    
    如果lpstrInitialDir是NULL并且lpstrFile包含了一个路径,那么这个路径就是初始目录。
    
    
    否则,如果当前目录包含了一些指定的过滤类型的文件,那么初始化目录是当前目录。
    
    
    否则,初始目录是当前用户的私人文件目录(即我的文档)。
    
    
    Windows和Windows NT/ 2000的早期版本:
    
    
    lpstrInitialDir指定初始目录。
    
    
    如果lpstrInitialDir是NULL并且lpstrFile包含了一个路径,那么这个路径就是初始目录。
    
    
    否则,初始目录是当前目录。
    
    
    折叠lpstrTitle
    
    
    指向在对话框的标题栏中放置的字符串。如果这个成员是NULL,系统使用默认标题(另存为或打开)
    
    
    折叠Flags
    
    
    位标记的设置,你可以使用来初始化对话框。当对话框返回时,它设置的这些标记指出用户的输入。这个成员可以是下列标记的组合。 标记 含意
    
    
    OFN_ALLOWMULTISELECT 指定文件名列表框允许多选。如果同时你设置了OFN_EXPLORER标记,对话框使用Explorer风格用户界面;否则它使用旧风格用户界面。
    
    
    如果用户选择了一个以上的文件,lpstrFile缓冲返回当前目录下所有被选择的文件的文件名。nFileOffset成员是到第一个文件名的偏移量(字节或字符),并且nFileExtension成员不被使用。对于Explorer风格对话框,目录和文件名是被NULL分隔的,在最后的文件名后带有额外的NULL。这个格式使Explorer风格的对话框能返回包含空格的长文件名。对于旧风格对话框,目录和文件字符串是被空格分隔的,函数为带有空格的文件名使用短文件名。你可以使用FindFirstFile函数在短文件名和长文件名之间转换。
    
    
    如果你为一个旧风格对话框指定了一个定制的模板,文件名列表框的定义必须包含LBS_EXTENDEDSEL值。
    
    
    OFN_CREATEPROMPT 如果用户指定了一个不存在的文件,这个标记使用对话框能提示用户是否新建这个文件。如果用户选择了新建这个文件,对话框关闭并且函数返回指定的名字;否则,对话框继续停留。如果你使用带有OFN_ALLOWMULTISELECT标记的这个标记,对话框允许用户去指定一个不存在的文件。
    
    
    OFN_DONTADDTORECENT Windows 2000:防止系统为选择的文件增加快捷链接到最近使用文档中。要找回目录的位置,调用还有CSIDL_RECENT标记的SHGetSpecialFolderLocation函数。
    
    
    OFN_ENABLEHOOK 激活在lpfnHook成员中指定的钩子函数。
    
    
    OFN_ENABLEINCLUDENOTIFY Windows 2000:当用户打开一个文件夹时,引起对话框发送CDN_INCLUDEITEM通知消息到你的OFNHookProc程序。对话框为在最近打开的文件夹中的每一个项目发送一个通知。这些消息使你能够控制那些在对话框中显示的文件夹项目的列表。
    
    
    OFN_ENABLESIZING Windows 2000,Windows 98:使Explorer风格的对话框可以使用鼠标或键盘调整大小。缺省时,Explorer风格的打开和另存为对话框允许被调整大小,不顾这个标记是否被设置。这标记仅在你提供了一个钩子程序或定制模板时是必需的。旧风格的对话框不允许调整大小。
    
    
    OFN_ENABLETEMPLATE 指出lpTemplateName成员是指向对话框模板资源的名字,这个模板资源在能被hInstance成员识别的模块中。
    
    
    如果OFN_EXPLORER标记被设置,系统使用指定的模板去建立一个对话框,是默认Explorer风格对话框的子窗口。如果OFN_EXPLORER标记没有被设置,系统使用旧风格的对话框替代默认的对话框。
    
    
    OFN_ENABLETEMPLATEHANDLE 指出hInstance成员能识别的包含预载对话框模板的数据块。如果这个标记被指定的,系统忽略lpTemplateName。
    
    
    如果OFN_EXPLORER标记被设置,系统使用指定的模板去建立一个对话框,是默认Explorer风格对话框的子窗口。如果OFN_EXPLORER标记没有被设置,系统使用模板去建立一个旧风格对话框替代默认对话框。
    
    
    OFN_EXPLORER 指出任何打开或另存为对话框使用新的Explorer风格的用户化模块。关于更多的信息,参见Explorer-Style Hook Procedures和Explorer-Style Custom Templates。
    
    
    缺省下,打开和另存为对话框使用Explorer风格用户界面,不顾这个标记是否设置。这个标记仅在你提供了一个钩子程序或定制模板或设置了OFN_ALLOWMULTISELECT标记时是必需的。
    
    
    如果你想使用旧风格的界面,省略OFN_EXPLORER 标记,并且提供一个代替的旧风格模板或钩子程序。如果你想用旧风格但不需要一个定制模板或钩子程序,简单的提供一个钩子程序,让它返回FALSE。
    
    
    OFN_EXTENSIONDIFFERENT 指定用户输入的一个文件的扩展名与lpstrDefExt指定的扩展名不同。如果lpstrDefExt是NULL,函数不使用这个标记。
    
    
    OFN_FILEMUSTEXIST 指定用户仅可以在打开文件名输入字段中输入已存在的文件的名字。如果这个标记被指定的并且用户输入了一个无效的名字,对话框程序显示一个等待消息框。如果这个标记被指定,OFN_PATHMUSTEXIST标记也被使用。
    
    
    OFN_FORCESHOWHIDDEN Windows 2000:强制显示系统和隐藏属性的文件,从而压倒用户设置的显示或不显示隐藏文件。否则,带有系统和隐藏标记的文件不被显示。
    
    
    OFN_HIDEREADONLY 隐藏只读复选框。
    
    
    OFN_LONGNAMES 对于旧风格对话框,这个标记引起对话框使用长文件名。如果这个标记没有被指定,或如果OFN_ALLOWMULTISELECT标记也被设置,旧风格对话框为带有空格的文件名使用短文件名(8.3格式)。
    
    
    Explorer风格对话框忽略这个标记,通常显示长文件名。
    
    
    OFN_NOCHANGEDIR 如果当搜索文件时用户改变了目录的时候,恢复当前目录到它的初始值。
    
    
    OFN_NODEREFERENCELINKS 引导对话框为选择的快捷方式(.LNK)文件返回路径和文件名。如果这个值没有被指定,对话框返回这个快捷方式所引用文件的路径和文件名。
    
    
    OFN_NOLONGNAMES 对于旧风格对话框,这个标识引起对话框去使用短文件名(8.3格式)。
    
    
    Explorer风格对话框忽略这个标记,通常显示长文件名。
    
    
    OFN_NONETWORKBUTTON 隐藏和显示风格按钮。
    
    
    OFN_NOREADONLYRETURN 指定返回的文件不带有只读复选框,不是在写保护的目录中。
    
    
    OFN_NOTESTFILECREATE 指定文件不是在对话框关闭前建立的。如果应用程序保存文件到一个建立的非映象风格共享上,这个标记应该被指定的。当一个应用程序指定了这标记,库不能检查写保护,磁盘满,打开驱动器门或网络保护。应用程序使用这个标记必须小心执行文件操作,因为一旦文件被关闭,它不能重新打开。
    
    
    OFN_NOVALIDATE 指定公共对话框允许在返回的文件名中有无效的字符。典型的,正在调用的程序使用一个钩子程序通过FILEOKSTRING消息检查文件名。如果在编辑控件中的文本框是空的或只包含了空格,那么文件和目录列表框是被更新的。如果编辑控件中的文本框包含了别的东西,那么nFileOffset和nFileExtension的设置值是通过分析文本产生的。没有默认的扩展名被添加到文本,也没有文本被复制到lpstrFileTitle指定的缓冲。
    
    
    如果通过nFileOffset指定的值比0小,文件是无效的。否则,文件名是有效的。如果OFN_NOVALIDATE没有被指定,nFileExtension和nFileOffset可以被使用。
    
    
    OFN_OVERWRITEPROMPT 如果选择的文件已经存在,使用另存为对话框产生一个消息框。用户必须确认是否覆盖这个文件。
    
    
    OFN_PATHMUSTEXIST 指定用户仅能输入的路径和文件名。如果这个标记被使用并且用户在文件名输入字段中键入了一个用效的路径和文件名,对话框函数显示一个等待消息。
    
    
    OFN_READONLY 当对话框建立时,显示被选择的只读复选框。这个标记指出当对话框被关闭时只读复选框的状态。
    
    
    OFN_SHAREAWARE 指出如果调用OpenFile函数因为网络共享冲突而失败,这个错误被忽略并且对话框返回选择的文件名。
    
    
    如果这个标记没有被设置,当用户选择的文件名发生网络共享冲突时,对话框发送通知到你的钩子程序。如果你设置了OFN_EXPLORER标记,对话框发送CDN_SHAREVIOLATION消息到钩子程序。如果你没有设置OFN_EXPLORER,对话框发送SHAREVISTRING注册的消息到钩子程序。
    
    
    OFN_SHOWHELP 使对话框显示帮助按钮。hwndOwner成员必须指定一个窗口,这个窗口作为接收对话框发送的HELPMSGSTRING注册的消息,当用户单击帮助按钮时对话框发送这个消息。
    
    
    当用户单击帮助按钮时,一个Explorer风格的对话框发送CDN_HELP通知消息到你的钩子程序。
    
    
    折叠nFileOffset
    
    
    指定从路径开始到通过lpstrFile指定的文件名字符串基于0的偏移,以TCHARs为单位。对于ANSI版本,是字节的个数;对于Unicode版本,是字符的个数。例如,如果lpstrFile指向下列的字符串,"c:\dir1\dir2\file.ext",这个成员包含指出"file.ext"字符串偏移的位置值13。
    
    
    如果用户选择了多于一个的文件,nFileOffset是到第一个文件名的偏移。
    
    
    折叠nFileExtension
    
    
    指定从路径开始到通过lpstrFile指定的文件名字符串中扩展名基于0的偏移,以TCHARs为单位。对于ANSI版本,是字节的个数;对于Unicode版本,是字符的个数。例如,如果lpstrFile指向下列的字符串,"c:\dir1\dir2\file.ext",这个成员包含的值是18。如果用户没有输入一个扩展名并且lpstrDefExt是NULL,这个成员指定的偏移是结束字符NULL。如果用户在文件名中输入一个"."作为最后的字符,这个成员是0。
    
    
    折叠lpstrDefExt
    
    
    指向包含默认扩展名的缓冲。如果用户忘记输入扩展名,GetOpenFileName和GetSaveFileName附加这个扩展名到文件名中。这个字符串可以是任一长度,但但只有头三个字符被附加。字符串不应该包含一个句点(.)。如果这个成员是NULL并且用户忘记了输入一个扩展名,那么将没有扩展名被附加。
    
    
    折叠lCustData
    
    
    指定应用程序定义的数据,这数据是能被lpfnHook成员识别的系统传到的钩子程序。当系统发送WM_INITDIALOG消息到程序,消息的lParam参数指向当对话框建立时指定的OPENFILENAME结构。钩子程序可以使用这个指针获得lCustData的值。
    
    
    折叠lpfnHook
    
    
    指向一个钩子程序。除非Flags成员中包含OFN_ENABLEHOOK标记,要么这个成员将被忽略。
    
    
    如果在Flags成员中OFN_EXPLORER标记没有被设置,lpfnHook指向一个OFNHookProcOldStyle钩子程序,这个程序有意的从对话框接收消息。钩子程序返回FALSE传递一个消息到默认的对话框程序或返回TRUE丢弃消息。
    
    
    如果OFN_EXPLORER被设置,lpfnHook指向一个OFNHookProc钩子程序。这个钩子程序接收从对话框发出的通知消息。这个钩子程序也接收你通过一个子对话框模板定义的附加控件的消息。钩子程序不有意接收默认对话框的标准控件的消息。
    
    
    折叠lpTemplateName
    
    
    指向一个以空字符结束的字符串,字符串是对话框模板资源的名字,资源保存在能被hInstance成员识别的模块中。对于有限的对话框资源,这可以是通过MAKEINTRESOURCE返回的值。除非在Flags成员中设置了OFN_ENABLETEMPLATE标记,要么这个成员被忽略。
    
    
    如果OFN_EXPLORER标记被设置,系统使用指定的模板去建立一个对话框,是默认Explorer风格对话框的子窗口。如果OFN_EXPLORER标记没有被设置,系统使用模板去建立一个旧风格的对话框来替代默认对话框。
    
    
    pvReserved
    
    
    保留。
    
    
    dwReserved
    
    
    保留。
    
    
    FlagsEx
    
    
    Windows 2000:设置位标记,你可以使用来初始化对话框。这个成员可以是下列标记的组合。 标记 含意
    
    
    OFN_EX_NOPLACESBAR 如果这个标记被设置,则位置栏被不显示。如果这个标记没有设置,则Explorer风格的对话框包含一般使用文件图标的位置栏,例如像收藏夹和桌面。
    
    
    切记:#include <Commdlg.h>
    
    
    
    
    CHOOSEFONT            STRUCT
      lStructSize         DWORD  ?          ;结构长度  
      hwndOwner           DWORD  ?          ;所处窗口
      hdc                 DWORD  ?   
      lpLogFont           DWORD  ?          ;指向一个LOGFONT结构
      iPointSize          DWORD  ?          ;选择的字体大小
      Flags               DWORD  ?          ;标志
      rgbColors           DWORD  ?          ;选择的字体颜色
      lCustData           DWORD  ?          ;
      lpfnHook            DWORD  ? 
      lpTemplateName      DWORD  ?   
      hInstance           DWORD  ?
      lpszStyle           DWORD  ?
      nFontType           WORD   ?
      Alignment           WORD   ?
      nSizeMin            DWORD  ?
      nSizeMax            DWORD  ?
    CHOOSEFONT            ENDS
    
    
    
    
    CHOOSECOLOR           STRUCT ? 
      LStructSize         DWORD  ?           ;结构长度
      HwndOwner           DWORD  ?           ;所属窗口
      HInstance           DWORD  ?
      rgbResult           DWORD  ?           ;用户选择的颜色值
      lpCustColors        DWORD  ?           ;用户自定义颜色缓冲区
      Flags               DWORD  ?           ;标志
      lCustData           DWORD  ?           
      lpfnHook            DWORD  ?
      lpTemplataName      DWORD  ?
    CHOOSECOLOR           ENDS
    
    
    
    
    PAGESETUPDLG          STRUCT ?
      LStructSize         DWORD  ?            ;结构长度
      HwndOwner           DWORD  ?            ;所属窗口
      hDevMode            DWORD  ?            ;指向DEVMODE结构
      hDevNames           DWORD  ?            ;指向DEVNAMES结构
      Flags               DWORD  ?            ;标志
      PtPaperSize         POINT  ?            ;返回纸张尺寸
      RtMinMargin         RECT   ?            ;返回最小允许的页边距
      rtMargin            RECT   ?            ;返回用户选择的页边距
      hInstance           DWORD  ?            
      lCustData           DWORD  ?            
      lpfnPageSetupHook   DWORD  ? 
      lpfnPagePaintHook   DWORD  ?
      lpPageSetupTemplateName   DWORD  ?
      hPageSetupTemplate  DWORD   ?
    PAGESETUPDLG          ENDS
    
    API函数:
    
    PageSetupDlg()
    
    功能:
    该函数创建一个PageSetup对话框,此对话框能使用户指定打印页的属性。这些属性包括纸张大小和来源,送纸方向和页边距。
    
    原型:
    BOOL PageSetupDlg(LPPAGESETUPDLGI ppsd)
    参数:
    Ippsd:指向一个包含初始化对话框信息的PAGESETUPDLG结构。当函数返回时,该结构存放有关用户选择的信息
    
    返回值:
    返回如果用户点击OK钮,返回值为非零值,Ippsp参数指向的PAGESETUPDLG结构中的成员显示用户的选择。如果用户取消或关闭PageSetup对话框或错误出现,返回值为零
    
    
    GetSaveFileName()
    功能:
    该函数创建一个Save公共对话框,以便用户指定驱动器、目录和文件名
    原型:
    BOOL GetSaveFileName(LPOPENFILENAME Ipofn)
    参数:
    Ipofn:指向一个包含初始化对话框信息的OPENFILENAME结构。当GetsaveFileName函数返回时,此结构含有关于用户文件选择的信息。
    返回值:
    如果用户指定了一个文件名且点击OK按钮,返回值为非零值。由OPENFILENAME结构中的归IpstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关闭Save对话框或错误出现,返回值为零
    
    
    GetOpenFileName()
    
    功能:
    创建一个Open公共对话框,使用户指定驱动器、目录和文件名、或使用户打开文件
    原型:
    BOOL GetOpenFileName(LPOPENFILENAME Ipofn);
    参数;
    Ipofn:指向包含初始化对话框的信息的一个OPENFILENAME结构。当OpenfileName函数返回时,此结构包含有关用户文件选择的信息。
    返回值:
    如果用户指定了一个文件名,点击OK按钮,返回值为非零。由OPENFILENAME结构的IPstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关闭Open对话框或错误出现,返回值为零。
    
    
    ChooseColor()
    功能:
    该函数创建一个能使用户从中选择颜色的通用颜色对话框
    原型:
    BOOL ChooseColor(LPCHOOSECOLOR IpCC);
    参数;
    lpCC:指向一个包括初始化对话框信息的CHOOSECOLOR结构。当ChooseColor函数返回时,此结构含有有关用户颜色选择的信息。
    返回值:
    如果用户点击对话框中的OK按钮,返回值为非零值。CHOOSECOLOR结构中的rgbResult成员含有用户选择的颜色的RGB颜色值。如果用户取消或关闭Color对话框或错误出现,返回值为零。
    
    
    ChooseFont()
    
    功能:
    该函数创建一个使用户选择逻辑字体属性的对话框,这些属性包括字体名称、字体风格(如粗体、斜体或正常体)、字号、效果(如强调线,下划线或字体颜色)和手写体(或字符集)。
    原型:
    BOOL ChooseFont(LPCHOOSEFONT Ipcf)
    参数:
    Ipcf:指向一个含有初始化对话框信息的CHOOSEFONT结构。当返回ChooseFont函数时,此结构含有用户对字体选择的信息。
    
    返回值:
    
    如果用户点击对话框的OK按钮,返回值为非零值,CHOOSEFONT结构中的成员表明用户的选择。如果用户取消或关闭Font对话框或出现错误信息,返回值为零。
    





    展开全文
  • 本人主要介绍了VBA窗体控件的一些基本操作内容,各种常用属性,常用操作等,基本涵盖了全部常用的控件,给出了代码样例,适用于初学者,欢迎感兴趣的下载学习,不明之处请留言。
  • 打开”文件和“保存”文件对话框 显示 “打开对话框的函数是 GetOpenFileName,显示“保存”文件对话的函数是 GetSaveFileName ,这两个对话框可以让用户选择 驱动器、目录、以及一个文件名(打开对话框还允许...
    1. “打开”文件和“保存”文件对话框

      1. 显示 “打开” 对话框的函数是 GetOpenFileName,显示“保存”文件对话的函数是 GetSaveFileName ,这两个对话框可以让用户选择 驱动器、目录、以及一个文件名(打开对话框还允许选择多个文件),但这两个对话框并不对文件进行任何操作,也就是说,它们进给用户提供一个同一界面来“选择”文件名,获取文件名以后,对程序的打开、读写等操作还需要程序员自己解决。

      2. 这两个函数的用法:
        在这里插入图片描述
        lpofn 参数是一个指针,指向一个 OPENFILENMAE 结构,程序在调用函数前需要在结构中填写初始化数据,两个函数使用的结构是一样的,只是实用的初始化数据有些不同而已。

      3. lpofn 结构:

        在windows.inc 中结构定义如下:
        在这里插入图片描述
        结构中一些重要的字段说明:

        1. ipstrFile – 指向一个包含文件名的缓冲区。如果这个缓冲区中已经包含了一个文件名,那么对话框初始的时候将显示这个文件名。当用户选择了一个文件的时候,函数在这里返回新的文件名。
        2. nMaxfile – 指定 lpstrFIle 参数指向的缓冲区长度。
        3. lpstrFileTitle – 指向一个缓冲区,用来接收用户选择的不含路径的文件名。这个字段可以为NULL。
        4. nMaxFileTitle – 指明 lpstrFileTitle 参数指向的缓冲区长度。
        5. lpstrInitialDir – 对话框的初始化目录,这个字段可以为 NULL。
        6. lpstrTitle – 指向自定义的对话框标题,如果这个字段为NULL,那么“打开”对话框和“保存”对话框的默认标题是“打开”和“另存为”。
        7. nFileOffset – 返回文件名字符串中文件名的起始位置,如果用户选择了文件"c:\dir1\file.ext’,这里将返回8(因为 file.ext 中 f 在第8个位置)
        8. nFilExtension – 返回文件名字符串中扩展名的起始位置,同样的上面的字符串,这里返回13.如果文件名的最后一个字符串是“.”,这里返回0,表示文件没有拓展名,这个字段和 nFileOffset 字段为分析文件名提供了方便。
        9. lpstrDefExt – 指定默认拓展名,如果用户输入了一个没有拓展名的文件名,那么函数会自动加上这个默认拓展名。
        10. Flags字段 – 该标志字段决定了对话框的不同行为,它可以是一些取值的组合。下面是一些重要的标志:
          1. OFN_ALLOWMULTISELECT – 允许同时选择多个文件名。
          2. OFN_CREATEPROMPT – 如果用户输入了一个不存在的文件名,对话框向用户提问“是否建立文件”
          3. OFN_FILEMUSTEXIST – 用户只能选择一个已经存在的文件名,使用这个文件名的同时必须使用 OFN_PATHMUSTEXIST 标志。
          4. OFN_HIDEREADONLY – 对话框不显示“以只读方式打开”复选框。
          5. OFN_OVERWRITEPROMPT – 在“保存”文件对话框中使用过的时候,当选择一个已存在的文件时,对话框会提问“是否覆盖文件”。
          6. OFN_PATHMUSTEXIST – 用户输入文件名时,路径必须存在。
          7. OFN_READONLY – 对话框中的“以只读方式打开”复选框初始化的时候处于选中状态。
      4. 说明:

        调用显示 “打开” 或 “保存” 文件对话框函数时,函数会停留直到对话框关闭位置,当用户点击了对话框中的“确定”按钮时,函数返回 TRUE,用户单击“取消”按钮退出时,函数返回 FALSE,程序可以由此判断是否需要继续进行打开或保存文件的操作。

      5. 代码解读:
        在这里插入图片描述

    2. 字体选择对话框

      1. 介绍:

        “字体”通用对话框如图措施,对话框列出了系统中安装的字体,用户可以在上面选择字体名称,同时可以选择字体大小、颜色、以及一些效果如斜体,粗体,删除线或下划线等。
        在这里插入图片描述

      2. 函数,显示选择“字体”对话框的函数是 ChooseFont:
        在这里插入图片描述

      3. 结构体 CHOOSEFONT 介绍:

        lpcf 是一个 CHOOSEFONT结构体:
        在这里插入图片描述
        重要字段介绍:

        1. hDC – 当Flags字段中制定 CF_PRINTERFONTS 标志时,它是打印机的DC句柄。
        2. lpLogFont – 指向一个包含 LOGFONT 结构的缓冲区。 LOGFONT 结构可以用来指定字体的名称和属性。如果 Flags 字段中制定 CF_INITTOLOGFONTSTRUCT 标志的话,对话框将根据这个结构初始化对话框,函数也在这里返回用户选择的字体和名称。
        3. iPointSize – 返回用户选择的字号大小,单位是 1/10 磅。
        4. rfbColors – 如果 FLags 字段的 CF_EFFECTS 标志被设置,对话框将根据这个数值初始化“颜色”下拉式列表框。另外,函数返回时这里返回用户选择的字体颜色。
        5. nFontType – 返回用户选择的字体属于哪一类,可能的返回值有 BOLD_FONTTYPE, ITALIC_FONTTYPE, PRINTER_FONTTYPE, REGULAR_FONNTYPE, SCREEN_FONTTYPE 等。
        6. Flags 标志,其初始值决定了对话框的不同行为,函数返回的时候也会在这里返回一些用户选择:
          1. CF_BOTH – 对话框同时列出打印机字体和屏幕字体。
          2. CF_TTONLY – 对话框只列出 TrueType 字体。
          3. CF_EFFECTS – 对话框中显示 “效果” 复选框。
          4. CF_FIXEDPITCHONLY – 对话框的字体列表中只显示等宽字体。
          5. CF_LIMITSIZE – 对话框显示的字体尺寸限于 nSizeMin 和 nSizeMax 字段指定的数值之间。
          6. CF_NOSTYLESEL – 对话框不显示“字形”组合列表框。
          7. CF_NOSIZESEL – 对话框不显示“大小”组合列表框。
          8. CF_SCREENFONTS – 字体列表中只显示屏幕字体。
      4. 使用介绍:

        1. 调用 ChooseFont 函数实,函数会停留直到对话框关闭为止,当用户单击了对话框中的“确定”按钮时,函数返回 TRUE,用户单击“取消”按钮退出时,返回返回 FALSE。
        2. 在调用 ChooseFont 之前,lpLogFont 字段被指向一个 LOGFONT结构,对话框关闭的时候,函数在 LOGFONT 结构的 lfFaceName 字段中返回字体的名称,字体的效果和字形也在LOGFONT结构中返回。
        3. 用户选择的颜色在rgbColors 字段中返回,字体大号在 iPointSize 字段中返回,由于单位是 1/10 磅,所以返回的值等于对话框中选择的字号大小乘以10.
      5. 代码解读:
        在这里插入图片描述

    3. “颜色”选择对话框

      1. 颜色对话框如图所示,左边是基本的选择系统预定义的颜色,右边是拓展的区域,可以由用户自己选择或输入颜色值。
        在这里插入图片描述
      2. 打开“颜色”选择对话框使用函数 ChooseColor:
        在这里插入图片描述
      3. lpcc 指向一个 CHOOSECOLOR结构:
        在这里插入图片描述
        结构中几个重要的参数介绍:
        1. rgbResult – 如果 Flags字段指定了 CC_RGBINIT标志,那么窗框对话框的时候使用这个字段来初始化选择框中的颜色;函数返回时在这里返回用户的选择。
        2. lpCustColors – 指向一个 16个双字长度的缓冲区,定义16中颜色。
        3. Flags – 标志,可以使下面取值的组合:
          1. CC_FULLOPEN – 对话框显示右边的拓展部分,如果不指定这个标志,初始化时候拓展部分不显示,但用户可以通过单击“规定自定义颜色”按钮将对话框展开。
          2. CC_PREVENTFULLOPEN – 禁止“规定自定义颜色”按钮,也就时说不允许用户展开对话框的扩展部分。
          3. CC_RGBINT – 对话框显示的时候用 rgbResult 字段的值初始化选择框中的颜色。
      4. 说明:
        1. 如果用户单击“确定”按钮,函数返回 TRUE,否则函数返回 FALSE。
        2. 使用 ChosseColor 函数要注意的是: lpCustColors 指针不能为 NULL,所以必须分配一个 16个双字长度缓冲区,如果指针是 NULL 会导致函数违规访问 00000000h 处的内存,你就等着看“非法操作吧”!
      5. 代码解读:
        在这里插入图片描述
    4. “查找”和“替换”文本对话框:

      1. “查找”和“替换”对话框如图所示
        在这里插入图片描述
      2. 要显示这两种 通用对话框可分别使用 FindText 和 ReplaceText 函数:
        在这里插入图片描述
      3. 这两个函数同样适用 FINREPLACE 结构:
        在这里插入图片描述
        结构中关键字段说明:
        1. flags – 标志,创建对话框的时候,函数根据标志中的数值初始化对话框中各控件的状态,返回的时候根据用户的选择来设置标志字段的内容,标志字段可以是以下取值的组合:
          1. FR_FINDNEXT,FR_REPLACE,FR_REPLACEALL,FR_DIALOGTERM – 分别表示用户单击了“查找下一个”、“替换”、“全部替换”和“取消”按钮。
          2. FR_HIDEUPDOWN、FR_HIDEMATCHCASE、FR_HIDEWHOLEWORD – 初始化的时候,表示对话框不显示“方向”、“区分大小写”、“全字匹配”按钮。
          3. FR_NOMATCHCASE,FR_NOUPDOWN,FR_NOWHOLEWORD – 初始化时将 “区分大小写”、“相仿”、“全字匹配”按钮灰化。
          4. FR_MATCHCASE, FR_WHOLEWORD – 表示用户选中了“区分大小写”或“全字匹配”复选框。
          5. FR_DOWN – 把 “方向” 单选钮设置为 “向下”。
        2. lpstrFindWhat – 指向包含查找字符串的指针,缓冲区的长度必须至少为80字节,这个字符串在初始化的时候在“查找内容”编辑框中,函数也在这里返回用户输入的内容。
        3. ipstrReplaceWith – 指向包含替换字符串的指针,这个字符串在初始化的时候出现在“编辑为”编辑框中,函数也在这里返回用户输入的内容。这个字段在使用 FindText 函数的时候可以为 NULL,但在使用 ReplaceText 函数的时候必须设置,否则对话框不会显示。
        4. wFindWhatLen 和 wReplaceWithLen – 相应的长度。
      4. 使用说明:
        1. “查找”和“替换”对话框的使用有些特殊,因为这两种对话框是非模态对话框,也就是说,当调用后,系统显示对话框后马上返回,对话框保持显示状态,直到用户按下了“取消”按钮后对话框才关闭。如果用户按下了对话框中的某些按钮,对话框设置FINDREPLACE 结构的相关字段并通过自定义的消息通知父窗口的窗口过程,程序中处理 哈找和替换的功能集中在这个自定义消息中完成。另外,由于对话框必须向父窗口发送消息,所以 hwndOwner 字段中必须指定父窗口的句柄,而不能像其他函数一样设置为NULL。

        2. 为了当对话框能够使用自定义消息,程序必须首先使用 RegisterWindowMessage 函数注册自定义消息,这个函数注册消息并返回消息ID,输入的参数是消息名称字符串,Microsoft 的编程手册中说明查找和替换对话框注册 FINDMSGSTRING 消息,其 FINDMSGSTRING 代表字符串,其看代码就能理解:

          1. FINDMSGSTRING
            在这里插入图片描述

          2. 注册消息,返回消息ID
            在这里插入图片描述

          3. 窗口过程处理消息:

            在这里插入图片描述

        3. 注意事项:

          因为查找和替换对话框是非模态对话框,所以使用时要把 FINDREPLACE 结构和字符串全部放在全局变量中,过放在窗口过程的局部变量中,对话框还没有关闭的情况下,这些全局变量就已经被释放了,以后对话框存取的就会是无效地址。

    5. “页面设置”对话框

      1. 介绍
        “页面设置”对话框用来设置打印机参数,用户在对话框中选择打印机,打印纸张大小、也边距和纸张方向,还可以引用一个打机属性的设置对话框。用户可以在这里完成与打印有关的所有设备的工作。
        在这里插入图片描述
        1. 显示“页面设置”对话框使用 PageSetupDlg 函数:
          在这里插入图片描述
        2. lppsd 参数指向一个 PAGESETUPDLG 结构:
          在这里插入图片描述
          由于这个暂时还用不到,在这里参数先不说了吧,之后用再继续查阅。
        3. 代码:
          在这里插入图片描述
    展开全文
  • Visual C++对话框和常用控件示例
  • C#常用控件属性及方法介绍

    千次阅读 2021-07-23 10:19:06
    2、Label (标签)控件 3、TextBox(文本框)控件 4、RichTextBox控件 5、NumericUpDown控件 6、Button(按钮)控件 7、GroupBox(分组框)控件 8、RadioButton(单选按钮)控件 9、CheckBox(复选框)控件 10...
  • VB字体对话框ShowFont

    2021-01-24 11:36:24
    首先,将对话框控件CommonDialog添加到窗体上。 然后,设置对话框属性。比如: ' 设置“取消”为 True CommonDialog1.CancelError = True ' 设置 Flags 属性 CommonDialog1.Flags = cdlCFEffects Or cdlCFBo
  • 比较早的一个Delphi控件的开发,下载学习可以使用,主要学习控件开发的流程和理解控件开发的原理,忘记从哪里下载的,上传一下防丢失~
  • 6、QT基础——对话框QDialog

    千次阅读 2021-04-16 13:27:00
    对话框通常会是一个顶层窗口,出现程序最上层,用于实现短期任务或者简洁的用户交互。 Qt 中使用QDialog类实现对话框。就像主窗口一样,我们通常会设计一个类继承QDialog。QDialog(及其子类,以及所有Qt::Dialog...
  • delphi6控件大全

    2019-05-02 10:08:16
    delphi6集成组件全面介绍,组件的属性方法事件说明详尽
  • VC,对话框控件简介
  • 它不接受用户的任何输入,用户单击OK按钮后,对话框自动关闭,然后返回程序中继续执行。 >> msgbox('欢迎使用MATLAB')% 建立一个没有标题的消息对话框 >> msgbox('欢迎使用MATLAB','MATALB','warn')%% 建立一...
  • C#通用对话框

    千次阅读 2007-11-01 15:22:00
    字体对话框(FontDialog) 文字处理中,我们常用到字体,现在我们来做一个最常见的字体对话框。 一、 字体对话框(FontDialog)常用属性 ShowColor 控制是否显示颜色选项 AllowScriptChange
  • VB6.0教程电子课件--第10章 对话框与菜单程序设计.ppt
  • matlab GUI之通用对话框

    2012-07-19 01:06:00
    它不接受用户的任何输入,用户单击OK按钮后,对话框自动关闭,然后返回程序中继续执行。 &gt;&gt; msgbox('欢迎使用MATLAB')% 建立一个没有标题的消息对话框 &gt;&gt; msgbox('欢迎使用...
  • 对话框和常用控件的描述,学会基础,更稳健。
  • 用VB的INET控件进行文件的自动上传下载服务.docx
  • windows标准控件的介绍与使用

    千次阅读 2021-02-25 16:51:07
    Windows系统提供的标准控件主要包括静态控件、按钮控件、编辑框控件、列表框控件、组合框控件等,如表所示。 Windows标准控件的类型 类别 MFC类 控件类型 静态控件 CStatic Static Text、Group Box 按钮控件 ...
  • 对话框和常用控件

    千次阅读 2011-04-20 09:22:00
    对话框是一个特殊类型的窗口,任何对窗口进行的操作(如:移动、最大化、最小化等)都可在对话框中 实施,一般来说,在对话框中通过各种控件(如:按钮、编辑框、列表框、组合框等)来和用户进行交互。控件系统...
  • DELPHI控件开发深入简出.doc
  • C#学习(十五)——窗体控件用法大全

    千次阅读 多人点赞 2020-07-01 20:16:12
    C#控件及常用设计整理 1、窗体 1.1、常用属性** (1)Name属性:用来获取或设置窗体的名称,应用程序中可通过Name属性来引用窗体。 (2) WindowState属性: 用来获取或设置窗体的窗口状态。 取值有三种: Normal ...
  • VB讲课笔记10:菜单与对话框

    千次阅读 2018-03-14 06:46:11
    VB讲课笔记10:菜单与对话框一、用户界面设计基础用户界面是应用程序最基本的组成部分,其内容包括界面基本...窗体及其控制栏、标题栏、菜单栏、工具栏、控件和状态栏是Windows用户界面的基本元素。 2、对话框(Dia...
  • 清单文件中配置的信息会添加到 Android 系统中,当程序运行时,系统会找到清单文件中的配置信息,然后根据配置信息打开相应组件。 java:用于存放所有的Java代码,该文件夹中可以创建多个包,每个包中可以存放...
  • 控件-通用对话框 控件-数据源 控件-数据提供者-数据库提供者 控件-数据报 控件-树形框 控件-时钟 控件-日期框-月历 控件-驱动器框 控件-命令条及状态条 控件-列表框 控件-进度条 控件-画板 控件-滑块条 ...
  • 既然当AVI片段显示时,线程继续执行,所以一个动画控件的一个通用使用就是一个长时间的操作时确定系统是活动状态。 消息映射函数: ACN_START :指示动画开始播放 ACN_STOP : 指示动画已停止播放 属性: WS_...
  • 要想Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新...选一个Qt自有的控件,如果它和我们新加的自定义控件有着相似的API,那么只要Qt Designer的对话框里...
  • 控件注册VS C++

    2014-05-27 10:44:36
    控件注册 实现一个控件注册的简单操作 知道人们进行控件注册 VS 2010 C++ MFC

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,992
精华内容 3,996
关键字:

在通用对话框控件建立打开