有初始文件名使用GetSaveFileName的问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 21:10:42
我希望“另存为”对话框出来的时候带默认的文件名,于是我设置了ofn.lpstrFile="123",ofn.nMaxFile=512,但是问题就来了,ofn.nMaxFile=512好像没什么作用,调用GetSaveFileName后,ofn.lpstrFile返回的字符串只有路径的前三个字符,也就是说函数把原来设置的ofn.lpstrFile="123"的长度给用了,缓冲区大小只有3。
网上找到的代码全是设置ofn.lpstrFile=String(255, 0)之类,这样就不能设置初始文件名了,问一下怎样才能既设置初始文件名,又能返回正常的完整的文件路径?
------------------------------------------------------------------------------
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrIniti

改两个地方。
1. .lpstrFile = "123"改为 .lpstrFile = "123" & String(255 - 3, vbNullChar)
其中,255固定不变,3是“123”长度,也就是说,保持.lpstrFile长度为255
2. .nMaxFile = 512 改为 .nMaxFile = Len(.lpstrFile)
这一处可改可不改,建议改,因为这样才能让理论长度与实际长度对应,节省内存。
这样改过之后,就没有问题了。

定义一个字符串变量。让这个变量等于 “123”,长度是 512

用指针让 lpstrFile 指向这个变量。