GetOpenfilename 的使用
<P>帮忙看看,以下的代码问题出在哪里?</P><P>s_openfilename openfilename</P>
<P>OpenFilename.lStructSize = 260<BR>OpenFilename.hwndOwner = GetForegroundWindow()<BR>OpenFilename.hInstance = Handle(GetApplication())<BR>OpenFilename.lpstrFilter = "所有文件"<BR>OpenFilename.nFilterIndex = 1 <BR>OpenFilename.lpstrFile = Space(254)<BR>OpenFilename.nMaxFile = 255<BR>OpenFilename.lpstrFileTitle = OpenFilename.lpstrFile <BR>OpenFilename.nMaxFileTitle = OpenFilename.nMaxFile <BR>OpenFilename.lpstrInitialDir = "C:\" <BR>OpenFilename.lpstrTitle = "打开文件"<BR>OpenFilename.flags = 0</P>
<P><BR>return GetOpenfilename(openfilename)</P> <P>你用的是一个对象吧?</P>
<P>pb里有一个GetFileOpenName,也很好用的</P> 阿辉 发表于 2005-10-8 09:52
你用的是一个对象吧?
pb里有一个GetFileOpenName,也很好用的
PB内部的函数运行倒是正常,但有2个问题:一是不能改变窗口大小,即查找文件时很不方便,这也是PB系统中多处函数、说明的通病,
二是不能居中显示。但OS的GetFileOpenName要使用内存操作才能运行,但内存操作常使程序异常中止(内存不能read之类的)。
Long ll_rc
Long MAX_BUFFER_LENGTH = 256
Integer li_Start, li_TabPos
String ls_Token
String Filter
long ll_len
String ls_bmp, ls_bitmapfilename
//定义OPENFILENAME类型的结构变量
OPENFILENAME OFName
//定义过滤文件的类型
Filter = "Text Files (*.txt)~t*.TXT~tBitmap files (*.bmp)~t*.BMP~tRTF files (*.rtf)~t*.RTF"
//为结构成员lpstrFilter分配内存
OFName.lpstrFilter = LocalAlloc(LMEM_ZEROINIT,Len(Filter) + 2) // 以两个NULL字符结尾
If OFName.lpstrFilter = 0 Then
MessageBox("错误","无法分配所需的内存!",StopSign!,Ok!)
End If
//将制表符~t转换为Null分隔符
li_Start= 1
li_TabPos = Pos(Filter,"~t",1)
Do While li_TabPos > 0
ls_Token = Mid(Filter,li_Start,li_TabPos - li_Start)
StrCopy(OFName.lpstrFilter + (li_Start - 1), ls_Token, Len(ls_Token))
li_Start = li_TabPos + 1
li_TabPos = Pos(Filter,"~t",li_TabPos + 1)
Loop
ls_Token = Mid(Filter,li_Start)
StrCopy(OFName.lpstrFilter + (li_Start - 1),ls_Token,Len(ls_Token))
//设置结构的大小
OFName.lStructSize = 76
//设置父窗口为对话框的属主
OFName.hwndOwner = Handle(Parent)
//设置应用实例,在PB中设置为0
OFName.hInstance = 0
OFName.lpstrFile = ""
OFName.nMaxFile = MAX_BUFFER_LENGTH - 1
OFName.lpstrFileTitle = Space(MAX_BUFFER_LENGTH)
OFName.nMaxFileTitle = MAX_BUFFER_LENGTH - 1
//设置初始化目录
OFName.lpstrInitialDir = "C:\"
//设置对话框标题
OFName.lpstrTitle = "打开文件"
OFName.nFilterIndex = 1
//设置标识符
OFName.flags = 0
//显示打开对话框
ll_rc = GetOpenFileName(OFName)
//判断用户的操作
If ll_rc = 1 Then
//显示用户选择的文件名在文本框中
sle_1.Text = RightTrim(OFName.lpstrFile)
//显示文件内容在文本编辑框中
ll_len = Len(Trim(sle_1.Text))
ls_bmp = Mid(Trim(sle_1.Text), ll_len - 2, 3)
If ls_bmp = "bmp" or ls_bmp = "BMP" Then
//如果为位图文件,将位图插入到RichText控件
rte_1.InsertPicture(trim(sle_1.Text))
Else
//将打开的文本文件或RTF文件插入到RichText控件
rte_1.InsertDocument(sle_1.Text, TRUE)
End If
Else
MessageBox("打开文件: ","按下取消按钮")
End If
//释放内存
LocalFree(OFName.lpstrFilter)
--------------摘自《Win32 API程序设计 基础卷》\第13章 文件及文件夹选择对话框\GetOpenFile_API
楼主上的代码第一行就是错的
s_openfilename openfilename
结构类名应放行前,实例名放在行后
OPENFILENAME OFName
页:
[1]