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

Windows编程

开发平台:

Visual C++

  1. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  2. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  3. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  4. // PARTICULAR PURPOSE.
  5. //
  6. // Copyright (C) 1993-1997  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. //  MODULE:   about.c
  9. //
  10. //  PURPOSE:   Displays the "About" dialog box
  11. //
  12. //  FUNCTIONS:
  13. //    CmdAbout        - Displays the "About" dialog box
  14. //    About           - Processes messages for "About" dialog box.
  15. //    MsgAboutInit    - To initialize the about box with version info
  16. //                      from resources.
  17. //    MsgAboutCommand - Process WM_COMMAND message sent to the about box.
  18. //    CmdAboutDone    - Free the about box and related data.
  19. //
  20. //  COMMENTS:
  21. //
  22. //
  23. #include <windows.h>            // required for all Windows applications
  24. #include <windowsx.h>
  25. #include <wsipx.h>              // IPX Sockets defs
  26. #include "globals.h"            // prototypes specific to this application
  27. LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
  28. LRESULT MsgAboutInit(HWND, UINT, WPARAM, LPARAM);
  29. LRESULT MsgAboutCommand(HWND, UINT, WPARAM, LPARAM);
  30. LRESULT CmdAboutDone(HWND, WORD, WORD, HWND);
  31. // About dialog message table definition.
  32. MSD rgmsdAbout[] =
  33. {
  34.     {WM_COMMAND,    MsgAboutCommand},
  35.     {WM_INITDIALOG, MsgAboutInit}
  36. };
  37. MSDI msdiAbout =
  38. {
  39.     sizeof(rgmsdAbout) / sizeof(MSD),
  40.     rgmsdAbout,
  41.     edwpNone
  42. };
  43. // About dialog command table definition.
  44. CMD rgcmdAbout[] =
  45. {
  46.     {IDOK,     CmdAboutDone},
  47.     {IDCANCEL, CmdAboutDone}
  48. };
  49. CMDI cmdiAbout =
  50. {
  51.     sizeof(rgcmdAbout) / sizeof(CMD),
  52.     rgcmdAbout,
  53.     edwpNone
  54. };
  55. // Module specific "globals"  Used when a variable needs to be
  56. // accessed in more than on handler function.
  57. HFONT hFontCopyright;
  58. //
  59. //  FUNCTION: CmdAbout(HWND, WORD, WORD, HWND)
  60. //
  61. //  PURPOSE: Displays the "About" dialog box
  62. //
  63. //  PARAMETERS:
  64. //    hwnd      - Window handle
  65. //    wCommand  - IDM_ABOUT (unused)
  66. //    wNotify   - Notification number (unused)
  67. //    hwndCtrl  - NULL (unused)
  68. //
  69. //  RETURN VALUE:
  70. //
  71. //    Always returns 0 - Message handled
  72. //
  73. //  COMMENTS:
  74. //    To process the IDM_ABOUT message, call DialogBox() to display the
  75. //    about dialog box.
  76. LRESULT CmdAbout(HWND hwnd, WORD wCommand, WORD wNotify, HWND hwndCtrl)
  77. {
  78.     DialogBox(hInst, "AboutBox", hwnd, (DLGPROC)About);
  79.     return 0;
  80. }
  81. //
  82. //  FUNCTION: About(HWND, UINT, WPARAM, LPARAM)
  83. //
  84. //  PURPOSE:  Processes messages for "About" dialog box.
  85. //
  86. //  PARAMETERS:
  87. //    hdlg - window handle of the dialog box
  88. //    wMessage - type of message
  89. //    wparam - message-specific information
  90. //    lparam - message-specific information
  91. //
  92. //  RETURN VALUE:
  93. //    TRUE - message handled
  94. //    FALSE - message not handled
  95. //
  96. //  COMMENTS:
  97. //
  98. //     Display version information from the version section of the
  99. //     application resource.
  100. //
  101. //     Wait for user to click on "Ok" button, then close the dialog box.
  102. //
  103. LRESULT CALLBACK About(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam)
  104. {
  105.     return DispMessage(&msdiAbout, hdlg, uMessage, wparam, lparam);
  106. }
  107. //
  108. //  FUNCTION: MsgAboutInit(HWND, UINT, WPARAM, LPARAM)
  109. //
  110. //  PURPOSE: To initialize the about box with version info from resources.
  111. //
  112. //  PARAMETERS:
  113. //    hwnd - The window handing the message.
  114. //    uMessage - The message number. (unused).
  115. //    wparam - Message specific data (unused).
  116. //    lparam - Message specific data (unused).
  117. //
  118. //  RETURN VALUE:
  119. //    Always returns 0 - message handled.
  120. //
  121. //  COMMENTS:
  122. //    Uses the version apis to retrieve version information for
  123. //    each of the static text boxes in the about box.
  124. //
  125. LRESULT MsgAboutInit(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam)
  126. {
  127.     #define POINTSIZE 8
  128.     char  szFullPath[256];
  129.     DWORD dwVerHnd;
  130.     DWORD dwVerInfoSize;
  131.     HDC   hDC;
  132.     int   iLogPixelsY, iPointSize;
  133.     // Center the dialog over the application window
  134.     CenterWindow(hdlg, GetWindow(hdlg, GW_OWNER));
  135.     // Set the copyright font to something smaller than default
  136.     hDC = GetDC(hdlg);
  137.     iLogPixelsY = GetDeviceCaps(hDC, LOGPIXELSY);
  138.     ReleaseDC(hdlg, hDC);
  139.     iPointSize = MulDiv(iLogPixelsY, POINTSIZE, 72);
  140.     iPointSize *= -1;
  141.     hFontCopyright = CreateFont(iPointSize,
  142.                                 0, 0, 0,
  143.                                 FW_DONTCARE,
  144.                                 0, 0, 0, 0,
  145.                                 0, 0, 0, 0,
  146.                                 "System");
  147.     SendDlgItemMessage(hdlg, 
  148.                        IDD_VERLAST, 
  149.                        WM_SETFONT, 
  150.                        (WPARAM)hFontCopyright,
  151.                        0L);
  152.     // Get version information from the application
  153.     GetModuleFileName(hInst, szFullPath, sizeof(szFullPath));
  154.     dwVerInfoSize = GetFileVersionInfoSize(szFullPath, &dwVerHnd);
  155.     if (dwVerInfoSize)
  156.     {
  157.         // If we were able to get the information, process it:
  158.         HANDLE  hMem;
  159.         LPVOID  lpvMem;
  160.         char    szGetName[256];
  161.         int     cchRoot;
  162.         int     i;
  163.         hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
  164.         lpvMem = GlobalLock(hMem);
  165.         GetFileVersionInfo(szFullPath, dwVerHnd, dwVerInfoSize, lpvMem);
  166.         lstrcpy(szGetName, "\StringFileInfo\040904E4\");
  167.         cchRoot = lstrlen(szGetName);
  168.         // Walk through the dialog items that we want to replace:
  169.         for (i = IDD_VERFIRST; i <= IDD_VERLAST; i++)
  170.         {
  171.             BOOL  fRet;
  172.             UINT  cchVer = 0;
  173.             LPSTR lszVer = NULL;
  174.             char  szResult[256];
  175.             GetDlgItemText(hdlg, i, szResult, sizeof(szResult));
  176.             lstrcpy(&szGetName[cchRoot], szResult);
  177.             fRet = VerQueryValue(lpvMem, szGetName, &lszVer, &cchVer);
  178.             if (fRet && cchVer && lszVer)
  179.             {
  180.                 // Replace dialog item text with version info
  181.                 lstrcpy(szResult, lszVer);
  182.                 SetDlgItemText(hdlg, i, szResult);
  183.             }
  184.         }
  185.         GlobalUnlock(hMem);
  186.         GlobalFree(hMem);
  187.     }
  188.     return TRUE;
  189. }
  190. //
  191. //  FUNCTION: MsgAboutCommand(HWND, UINT, WPARAM, LPARAM)
  192. //
  193. //  PURPOSE: Process WM_COMMAND message sent to the about box.
  194. //
  195. //  PARAMETERS:
  196. //    hwnd - The window handing the message.
  197. //    uMessage - The message number. (unused).
  198. //    wparam - Message specific data (unused).
  199. //    lparam - Message specific data (unused).
  200. //
  201. //  RETURN VALUE:
  202. //    Always returns 0 - message handled.
  203. //
  204. //  COMMENTS:
  205. //    Uses this DipsCommand function defined in wndproc.c combined
  206. //    with the cmdiAbout structure defined in this file to handle
  207. //    the command messages for the about dialog box.
  208. //
  209. LRESULT MsgAboutCommand(HWND   hwnd, 
  210.                         UINT   uMessage, 
  211.                         WPARAM wparam, 
  212.                         LPARAM lparam)
  213. {
  214.     return DispCommand(&cmdiAbout, hwnd, wparam, lparam);
  215. }
  216. //
  217. //  FUNCTION: CmdAboutDone(HWND, WORD, HWND)
  218. //
  219. //  PURPOSE: Free the about box and related data.
  220. //
  221. //  PARAMETERS:
  222. //    hwnd - The window handling the command.
  223. //    wCommand - The command to be handled (unused).
  224. //    wNotify   - Notification number (unused)
  225. //    hwndCtrl - NULL (unused).
  226. //
  227. //  RETURN VALUE:
  228. //    Always returns TRUE.
  229. //
  230. //  COMMENTS:
  231. //    Calls EndDialog to finish the dialog session.
  232. //
  233. LRESULT CmdAboutDone(HWND hdlg, WORD wCommand, WORD wNotify, HWND hwndCtrl)
  234. {
  235.     if (hFontCopyright)
  236.        DeleteObject(hFontCopyright);
  237.     EndDialog(hdlg, TRUE);          // Exit the dialog
  238.     return TRUE;
  239. }