INI.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:11k
源码类别:

Windows编程

开发平台:

Visual C++

  1. //*---------------------------------------------------------------------------------
  2. //|  ODBC System Administrator
  3. //|
  4. //|  This code is furnished on an as-is basis as part of the ODBC SDK and is
  5. //|  intended for example purposes only.
  6. //|
  7. //|   Title:   INI.C
  8. //|      This module contains the functions which work with SATOOL.INI.
  9. //*---------------------------------------------------------------------------------
  10. #include "ini.h"
  11. #include "results.h"
  12. #include <commdlg.h>
  13. //*---------------------------------------------------------------------------------
  14. //|   Global variables
  15. //*---------------------------------------------------------------------------------
  16. dCSEG(char) szLABINI[]                       = "ADMNDEMO.INI";
  17. dCSEG(char) szSCREEN[]                       = "screen";
  18. dCSEG(char) szMAX[]                          = "Maximized";
  19. dCSEG(char) szCONNECTOPTIONS[]               = "Connect Options";
  20. dCSEG(char) szMAXRESULTS[]                   = "Max Results Windows";
  21. dCSEG(char) szFONT[]                         = "Font";
  22. dCSEG(char) szFONTSIZE[]                     = "FontSize";
  23. dCSEG(char) szFONTWEIGHT[]                   = "FontWeight";
  24. dCSEG(char) szFONTNAME[]                     = "FontName";
  25. dCSEG(char) szFONTRGB[]                      = "FontColor";
  26. dCSEG(char) szSTRIKEOUT[]                    = "FontStrikeOut";
  27. dCSEG(char) szUNDERLINE[]                    = "FontUnderline";
  28. dCSEG(char) szFONTSTYLE[]                    = "FontStyle";
  29. dCSEG(char) szPIPES[]                        = "Pipes";
  30. dCSEG(char) szRegular[]                      = "Regular";
  31. dCSEG(char) szArial[]                        = "Arial";
  32. dCSEG(char) szMSSansSerif[]                  = "MS Sans Serif";
  33. dCSEG(char) szINSTALL[]                      = "Installed";
  34. dCSEG(char) szDROPPROC[]                     = "Drop Procedure (with semi-colon)";
  35. dCSEG(char) szDROPTABLE[]                    = "Drop Table";
  36. dCSEG(char) szSQLSECTION[]                   = "Sql";
  37. dCSEG(char) szPARMSSECTION[]                 = "Parms";
  38. dCSEG(char) szPARMOPTSECTION[]               = "ParmOpt";
  39. dCSEG(char) szDELETESECTION[]                = "Delete";
  40. dCSEG(char) szSQLDROPSTMT[]                  = "drop procedure ?";
  41. dCSEG(char) szSQLDROPTABLESTMT[]             = "drop table ?";
  42. dCSEG(char) szPARMVALUE[]                    = "value";
  43. dCSEG(char) szPARM1[]                        = "1";
  44. dCSEG(char) szPARM3[]                        = "3";
  45. //*---------------------------------------------------------------------------------
  46. //|   Local Functions
  47. //*---------------------------------------------------------------------------------
  48. LPSTR GetFontStyle(LPSTR szStyle, int cbStyle);
  49. void SetDefaultFont(LOGFONT FAR * lf);
  50. void SetDefaultRGB(COLORREF rgb);
  51. void SetFontStyle(LPSTR szFontStyle);
  52. //*---------------------------------------------------------------------------------
  53. //| ResolveIniFile:
  54. //|   Look for ADMNDEMO.INI, if not found, fill out the defaults.
  55. //| Parms:
  56. //|   Nothing
  57. //| Returns:
  58. //|   Nothing.
  59. //*---------------------------------------------------------------------------------
  60. VOID INTFUN ResolveIniFile()
  61. {
  62.    // Max status is written after every exit, so if this constant cannot
  63.    // be found, there is no file to find.
  64.    if(GetPrivateProfileInt(szSCREEN, szMAX, -1, szLABINI) == -1) {
  65.       // No file, create one
  66.       WritePrivateProfileString(szPIPES, szDROPPROC, szINSTALL, szLABINI);
  67.       WritePrivateProfileString(szDROPPROC, szSQLSECTION, szSQLDROPSTMT, szLABINI);
  68.       WritePrivateProfileString(szDROPPROC, szPARMSSECTION, szPARM3, szLABINI);
  69.       WritePrivateProfileString(szDROPPROC, szPARMOPTSECTION, szPARMVALUE, szLABINI);
  70.       WritePrivateProfileString(szDROPPROC, szDELETESECTION, szPARM1, szLABINI);
  71.       WritePrivateProfileString(szPIPES, szDROPTABLE, szINSTALL, szLABINI);
  72.       WritePrivateProfileString(szDROPTABLE, szSQLSECTION, szSQLDROPTABLESTMT, szLABINI);
  73.       WritePrivateProfileString(szDROPTABLE, szPARMSSECTION, szPARM3, szLABINI);
  74.       WritePrivateProfileString(szDROPTABLE, szPARMOPTSECTION, szPARMVALUE, szLABINI);
  75.       WritePrivateProfileString(szDROPTABLE, szDELETESECTION, szPARM1, szLABINI);
  76.    }
  77. }
  78. //*---------------------------------------------------------------------------------
  79. //| GetDefaultFont:
  80. //|   This function will retrieve all of the font information that is stored in
  81. //|   the .INI file and places it in the LOGFONT structure passed in.
  82. //|   NOTE:  User should clear the LOGFONT structure to 0 (eg: fmemset(&lf, 0,sizeof())
  83. //|     before calling this function.  The font name buffer must point to a user's
  84. //|     allocated buffer.
  85. //| Parms:
  86. //|   in       lf             LOGFONT structure
  87. //| Returns:
  88. //|   Pointer to the LOGFONT structure passed in or NULL on error.
  89. //*---------------------------------------------------------------------------------
  90. LOGFONT FAR * GetDefaultFont(LOGFONT FAR * lf)
  91. {
  92.    lf->lfHeight = GetPrivateProfileInt(szFONT, szFONTSIZE, -12, szLABINI);
  93.    lf->lfWeight = GetPrivateProfileInt(szFONT, szFONTWEIGHT, FW_NORMAL, szLABINI);
  94.    lf->lfStrikeOut = GetPrivateProfileInt(szFONT, szSTRIKEOUT, 0, szLABINI);
  95.    lf->lfUnderline = GetPrivateProfileInt(szFONT, szUNDERLINE, 0, szLABINI);
  96.    lf->lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;
  97.    if(!GetPrivateProfileString(szFONT, szFONTNAME, NULL,
  98.                                lf->lfFaceName, LF_FACESIZE, szLABINI))
  99.       lstrcpy(lf->lfFaceName, (LPSTR)szArial);
  100.    return lf;
  101. }
  102. //*---------------------------------------------------------------------------------
  103. //| SetDefaultFont:
  104. //|   This function uses the values in the LOGFONT structure passed in to write the
  105. //|   default values to the .INI file.
  106. //| Parms:
  107. //|   in       lf             LOGFONT structure
  108. //| Returns:
  109. //|   Nothing
  110. //*---------------------------------------------------------------------------------
  111. void SetDefaultFont(LOGFONT FAR * lf)
  112. {
  113.    char  szTmp[20];
  114.    char  szpd[] = "%d";
  115.    wsprintf(szTmp, szpd, lf->lfHeight);
  116.    WritePrivateProfileString(szFONT, szFONTSIZE, szTmp, szLABINI);
  117.    wsprintf(szTmp, szpd, lf->lfWeight);
  118.    WritePrivateProfileString(szFONT, szFONTWEIGHT, szTmp, szLABINI);
  119.    wsprintf(szTmp, szpd, lf->lfStrikeOut);
  120.    WritePrivateProfileString(szFONT, szSTRIKEOUT, szTmp, szLABINI);
  121.    wsprintf(szTmp, szpd, lf->lfUnderline);
  122.    WritePrivateProfileString(szFONT, szUNDERLINE, szTmp, szLABINI);
  123.    WritePrivateProfileString(szFONT, szFONTNAME, lf->lfFaceName, szLABINI);
  124. }
  125. //*---------------------------------------------------------------------------------
  126. //| GetDefaultRGB:
  127. //|   This function will retrieve the default rgbvalue from the ini file.
  128. //| Parms:
  129. //|   Nothing.
  130. //| Returns:
  131. //|   A COLORREF value that can be used for color.
  132. //*---------------------------------------------------------------------------------
  133. COLORREF GetDefaultRGB(void)
  134. {
  135.    COLORREF dft;
  136.    LPSTR    lpsz;
  137.    char     szBuff[20];
  138.    if(!GetPrivateProfileString(szSCREEN, szFONTRGB, NULL,
  139.                                szBuff, sizeof(szBuff), szLABINI))
  140.       dft = RGB(0,0,0);          // If not specified, use Black
  141.    else
  142.       dft = strtoul(szBuff, &lpsz, 10);
  143.    return dft;
  144. }
  145. //*---------------------------------------------------------------------------------
  146. //| SetDefaultRGB:
  147. //|   This function will set the default RGB value which will be used for
  148. //|   color.
  149. //| Parms:
  150. //|   in       rgb                  The rgb value to use
  151. //| Returns:
  152. //|   Nothing
  153. //*---------------------------------------------------------------------------------
  154. void SetDefaultRGB(COLORREF rgb)
  155. {
  156.    char     szBuff[20];
  157.    wsprintf(szBuff, "%lu", rgb);
  158.    WritePrivateProfileString(szSCREEN, szFONTRGB,
  159.                              szBuff, szLABINI);
  160. }
  161. //*---------------------------------------------------------------------------------
  162. //| GetFontStyle:
  163. //|   This function will copy the default font style to the user's buffer.
  164. //| Parms:
  165. //|   in       szStyle                 Pointer to output for font sytle
  166. //|   in       cbStyle                 Maximum size of buffer
  167. //| Returns:
  168. //|   Style to use, NULL otherwise
  169. //*---------------------------------------------------------------------------------
  170. LPSTR GetFontStyle(LPSTR szStyle, int cbStyle)
  171. {
  172.    if(!GetPrivateProfileString(szSCREEN, szFONTSTYLE, NULL,
  173.                                szStyle, cbStyle, szLABINI))
  174.       lstrcpy(szStyle, (LPSTR)szRegular);
  175.    return szStyle;
  176. }
  177. //*---------------------------------------------------------------------------------
  178. //| SetFontStyle:
  179. //|   This function will set the default font style.
  180. //| Parms:
  181. //|   in       szFontStyle          The new font style
  182. //| Returns:
  183. //|   Nothing
  184. //*---------------------------------------------------------------------------------
  185. void SetFontStyle(LPSTR szFontStyle)
  186. {
  187.    WritePrivateProfileString(szSCREEN, szFONTSTYLE,
  188.                              szFontStyle, szLABINI);
  189. }
  190. //*---------------------------------------------------------------------------------
  191. //| GetPipeNames:
  192. //|   This function will get as many pipes as will fit into the user's
  193. //|   buffer.  The list is simply retrieve via GetPrivateProfileString
  194. //|   and therefore each pipe name will be null terminated with 2 nulls
  195. //|   at the end of the entire list.
  196. //| Parms:
  197. //|   in       szPipes                 Pointer to string to hold names
  198. //|   in       size                    Maximum size of pipe string
  199. //| Returns:
  200. //|   Nothing
  201. //*---------------------------------------------------------------------------------
  202. void GetPipeNames(LPSTR szPipes, int size)
  203. {
  204.    if(!GetPrivateProfileString(szPIPES, NULL, NULL, szPipes, size,
  205.                                szLABINI))
  206.       *szPipes = '';
  207. }
  208. //*---------------------------------------------------------------------------------
  209. //| PromptForFontName:
  210. //|   This function will prompt the user for a font style and name.
  211. //| Parms:
  212. //|   in       szPipes                 Pointer to string to hold names
  213. //|   in       size                    Maximum size of pipe string
  214. //| Returns:
  215. //|   Nothing
  216. //*---------------------------------------------------------------------------------
  217. void PromptForFontName(HWND hwndOwner)
  218. {
  219.    CHOOSEFONT     cf;
  220.    LOGFONT        lf;
  221.    HWND           fHwnd=GetFocus();
  222.    char           lpszStyle[LF_FACESIZE];
  223.    memset(&lf, 0, sizeof(LOGFONT));
  224.    memset(&cf, 0, sizeof(CHOOSEFONT));
  225.    cf.lpLogFont = (LOGFONT FAR *)&lf;
  226.    cf.lpszStyle = (LPSTR)lpszStyle;
  227.    GetDefaultFont(&lf);
  228.    cf.lStructSize = sizeof(CHOOSEFONT);
  229.    cf.hwndOwner = hwndOwner;
  230.    cf.Flags = CF_SCREENFONTS | CF_EFFECTS | CF_INITTOLOGFONTSTRUCT;
  231.    cf.rgbColors = GetDefaultRGB();
  232.    cf.nFontType = SCREEN_FONTTYPE;
  233.    GetFontStyle(cf.lpszStyle, LF_FACESIZE);
  234.    if(ChooseFont(&cf)) {
  235.       SetDefaultFont(&lf);
  236.       SetDefaultRGB(cf.rgbColors);
  237.       SetFontStyle(cf.lpszStyle);
  238.    }
  239.    if(fHwnd)
  240.       SetFocus(fHwnd);
  241. }