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

7uzetpgm  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(161)

我使用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
hgncfbus

hgncfbus1#

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

AppNameBuffer db 512 DUP (" "),0

在添加了这个代码之后,下面的代码运行良好:

;******************************************************************************
; 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
;******************************************************************************

相关问题