⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 008.txt

📁 会变语言实现的一些程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
  pop dwFontColor

  mov eax,@stCF.iPointSize

  shl eax,1

  invoke  wsprintf,addr szBuffer,addr szFormatFont,\

  addr stLogFont.lfFaceName,\

  dwFontColor,eax

  invoke MessageBox,hWinMain,addr szBuffer,\

  addr szCaption,MB_OK

.endif

ret

 

_ChooseFont   endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_ProcDlgMain proc   uses 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

 



8.1 通用对话框简介(3)



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,DLG_MAIN,NULL,\

offset _ProcDlgMain,NULL

invoke  ExitProcess,NULL

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

end   start

资源脚本文件CommDlg.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.2 使用通用对话框(1)


8.2.1  “打开”文件和“保存”文件对话框 
“打开”文件和“保存”文件的对话框大概是读者最熟悉的,如图8.1所示。由于Windows操作系统随着版本的升级会对用户界面的风格做一些调整,不同版本的Comdlg32.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:\dir1\file.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   ? ;选择的字体大小

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -