上一篇 | 下一篇

进一步学习对话框

发布: 2008-6-26 22:55 | 作者: admin | 来源: | 查看: 0次

进一步学习对话框:

  本课中我们将进一步学习对话框。特别地我们将要探讨如何把对话框当成输入设备。如果您学习了上一课,那就会发现本课的例子只有少量的改动,就是把我们的对话框窗口附属到主窗口上。另外,我们还要学习通用对话框的用法。

理论:

把对话框当成一个输入设备来用确实是非常地简单,创建完主窗口后,您只要调用函数 CreatedialogParam 或 DialogBoxParam 就可以了,前一个函数只要在对话框的过程处理函数中处理相关的消息就可以,而后者你必须在消息循环段中插入函数 IsDialogMessage 的调用让它来处理键盘的按键逻辑。因为这两个程序段相对来说比较容易,我们就不详解。您可以下载并仔细研究。

下面我们来讨论通用对话框。WINDOWS已经为您准备好了预定义的对话框类,您可以拿来就用,这些通用对话框提供给用户以统一的界面。它们包括:打开文件、打印、选择颜色、字体和搜索等。您应该尽可能地用它们。处理这些对话框的代码在comdlg32.dll中,为了在您的应用程序中使用它们,就必须在链接阶段链接库文件 comdlg32.lib。然后调用其中的相关函数即可。对于打开文件通用对话框,该函数名为 GetOpenFileName,"保存为..."对话框为 GetSaveFileName,打印通用对话框是 PrintDlg, 等等。每一个这样的函数都接收一个指向一个结构体的指针的参数,您可以参考WIN32 API手册得到详细的资料,本课中我将讲解创建和使用打开文件对话框。

下面是打开对话框函数 GetOpenFileName 的原型:

GetOpenFileName proto lpofn:DWORD

您可以看到,该函数只有一个参数,即指向结构体OPENFILENAME的指针。当用户选择了一个文件并打开,该函数返回TRUE,否则返回FALSE。接下来我们看看结构体OPENFILENAME的定义:

OPENFILENAME STRUCT

lStructSize DWORD ?

hwndOwner HWND ?

hInstance HINSTANCE ?

lpstrFilter LPCSTR ?

lpstrCustomFilter LPSTR ?

nMaxCustFilter DWORD ?

nFilterIndex DWORD ?

lpstrFile LPSTR ?

nMaxFile DWORD ?

lpstrFileTitle LPSTR ?

nMaxFileTitle DWORD ?

lpstrInitialDir LPCSTR ?

lpstrTitle LPCSTR ?

Flags DWORD ?

nFileOffset WORD ?

nFileExtension WORD ?

lpstrDefExt LPCSTR ?

lCustData LPARAM ?

lpfnHook DWORD ?

lpTemplateName LPCSTR ?

OPENFILENAME ENDS

好,我们再来看看该结构体中常用的成员的意义:

lStructSize 结构体OPENFILENAME的大小。

hwndOwner 拥有打开对话框的窗口的句柄。

hInstance 拥有该打开文件对话框的应用程序的实例句柄 。

lpstrFilter 以NULL结尾的一个或多个通配符。通配符是成对出现的,前一部分是描述部分,后一部分则是通配符的格式,譬如:

FilterString db "All Files (*.*)",0, "*.*",0

db "Text Files (*.txt)",0,"*.txt",0,0

注意:只有每一对中的第二部分是WINDOWS用来过滤所需选择的文件的,另外您必须在该部分后放置一个0,以示字符串的结束。

nFilterIndex 用来指定打开文件对话框第一次打开时所用的过滤模式串,该索引是从1开始算的,即第一个通配符模式的索引是1,第二个是2,譬如上面的例子中,若指定该值为2,则缺省显示的模式串就是"*.txt"。

lpstrFile 需要打开的文件的名称的地址,该名称将会出现在打开文件对话框的编辑控件中,该缓冲区不能超过260个字符长,当用户打开文件后,该缓冲区中包含该文件的全路径名,您可以从该缓冲区中抽取您所需要的路径或文件名等信息。

nMaxFile lpstrFile的大小。

lpstrTitle 指向对话框标题的字符串。

Flags 该标志决定决定了对话框的风格和特点。

nFileOffset 在用户打开了一个文件后该值是全路径名称中指向文件名第一个字符的索引。譬如:若全路径名为"c:\windows\system\lz32.dll", 则该值为18。

nFileExtension 在用户打开了一个文件后该值是全路径名称中指向个文件扩展名第一个字符的索引。

例子:

下例中,我们演示了当用户选择"File->Open"时,将弹出一个打开文件对话框,当用户选择了某个文件打开时,会弹出一个对话框,告知要打开的文件的全路径名,文件名和文件扩展名。

.386

.model flat,stdcall

option casemap:none

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

include \masm32\include\windows.inc

include \masm32\include\user32.inc

include \masm32\include\kernel32.inc

include \masm32\include\comdlg32.inc

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\comdlg32.lib

.const

IDM_OPEN equ 1

IDM_EXIT equ 2

MAXSIZE equ 260

OUTPUTSIZE equ 512

字号: | 推荐给好友

41/41234>

评分:0

我来说两句