将MASM32与Win32一起使用,如何将路径和文件名添加到对话框的标题中,然后在文件关闭时删除添加的信息?



我使用Win32 lstrcat指令将我的对话框标题(即AppName)与路径&在对话框中打开的文件的文件名(即ofn.lpstrFile),然后使用Win32 SetWindowText指令将对话框的标题更改为Appname的连接版本。我遇到的问题是,我无法删除路径&在关闭文件时,从对话框标题中获取文件名称。此外,其他消息框的标题和文字都被意外地改变了,我不明白为什么。

当我关闭文件时,我试着用我在执行连接之前保存的原始AppName的副本复制AppName的连接版本,但这似乎消除了原始标题和路径名称的一部分,留下了路径&对话框标题中的文件名。我还尝试为其他消息框的标题引用不同的变量名称,但它们仍然显示连接的字符串。

下面的代码是我尝试过的程序的最新版本。

ChangeDialogBoxTitle PROC hWnd
; Copy Current Title
push esi
push edi
invoke lstrlen,addr AppName
mov ecx,eax
LEA esi, AppName
LEA edi, AppNameDUP
push ds
pop es
cld
rep movsb [edi],[esi]
pop edi
pop esi
; CLEAR Current Title
push esi
push edi
invoke lstrlen,addr AppName
mov ecx,eax
LEA esi, BLANK
LEA edi, AppName
push ds
pop es
cld
rep movsb [edi],[esi]
pop edi
pop esi

; Replace AppName with AppNameDUP
push esi
push edi
invoke lstrlen,addr AppName
mov ecx,eax
LEA esi, AppNameDUP
LEA edi, AppName
push ds
pop es
cld
rep movsb [edi],[esi]
pop edi
pop esi

; Add file info
.IF ActiveFileFlag==1
invoke lstrcat,addr AppName,ofn.lpstrFile
invoke SetWindowText,hWnd,AppName
.ENDIF
invoke SetFocus,hTextInput
Ret
ChangeDialogBoxTitle endp
<代码>

解决这个问题的关键是确保连接字符串的缓冲区足够大,可以容纳两个字符串。因此,我定义了一个名为AppNameBuffer的新变量,并在程序的。data段中将其定义为:

;******************************************************************************
; DISPLAY File Path/Name in Dialog Box Title Bar
;******************************************************************************
; BEFORE adding the PATH & FILENAME, copy ORIGINAL AppName 
; into AppNameBuffer from the DUPLICATE COPY in AppNameDUP
invoke lstrcpy,addr AppNameBuffer,addr AppNameDUP
; Concatenate file path & name string of opened file to application name
; string
invoke lstrcat, addr AppNameBuffer, ofnSA.lpstrFile 
; Set the text in the Dialog Box Title Bar to the concatentated version of 
; AppNameBuffer
invoke SetWindowText,hDlg,addr AppNameBuffer
;******************************************************************************

加上这个,下面的代码工作得很好:

PP_4

相关内容

  • 没有找到相关文章

最新更新