www.pudn.com > ipxchat.zip > ABOUT.C, change:1997-10-05,size:7815b


// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
// PARTICULAR PURPOSE. 
// 
// Copyright (C) 1993-1997  Microsoft Corporation.  All Rights Reserved. 
// 
//  MODULE:   about.c 
// 
//  PURPOSE:   Displays the "About" dialog box 
// 
//  FUNCTIONS: 
//    CmdAbout        - Displays the "About" dialog box 
//    About           - Processes messages for "About" dialog box. 
//    MsgAboutInit    - To initialize the about box with version info 
//                      from resources. 
//    MsgAboutCommand - Process WM_COMMAND message sent to the about box. 
//    CmdAboutDone    - Free the about box and related data. 
// 
//  COMMENTS: 
// 
// 
 
#include <windows.h>            // required for all Windows applications 
#include <windowsx.h> 
#include <wsipx.h>              // IPX Sockets defs 
#include "globals.h"            // prototypes specific to this application 
 
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); 
LRESULT MsgAboutInit(HWND, UINT, WPARAM, LPARAM); 
LRESULT MsgAboutCommand(HWND, UINT, WPARAM, LPARAM); 
LRESULT CmdAboutDone(HWND, WORD, WORD, HWND); 
 
// About dialog message table definition. 
MSD rgmsdAbout[] = 
{ 
    {WM_COMMAND,    MsgAboutCommand}, 
    {WM_INITDIALOG, MsgAboutInit} 
}; 
 
MSDI msdiAbout = 
{ 
    sizeof(rgmsdAbout) / sizeof(MSD), 
    rgmsdAbout, 
    edwpNone 
}; 
 
// About dialog command table definition. 
CMD rgcmdAbout[] = 
{ 
    {IDOK,     CmdAboutDone}, 
    {IDCANCEL, CmdAboutDone} 
}; 
 
CMDI cmdiAbout = 
{ 
    sizeof(rgcmdAbout) / sizeof(CMD), 
    rgcmdAbout, 
    edwpNone 
}; 
 
// Module specific "globals"  Used when a variable needs to be 
// accessed in more than on handler function. 
 
HFONT hFontCopyright; 
 
// 
//  FUNCTION: CmdAbout(HWND, WORD, WORD, HWND) 
// 
//  PURPOSE: Displays the "About" dialog box 
// 
//  PARAMETERS: 
//    hwnd      - Window handle 
//    wCommand  - IDM_ABOUT (unused) 
//    wNotify   - Notification number (unused) 
//    hwndCtrl  - NULL (unused) 
// 
//  RETURN VALUE: 
// 
//    Always returns 0 - Message handled 
// 
//  COMMENTS: 
//    To process the IDM_ABOUT message, call DialogBox() to display the 
//    about dialog box. 
 
LRESULT CmdAbout(HWND hwnd, WORD wCommand, WORD wNotify, HWND hwndCtrl) 
{ 
    DialogBox(hInst, "AboutBox", hwnd, (DLGPROC)About); 
    return 0; 
} 
 
 
// 
//  FUNCTION: About(HWND, UINT, WPARAM, LPARAM) 
// 
//  PURPOSE:  Processes messages for "About" dialog box. 
// 
//  PARAMETERS: 
//    hdlg - window handle of the dialog box 
//    wMessage - type of message 
//    wparam - message-specific information 
//    lparam - message-specific information 
// 
//  RETURN VALUE: 
//    TRUE - message handled 
//    FALSE - message not handled 
// 
//  COMMENTS: 
// 
//     Display version information from the version section of the 
//     application resource. 
// 
//     Wait for user to click on "Ok" button, then close the dialog box. 
// 
 
LRESULT CALLBACK About(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam) 
{ 
    return DispMessage(&msdiAbout, hdlg, uMessage, wparam, lparam); 
} 
 
 
// 
//  FUNCTION: MsgAboutInit(HWND, UINT, WPARAM, LPARAM) 
// 
//  PURPOSE: To initialize the about box with version info from resources. 
// 
//  PARAMETERS: 
//    hwnd - The window handing the message. 
//    uMessage - The message number. (unused). 
//    wparam - Message specific data (unused). 
//    lparam - Message specific data (unused). 
// 
//  RETURN VALUE: 
//    Always returns 0 - message handled. 
// 
//  COMMENTS: 
//    Uses the version apis to retrieve version information for 
//    each of the static text boxes in the about box. 
// 
 
