我使用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
1条答案
按热度按时间hgncfbus1#
解决这个问题的关键是确保连接字符串的缓冲区足够大,可以容纳两个字符串,因此我定义了一个名为AppNameBuffer的新变量,并在程序的.data段中将其定义为:
在添加了这个代码之后,下面的代码运行良好: