友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
依依小说 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

windows环境下32位汇编语言程序设计-第46部分

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




    invoke  StrokePath,hDC             ;(1)

    invoke  FillPath,hDC               ;(2)

    invoke  StrokeAndFillPath,hDC      ;(3)

第(1)个函数沿着路径用当前画笔绘画线条,第(2)个函数使用当前画刷填充路径围起来的区域,第(3)个函数既使用当前画笔绘画边线也使用当前画刷填充中间区域。当执行了任何一个函数的时候,路径都会被破坏掉。实际上,这些函数完成的功能就相当于7。2。3

节中的画线和填充函数,那么为什么要这样大动干戈呢?惟一的好处就是用这种方法可以操作很复杂的形状,因为定义路径时可以使用任何画线函数,包括画弧与画贝塞尔曲线函数等,而用普通的填充函数是无法填充出一个由贝塞尔曲线围成的区域的。

路径的另一个用途是定义一个复杂形状的区域,可以使用下面的函数将路径转化成区域:

    invoke  PathToRegion,hDC

    mov     hRgn,eax

理由是同样的,因为用区域创建函数创建出来的只能是椭圆、矩形、多边形等形状的组合,用先创建路径再转化成区域的方法可以定义形状复杂得多的区域。同样,执行了PathToRegion函数以后,原有的路径定义就会被破坏掉。



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


第8章 通用对话框


8。1 通用对话框简介

    
Windows操作系统为一些常用功能提供了一些通用对话框(mon Dialog Box),比如在不同的应用程序中进行打开文件、选择字体、选择颜色等操作时,不同程序显示的对话框的模样都是一样的。另外,把同样的应用程序放到不同版本的Windows下执行就会发现,这些对话框会随着操作系统版本的不同而不同,如图8。1所示,选择同样的“打开”文件菜单项时,在Windows XP下显示的对话框是左边的样子,而在Windows 98下显示的是右边的样子,但程序中并没有为不同版本的操作系统设计不同的对话框。造成这些现象的原因就是这些对话框是操作系统提供的,实现对话框的代码包括在dlg32。dll库文件中,由于不同版本的dlg32。dll在设计上可能有所不同,所以不同版本Windows下的对话框会有所不同。


图8。1  不同操作系统下的“打开”文件对话框

8。1  通用对话框简介

通用对话框函数由dlg32。dll提供,所以在使用之前需要在源程序中包含相应的include和includelib语句:

    include     dlg32。inc

    includelib  dlg32。lib

Windows提供多种通用对话框,每种通用对话框都使用一个专用的函数来创建和显示,另外,提供一个数据结构供初始化对话框使用,并在同一个数据结构中返回用户在对话框中输入的数据。使用这些对话框是很简单的,只需要填写结构中的初始化数据,然后调用函数并把结构地址传入就可以了。

dlg32。dll中提供的通用对话框如表8。1所示,表中还包括创建这些对话框使用的函数以及数据结构名称。

 

表8。1  通用对话框列表

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

在这些对话框中,查找字符串和替换字符串的对话框是非模态的,方便用户在查找到一个字符串以后,不必关闭对话框就可以继续查找另一个字符串,其他的对话框都是模态对话框。通用对话框使用的例子可以参考所附光盘的Chapter08mDlg目录中的代码,包括汇编源代码mDlg。asm和资源脚本文件mDlg。rc。mDlg。asm文件的内容如下:

                   。386

                   。model flat; stdcall

                   option casemap :none

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

; Include 文件定义

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

include            windows。inc‘

include            user32。inc

includelib         user32。lib

include            kernel32。inc

includelib         kernel32。lib

include            dlg32。inc

includelib         dlg32。lib

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

; Equ 等值定义

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

ICO_MAIN           equ  1000

DLG_MAIN           equ  1000

IDM_MAIN           equ  1000

IDM_OPEN           equ  1101

IDM_SAVEAS         equ  1102

IDM_PAGESETUP      equ  1103

IDM_EXIT           equ  1104

IDM_FIND           equ  1201

IDM_REPLACE        equ  1202

IDM_SELFONT        equ  1203

IDM_SELCOLOR       equ  1204

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

; 数据段

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

                           。data?

hInstance          dd        ?

hWinMain           dd        ?

dwFontColor        dd        ?

dwBackColor        dd        ?

dwCustColors       dd        16 dup (?)

stLogFont          LOGFONT          

szFileName         db        MAX_PATH dup (?)

szBuffer           db        1024 dup (?)

;********************************************************************

; 查找替换对话框使用

;********************************************************************

idFindMessage      dd      ?

stFind             FINDREPLACE      

szFindText         db      100   dup (?)

szReplaceText      db      100   dup (?)

                   nst

FINDMSGSTRING      db      'mdlg_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

                   db      'All Files(*。*)';0;'*。*';0;0

szDefExt           db      'txt';0

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

; 代码段

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

                   de

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

; 页面设置对话框

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

_PageSetup         proc

                   local   @stPS:PAGESETUPDLG

 



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


第8章 通用对话框


8。1 通用对话框简介(2)

    
                   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

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!