LRESULT MsgAboutInit(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam) 
{ 
    #define POINTSIZE 8 
 
    char  szFullPath[256]; 
    DWORD dwVerHnd; 
    DWORD dwVerInfoSize; 
    HDC   hDC; 
    int   iLogPixelsY, iPointSize; 
 
    // Center the dialog over the application window 
    CenterWindow(hdlg, GetWindow(hdlg, GW_OWNER)); 
 
    // Set the copyright font to something smaller than default 
    hDC = GetDC(hdlg); 
    iLogPixelsY = GetDeviceCaps(hDC, LOGPIXELSY); 
    ReleaseDC(hdlg, hDC); 
    iPointSize = MulDiv(iLogPixelsY, POINTSIZE, 72); 
    iPointSize *= -1; 
 
    hFontCopyright = CreateFont(iPointSize, 
                                0, 0, 0, 
                                FW_DONTCARE, 
                                0, 0, 0, 0, 
                                0, 0, 0, 0, 
                                "System"); 
 
    SendDlgItemMessage(hdlg,  
                       IDD_VERLAST,  
                       WM_SETFONT,  
                       (WPARAM)hFontCopyright, 
                       0L); 
 
    // Get version information from the application 
    GetModuleFileName(hInst, szFullPath, sizeof(szFullPath)); 
    dwVerInfoSize = GetFileVersionInfoSize(szFullPath, &dwVerHnd); 
    if (dwVerInfoSize) 
    { 
        // If we were able to get the information, process it: 
        HANDLE  hMem; 
        LPVOID  lpvMem; 
        char    szGetName[256]; 
        int     cchRoot; 
        int     i; 
 
        hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize); 
        lpvMem = GlobalLock(hMem); 
        GetFileVersionInfo(szFullPath, dwVerHnd, dwVerInfoSize, lpvMem); 
        lstrcpy(szGetName, "\\StringFileInfo\\040904E4\\"); 
        cchRoot = lstrlen(szGetName); 
 
        // Walk through the dialog items that we want to replace: 
        for (i = IDD_VERFIRST; i <= IDD_VERLAST; i++) 
        { 
            BOOL  fRet; 
            UINT  cchVer = 0; 
            LPSTR lszVer = NULL; 
            char  szResult[256]; 
 
            GetDlgItemText(hdlg, i, szResult, sizeof(szResult)); 
            lstrcpy(&szGetName[cchRoot], szResult); 
            fRet = VerQueryValue(lpvMem, szGetName, &lszVer, &cchVer); 
 
            if (fRet && cchVer && lszVer) 
            { 
                // Replace dialog item text with version info 
                lstrcpy(szResult, lszVer); 
                SetDlgItemText(hdlg, i, szResult); 
            } 
        } 
        GlobalUnlock(hMem); 
        GlobalFree(hMem); 
    } 
    return TRUE; 
} 
 
// 
//  FUNCTION: MsgAboutCommand(HWND, UINT, WPARAM, LPARAM) 
// 
//  PURPOSE: Process WM_COMMAND message sent to the about box. 
// 
//  PARAMETERS: 
//    hwnd - The window handing the message. 
//    uMessage - The message number. (unused). 
//    wparam - Message specific data (unused). 
//    lparam - Message specific data (unused). 
// 
//  RETURN VALUE: 
//    Always returns 0 - message handled. 
// 
//  COMMENTS: 
//    Uses this DipsCommand function defined in wndproc.c combined 
//    with the cmdiAbout structure defined in this file to handle 
//    the command messages for the about dialog box. 
// 
 
LRESULT MsgAboutCommand(HWND   hwnd,  
                        UINT   uMessage,  
                        WPARAM wparam,  
                        LPARAM lparam) 
{ 
    return DispCommand(&cmdiAbout, hwnd, wparam, lparam); 
} 
 
// 
//  FUNCTION: CmdAboutDone(HWND, WORD, HWND) 
// 
//  PURPOSE: Free the about box and related data. 
// 
//  PARAMETERS: 
//    hwnd - The window handling the command. 
//    wCommand - The command to be handled (unused). 
//    wNotify   - Notification number (unused) 
//    hwndCtrl - NULL (unused). 
// 
//  RETURN VALUE: 
//    Always returns TRUE. 
// 
//  COMMENTS: 
//    Calls EndDialog to finish the dialog session. 
// 
 
LRESULT CmdAboutDone(HWND hdlg, WORD wCommand, WORD wNotify, HWND hwndCtrl) 
{ 
    if (hFontCopyright) 
       DeleteObject(hFontCopyright); 
 
    EndDialog(hdlg, TRUE);          // Exit the dialog 
    return TRUE; 
}