?? lion-tut-c11.htm
字號:
<BR><B> push
hInstance</B>
<BR><B>
pop ofn.hInstance</B>
<BR><B>
mov ofn.lpstrFilter, OFFSET FilterString</B>
<BR><B>
mov ofn.lpstrFile, OFFSET buffer</B>
<BR><B>
mov ofn.nMaxFile,MAXSIZE</B>
<BR><B>
mov ofn.Flags, OFN_FILEMUSTEXIST or \</B>
<BR><B>
OFN_PATHMUSTEXIST or OFN_LONGNAMES or\</B>
<BR><B>
OFN_EXPLORER or OFN_HIDEREADONLY</B>
<BR><B>
mov ofn.lpstrTitle, OFFSET OurTitle</B>
<BR><B> invoke
GetOpenFileName, ADDR ofn</B>
<BR><B> .if
eax==TRUE</B>
<BR><B>
invoke lstrcat,offset OutputString,OFFSET FullPathName</B>
<BR><B>
invoke lstrcat,offset OutputString,ofn.lpstrFile</B>
<BR><B>
invoke lstrcat,offset OutputString,offset CrLf</B>
<BR><B>
invoke lstrcat,offset OutputString,offset FullName</B>
<BR><B>
mov eax,ofn.lpstrFile</B>
<BR><B>
push ebx</B>
<BR><B>
xor ebx,ebx</B>
<BR><B>
mov bx,ofn.nFileOffset</B>
<BR><B>
add eax,ebx</B>
<BR><B>
pop ebx</B>
<BR><B>
invoke lstrcat,offset OutputString,eax</B>
<BR><B>
invoke lstrcat,offset OutputString,offset CrLf</B>
<BR><B>
invoke lstrcat,offset OutputString,offset ExtensionName</B>
<BR><B>
mov eax,ofn.lpstrFile</B>
<BR><B>
push ebx</B>
<BR><B>
xor ebx,ebx</B>
<BR><B>
mov bx,ofn.nFileExtension</B>
<BR><B>
add eax,ebx</B>
<BR><B>
pop ebx</B>
<BR><B>
invoke lstrcat,offset OutputString,eax</B>
<BR><B>
invoke MessageBox,hWnd,OFFSET OutputString,ADDR AppName,MB_OK</B>
<BR><B>
invoke RtlZeroMemory,offset OutputString,OUTPUTSIZE</B>
<BR><B>
.endif</B> <BR><B> .else</B>
<BR><B> invoke
DestroyWindow, hWnd</B> <BR><B>
.endif</B> <BR><B> .ELSE</B>
<BR><B> invoke
DefWindowProc,hWnd,uMsg,wParam,lParam</B>
<BR><B> ret</B>
<BR><B> .ENDIF</B> <BR><B>
xor eax,eax</B> <BR><B> ret</B>
<BR><B>WndProc endp</B> <BR><B> end start</B> <BR>
<HR width="100%">
<H3><FONT
color=#ff0000>分析:</FONT></H3><B>
mov ofn.lStructSize,SIZEOF ofn</B>
<BR><B> push
hWnd</B>
<BR><B>
pop ofn.hwndOwner</B>
<BR><B> push
hInstance</B>
<BR><B>
pop ofn.hInstance</B>
<P>我們在此填充結構體OPENFILENAME變量ofn的有關成員。
<P><B>
mov ofn.lpstrFilter, OFFSET FilterString</B>
<P>這里FilterString 是文件過濾模式的字符串地址,我們指定的過濾模式字符串如下:
<BLOCKQUOTE><B>FilterString db "All Files",0,"*.*",0</B>
<BR><B>
db "Text
Files",0,"*.txt",0,0</B></BLOCKQUOTE>注意:所有的模式串都是配對的,前一個是描述,后一個才是真正的模式,次處"*.*"和"*.txt"是WIONDOWS用來尋找匹配的欲打開的文件的。我們當能可以指定任何模式,但是不要忘記在結尾處加0以代表字符串已結束,否則您的對話框在操作時可能不穩定。
<P><B>
mov ofn.lpstrFile, OFFSET buffer</B>
<BR><B>
mov ofn.nMaxFile,MAXSIZE</B>
<P>這里是把緩沖區的地址放到結構體中,同時必須設定大小。以后我們可以隨意編輯在該緩沖區中返回的信息。
<P><B>
mov ofn.Flags, OFN_FILEMUSTEXIST or \</B>
<BR><B>
OFN_PATHMUSTEXIST or OFN_LONGNAMES or\</B>
<BR><B>
OFN_EXPLORER or OFN_HIDEREADONLY</B>
<P>Flags 中放入的是對話框的風格和特性值。<BR>其中OFN_FILEMUSTEXIST和
OFN_PATHMUSTEXIST要求用戶在打開對話框的編輯控件中輸入的文件名或路徑名必須存在。<BR>OFN_LONGNAMES 告訴對話框顯示長文件名。
<BR>OFN_EXPLORER 告訴WINDOWS對話框的外觀必須類似資源管理器。<BR>OFN_HIDEREADONLY
指定不要顯示只讀文件(既使它的擴展名符合過濾模式)。 <BR>除此之外,還有許多其它的標志位,您可以參考有關WIN32 API手冊。
<P><B>
mov ofn.lpstrTitle, OFFSET OurTitle</B>
<P>指定打開文件對話框的標題名。
<P><B> invoke
GetOpenFileName, ADDR ofn</B>
<P>調用GetOpenFileName函數,并傳入指向結構體ofn的指針。
<BR>這時候,打開文件對話框就顯示出來了,GetOpenFileName函數要一直等到用戶選擇了一個文件后才會返回,或者當用戶按下了CANCEL鍵或關閉對話框時。<BR>當用戶選擇了打開一個文件時,該函數返回TRUE,
否則返回FALSE。
<P><B> .if
eax==TRUE</B>
<BR><B>
invoke lstrcat,offset OutputString,OFFSET FullPathName</B>
<BR><B>
invoke lstrcat,offset OutputString,ofn.lpstrFile</B>
<BR><B>
invoke lstrcat,offset OutputString,offset CrLf</B>
<BR><B>
invoke lstrcat,offset OutputString,offset FullName</B>
<P>當用戶選擇打開一個文件時,我們就在一個對話框中顯示一個字符串,我們先給OutputString變量分配內存,然后調用PAI
函數lstrcat,把所有的字符串連到一起,為了讓這些字符串分行顯示,我們必須在每個字符串后面加一個換行符。
<P><B>
mov eax,ofn.lpstrFile</B>
<BR><B>
push ebx</B>
<BR><B>
xor ebx,ebx</B>
<BR><B>
mov bx,ofn.nFileOffset</B>
<BR><B>
add eax,ebx</B>
<BR><B>
pop ebx</B>
<BR><B>
invoke lstrcat,offset OutputString,eax</B>
<P>上面這幾行可能需要一些解釋。nFileOffset的值等于被打開文件的全路徑名中的文件名的第一個字符的索引,由于nFileOffset是一個WORD型變量,而lpstrFile是一個DWORD形的指針,所以我們就要作一轉換把nFileOffset存入ebx寄存器的底字節,然后再加到eax寄存器中得到DWORD型的指針。
<P><B>
invoke MessageBox,hWnd,OFFSET OutputString,ADDR AppName,MB_OK</B>
<P>我們在對話框中顯示該字符串。
<P><B>
invoke RtlZerolMemory,offset OutputString,OUTPUTSIZE</B>
<hr size="1">
<div align="center">
<script language="JavaScript1.1" src=http://ad.t2t2.com/textclick.asp?user=bigluo&style=4&bkcolor=no></script>
<br>
</div>
<!-- 10:1 文本廣告交換 -->
<div align="center">
<script language="JavaScript1.1" src=http://coolsite21.com:90/c21.dll?Type=PT&id=1047&col=6&ReferID=1047&v=0></script>
<!-- 10:1 文本廣告交換 --> </div>
<DIV align=center>翻譯:Lxx,阿龍.LuoYunBin's Win32 ASM Page, <A
href="http://asm.yeah.net/">http://asm.yeah.net</A></DIV>
</BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -