站点首页 | 实用文章 | 考试相关 | 论文中心 | 故事小说 | 教程中心
热门文章
搜索
您现在的位置: hglm >> 教程中心 >> 编程技术 >> Visual Foxpro >> 教程正文
利用API函数访问INI文件
一个完善的Windows应用程序都有其自己的INI初始化文件,专门用于存储系统的配置信息或状态信息。因此,许多编程者都希望在自己的应用程序中引入INI文件。

  下面笔者通过示例说明,在VFP中如何在自己的应用程序中访问INI文件。

  INI文件格式和相关API函数

  首先介绍一下INI初始化文件的通用格式,在Windows中,初始化文件通用格式如下:

  [application name]

  Keyname=String

  …

  在WIN32的API函数集中,专用于访问INI初始化文件的接口函数有许多,笔者将详细介绍GetPrivateProfileString和WritePrivateProfileString两个函数:

  DWORD GetPrivateProfileString(LPTSTR lpAppName,LPTSTR lpKeyName,

  LPTSTR lpDefault,LPTSTR lpReturnedString,

  DWORD dwSize,LPTSTR lpFileName)

  该函数在指定的初始化文件(lpFileName)中查找一个关键字,该关键字与在lpAppName参数给出的应用程序标题下有lpKeyName参数指定的名称匹配。如果找到关键字,相应的字符串被拷贝到缓冲区中,如果关键字不存在,则将lpDefault参数指定的缺省字符串拷贝到缓冲区中。

  BOOL WritePrivateProfileString(LPTSTR lpAppName,LPTSTR lpKeyName,

  LPTSTR lpString,LPTSTR lpFileName)

  该函数在指定的初始化文件(lpFileName)中查找参数lpAppName指定的应用程序标题,并在此标题下查找参数lpKeyName指定的键名,用lpString的值指定该键值;如果初始化文件中没有该标题或键,则函数将自动加入相应内容。

  VFP中API函数的应用

  首先需要对应用的API函数进行引用声明,通常放在程序的主文件中,声明如下:

  DECLARE INTEGER GetPrivateProfileString IN Win32API AS GetPrivStr ;

  String cSection, String cKey, String cDefault, String @cBuffer, ;

  Integer nBufferSize, String cINIFile

  DECLARE INTEGER WritePrivateProfileString IN Win32API AS WritePrivStr ;

  String cSection, String cKey, String cValue, String cINIFile

  引用声明之后,函数就可以以自定义的名称应用了:

  WritePrivStr("Defaults", "Test","This is a test", CURDIR() + "TEST.INI")

  LOCAL lcBuffer, ;

  GetPrivStr("Defaults","Test", "", @lcBuffer, LEN(lcBuffer), CURDIR()+"Test.INI")

  INI在VFP中的应用实例

  下面是在对工具栏进行关闭操作时,用以记忆工具栏的停放位置,以用于下次打开工具栏时停放:

  cToolbar.Destroy

  LOCAL lcValue

  IF this.Docked

  lcValue = ALLT(STR(this.DockPosition))

  ELSE

  lcValue = ALLT(STR(thisform.Top)) + ‘,‘ + ;

  ALLT(STR(thisform.Left))

  ENDIF

  WritePrivStr("WindowPositions", this.Caption, ;lcValue, CURDIR() + "TEST.INI")

  以下代码是当打开工具栏时,自动读取上次关闭时的停放位置,并把工具栏停放到该位置上:

  cToolbar.Init

  IF GetPrivStr("WindowPositions", this.Caption, "", ;

  @lcBuffer, LEN(lcBuffer), ;

  CURDIR() +"TEST.INI") 〉 0

  lnCommaPos = AT(",", lcBuffer)

  IF lnCommaPos 〉 0

  lnTop = VAL(LEFT(lcBuffer, lnCommaPos - 1))

  lnLeft = VAL(SUBSTR(lcBuffer,lnCommaPos + 1))

     ELSE

       lnDockPosition = VAL(lcBuffer)

     ENDIF

       this.Top = lnTop

       this.Left = lnLeft

       this.Dock(lnDockPosition)

    ENDIF

  通过以上程序,我们就成功实现了在VFP应用程序中引入INI文件。

Copyright(c) hglm.com All rights reserved. 浙ICP备06001730号