win32 8.2 使用通用对话框

  1. “打开”文件和“保存”文件对话框

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

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

    3. lpofn 结构:

      在windows.inc 中结构定义如下:
      win32 8.2 使用通用对话框_第1张图片
      结构中一些重要的字段说明:

      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. 代码解读:
      win32 8.2 使用通用对话框_第2张图片

  2. 字体选择对话框

    1. 介绍:

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

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

    3. 结构体 CHOOSEFONT 介绍:

      lpcf 是一个 CHOOSEFONT结构体:
      win32 8.2 使用通用对话框_第4张图片
      重要字段介绍:

      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. 代码解读:
      win32 8.2 使用通用对话框_第5张图片

  3. “颜色”选择对话框

    1. 颜色对话框如图所示,左边是基本的选择系统预定义的颜色,右边是拓展的区域,可以由用户自己选择或输入颜色值。
      win32 8.2 使用通用对话框_第6张图片
    2. 打开“颜色”选择对话框使用函数 ChooseColor:
      在这里插入图片描述
    3. lpcc 指向一个 CHOOSECOLOR结构:
      win32 8.2 使用通用对话框_第7张图片
      结构中几个重要的参数介绍:
      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. 代码解读:
      win32 8.2 使用通用对话框_第8张图片
  4. “查找”和“替换”文本对话框:

    1. “查找”和“替换”对话框如图所示
      win32 8.2 使用通用对话框_第9张图片
    2. 要显示这两种 通用对话框可分别使用 FindText 和 ReplaceText 函数:
      在这里插入图片描述
    3. 这两个函数同样适用 FINREPLACE 结构:
      win32 8.2 使用通用对话框_第10张图片
      结构中关键字段说明:
      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
          win32 8.2 使用通用对话框_第11张图片

        3. 窗口过程处理消息:

          win32 8.2 使用通用对话框_第12张图片

      3. 注意事项:

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

  5. “页面设置”对话框

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

你可能感兴趣的:(知识汇总)