我们编写程序的时候,经常会要求快速读取数据和写入数据,下面这个例子演示了使用winApi操作ini配置文件的过程。
主要用到了两个函数:
Getprivateprofilestring 获取数据字符串,函数用法请看例子。
WritePrivateProfileString 写入数据节点字符串,函数用法请看例子。
请看完整的例子,首选说明下,这个例子程序运行后就是显示一个窗口,显示窗口之前,从ini文件获取数据,然后按照读取的数据显示确定的位置,大小的窗口。关闭程序的时候,将窗口位置,大小数据保存到配置文件。
'可用的程序例子:
#Compiler PBWin 10
#Compile Exe
#Dim All
%Unicode = 1
#Include "Win32API.inc"
Global hDlg,Zoomed As Dword
Function PBMain() As Long
'创建窗口
Dialog New Pixels, 0, "PowerBASIC",300,300,200,200, %WS_OverlappedWindow To hDlg
'显示模态窗口
Dialog Show Modal hDlg Call DlgProc
End Function
CallBack Function DlgProc() As Long
Select Case Cb.Msg
Case %WM_InitDialog
'程序初始化事件中,从ini配置文件中获取窗口大小和位置数据
Settings_INI "get"
If Zoomed = %SW_ShowMaximized Then Dialog Maximize hDlg
If Zoomed = %SW_ShowMinimized Then Dialog Minimize hDlg
Case %WM_Destroy
'程序窗口毁灭事件中,将窗口大小和位置数据保存到ini配置文件中。
Settings_INI "save"
End Select
End Function
Sub Settings_INI(Task$)
Local WinPla As WindowPlacement, xResult, yResult, temp, INIFileName As WStringZ*%Max_Path
INIFileName = Exe.Path$ + Exe.Name$ + ".ini"
If Task$ = "get" Then
'获取left和top数据之后,设置窗口左边和上面距离
Getprivateprofilestring "All", "Left", "300", xResult, %Max_Path, INIFileName
Getprivateprofilestring "All", "Top", "300", yResult, %Max_Path, INIFileName
Dialog Set Loc hDlg, Val(xResult), Val(yResult) 'left/top
'获取width和height数据,设置窗口的宽度和高度
GetPrivateProfileString "All", "Width", "400", xResult, %Max_Path, INIFileName
GetPrivateProfileString "All", "Height", "200", yResult, %Max_Path, INIFileName
Dialog Set Size hDlg,Val(xResult), Val(yResult) 'width/height
Getprivateprofilestring "All", "Zoomed", Str$(%SW_ShowNormal), temp, %Max_Path, INIFileName: Zoomed = Val(temp)
End If
If Task$ = "save" Then
'保存窗口的位置和快读高度数据,还有是否最小化状态数据
WinPla.Length = SizeOf(WinPla)
GetWindowPlacement hDlg, WinPla
WritePrivateProfileString "All", "Left", Str$(WinPla.rcNormalPosition.nLeft), INIFileName
WritePrivateProfileString "All", "Top", Str$(WinPla.rcNormalPosition.nTop), INIFileName
WritePrivateProfileString "All", "Width", Str$(WinPla.rcNormalPosition.nRight - WinPla.rcNormalPosition.nLeft), INIFileName
WritePrivateProfileString "All", "Height", Str$(WinPla.rcNormalPosition.nBottom - WinPla.rcNormalPosition.nTop), INIFileName
WritePrivateProfileString "All", "Zoomed",Str$(WinPla.showCmd), INIFileName
End If
End Sub