爱爱小说网 > 其他电子书 > windows环境下32位汇编语言程序设计 >

第39章

windows环境下32位汇编语言程序设计-第39章

小说: windows环境下32位汇编语言程序设计 字数: 每页3500字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




                       mov      idFindMessage;eax

               。elseif eax    WM_MAND

                       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;DLG_MAIN;NULL;

                       offset _ProcDlgMain;NULL

               invoke  ExitProcess;NULL

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

               end     start

资源脚本文件mDlg。rc的内容如下:

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#include                  

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#define            ICO_MAIN     1000

#define            DLG_MAIN     1000

#define            IDM_MAIN     1000

#define            IDM_OPEN     1101

#define            IDM_SAVEAS   1102

#define            IDM_PAGESETUP 1103

#define            IDM_EXIT     1104

#define            IDM_FIND     1201

#define            IDM_REPLACE  1202

#define            IDM_SELFONT  1203

#define            IDM_SELCOLOR 1204

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

ICO_MAIN           ICON     〃Main。ico〃

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

DLG_MAIN DIALOG 193; 180; 310; 134

MENU IDM_MAIN

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | 

WS_SYSMENU | WS_THICKFRAME

CAPTION 〃通用对话框示例〃

FONT 9; 〃宋体〃





//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

IDM_MAIN           menu   discardable

BEGIN

                   popup  〃文件(&F)〃

                   BEGIN

                          menuitem  〃打开文件(&O)。。。〃;   IDM_OPEN

                          menuitem  〃文件另存为(&C)。。。〃;IDM_SAVEAS

                          menuitem  separator

                          menuitem  〃页面设置(&P)。。。〃;IDM_PAGESETUP

                          menuitem  separator

                          menuitem  〃退出(&X)〃;      IDM_EXIT

                   END

                   popup  〃查看(&V)〃

                   BEGIN

                          menuitem  〃查找字符串(&S)。。。〃;IDM_FIND

                          menuitem  〃替换字符串(&R)。。。〃;IDM_REPLACE

                          menuitem  separator

                          menuitem  〃选择字体(&F)。。。〃;IDM_SELFONT

                          menuitem  〃选择颜色(&B)。。。〃;IDM_SELCOLOR

                   END

END

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

在资源脚本文件中定义了一个对话框用做主窗口,同时定义了一个菜单用来选择各种通用对话框。下面结合这个例子说明各种通用对话框的用法。



 
来源:电子工业出版社 作者:罗云彬 上一页         回书目         下一页          
上一页         回书目         下一页          
  


第8章 通用对话框


8。2 使用通用对话框(1)

    
8。2。1  “打开”文件和“保存”文件对话框

“打开”文件和“保存”文件的对话框大概是读者最熟悉的,如图8。1所示。由于Windows操作系统随着版本的升级会对用户界面的风格做一些调整,不同版本的dlg32。dll库文件也随之改变,但不管主流的用户界面如何改变,对程序员来说,编程的接口是不会变的,从Windows 95到Windows XP,通用对话框函数的使用方式并没有什么不同。

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

这两个函数的语法是:

invoke  GetOpenFileName,lpofn      ;显示打开文件对话框

invoke  GetSaveFileName,lpofn      ;显示保存文件对话框

lpofn参数是一个指针,指向一个OPENFILENAME结构,程序在调用函数前需要在结构中填写初始化数据,两个函数使用的结构是一样的,只是使用的初始化数据有所不同而已。OPENFILENAME结构是这样定义的:

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  

结构中一些重要的字段含义如下。

●   lpstrFilter——指定文件名筛选字符串,该字段决定了对话框中“文件类型”下拉式列表框中的内容,字符串可以由多组内容组成,每组包括一个说明字符串和一个筛选字符串,字符串的最后用两个0结束。如下面的字符串将在列表框中显示两项内容,选择不同项目的时候分别列出“*。txt”文件或者所有文件“*。*”:

'Text Files(*。txt)';0;'*。txt';0;'All Files(*。*)';0;'*。*';0;0

筛选字符串中也可以同时指定多个扩展名,中间用分号隔开,如'*。txt;*。doc'。

●   lpstrFile——指向一个包含文件名的缓冲区。如果这个缓冲区中已经包含了一个文件名,那么对话框初始化的时候将显示这个文件名。当用户选择了一个文件的时候,函数在这里返回新的文件名。

●   nMaxFile——指定lpstrFile参数指向的缓冲区的长度。

●   lpstrFileTitle——指向一个缓冲区,用来接收用户选择的不含路径的文件名。这个字段可以为NULL。

●   nMaxFileTitle——指明lpstrFileTitle参数指向的缓冲区的长度。

●   lpstrInitialDir——对话框的初始化目录,这个字段可以为NULL。

●   lpstrTitle——指向自定义的对话框标题,如果这个字段是NULL,那么“打开”对话框和“保存”对话框的默认标题是“打开”和“另存为”。

●   nFileOffset—返回文件名字符串中文件名的起始位置,如当用户选择了文件“c:dir1file。ext”时,这里将返回8。

●   nFileExtension——返回文件名字符串中扩展名的起始位置,同样是上面的字符串,这里返回13。如果文件名的最后一个字符是“。”,这里返回0,表示文件没有扩展名,这个字段和nFileOffset字段为分析文件名提供了方便。

●   lpstrDefExt——指定默认扩展名,如果用户输入了一个没有扩展名的文件名,那么函数会自动加上这个默认扩展名。

●   Flags字段——该标志字段决定了对话框的不同行为,它可以是一些取值的组合。下面是一些比较重要的标志:

■   OFN_ALLOWMULTISELECT——允许同时选择多个文件名。

■   OFN_CREATEPROMPT——如果用户输入了一个不存在的文件名,对话框向用户提问“是否建立文件”。

■   OFN_FILEMUSTEXIST——用户只能选择一个已经存在的文件名,使用这个标志的时候必须同时使用 OFN_PATHMUSTEXIST标志。

■   OFN_HIDEREADONLY——对话框中不显示“以只读方式打开”复选框。

■   OFN_OVERWRITEPROMPT——在“保存”文件对话框中使用的时候,当选择一个已存在的文件时,对话框会提问“是否覆盖文件”。

■   OFN_PATHMUSTEXIST——用户输入文件名时,路径必须存在。

■   OFN_READONLY——对话框中的“以只读方式打开”复选框初始化的时候处于选中状态。

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

8。2。2  选择字体对话框

“选择字体”通用对话框如图8。2所示,对话框列出了系统中安装的字体,用户可以在上面选择字体名称,同时可以选择字体大小、颜色以及一些效果如斜体、粗体、删除线或下划线等,显示选择字体对话框的函数是ChooseFont:

invoke  ChooseFont,lpcf

lpcf指向一个CHOOSEFONT结构,这个结构是这样定义的:


图8。2  选择字体对话框

CHOOSEFONTA 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    ?

CHOOSEFONTA ENDS



 
来源:电子工业出版社 作者:罗云彬 上一页         回书目         下一页          
上一页         回书目         下一页          
  


第8章 通用对话框


8。2 使用通用对话框(2)

    
结构中一些重要的字段含义如下:

●   hDC——当Flags字段中指定CF_PRINTERFONTS标志时,它是打

返回目录 上一页 下一页 回到顶部 2 2

你可能喜欢的