一、Windows对话框—建立「About」对话框
Windows程序即使不需要接收使用者输入,也通常具有由菜单上的「About」选项启动的对话框,该对话框用来显示程序的名字、图标、版权旗标和标记为「OK」的按键,也许还会有其它信息(例如技术支持的电话号码)。我们将要看到的第一个程序除了显示一个「About」对话框外,别无它用。这个ABOUT1程序如程序11-1所示:
	程序11-1 ABOUT1
	
        
ABOUT1.C
        
/*------------------------------------------------------------------------
        
  ABOUT1.C -- About Box Demo Program No. 1
        
                                                 (c) Charles Petzold, 1998
        
-------------------------------------------------------------------------*/
        
#include <windows.h>
        
#include "resource.h"
        
LRESULT     CALLBACK WndProc                     (HWND, UINT, WPARAM, LPARAM) ;
        
BOOL               CALLBACK AboutDlgProc         (HWND, UINT, WPARAM, LPARAM) ;
        
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
        
                                                         PSTR szCmdLine, int iCmdShow)
        
{
        
          static TCHAR szAppName[] = TEXT ("About1") ;
        
           MSG                                  msg ;
        
           HWND                                 hwnd ;
        
    WNDCLASS                             wndclass ;
        
          
        
           wndclass.style                               = CS_HREDRAW | CS_VREDRAW ;
        
           wndclass.lpfnWndProc                         = WndProc ;
        
           wndclass.cbClsExtra                          = 0 ;
        
           wndclass.cbWndExtra                          = 0 ;
        
           wndclass.hInstance                           = hInstance ;
        
           wndclass.hIcon                               = LoadIcon (hInstance, szAppName) ;
        
           wndclass.hCursor                             = LoadCursor (NULL, IDC_ARROW) ;
        
           wndclass.hbrBackground              = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
        
           wndclass.lpszMenuName                = szAppName ;
        
           wndclass.lpszClassName               = szAppName ;
        
   
        
           if (!RegisterClass (&wndclass))
        
           {
        
                  MessageBox (NULL, TEXT ("This program requires Windows NT!"),
        
               szAppName, MB_ICONERROR) ;
        
                  return 0 ;
        
           }
        
   
        
           hwnd = CreateWindow (szAppName, TEXT ("About Box Demo Program"),
        
                                  WS_OVERLAPPEDWINDOW,
        
                                  CW_USEDEFAULT, CW_USEDEFAULT,
        
                               CW_USEDEFAULT, CW_USEDEFAULT,
        
                                 NULL, NULL, hInstance, NULL) ;
        
   
        
           ShowWindow (hwnd, iCmdShow) ;
        
           UpdateWindow (hwnd) ;
        
   
        
           while (GetMessage (&msg, NULL, 0, 0))
        
           {
        
                          TranslateMessage (&msg) ;
        
                          DispatchMessage (&msg) ;
        
          }
        
           return msg.wParam ;
        
}
        
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
        
{
        
           static HINSTANCE hInstance ;
        
           switch (message)
        
           {
        
           case   WM_CREATE :
        
                hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
        
                  return 0 ;
        
        
        
           case   WM_COMMAND :
        
                  switch (LOWORD (wParam))
        
                  {
        
                  case IDM_APP_ABOUT :
        
                                         DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
        
                                       break ;
        
                  }
        
                  return 0 ;
        
        
        
           case   WM_DESTROY :
        
                  PostQuitMessage (0) ;
        
                  return 0 ;
        
           }
        
           return DefWindowProc (hwnd, message, wParam, lParam) ;
        
}
        
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam)
        
{
        
           switch (message)
        
           {
        
           case   WM_INITDIALOG :
        
                  return TRUE ;
        
        
        
           case   WM_COMMAND :
        
                  switch (LOWORD (wParam))
        
                  {
        
                  case   IDOK :
        
                  case   IDCANCEL :
        
                                         EndDialog (hDlg, 0) ;
        
                                         return TRUE ;
        
         }
        
                  break ;
        
    }
        
  return FALSE ;
        
}
        
	ABOUT1.RC (摘录)
	
        
//Microsoft Developer Studio generated resource script.
        
#include "resource.h"
        
#include "afxres.h"
        
/////////////////////////////////////////////////////////////////////////////
        
// Dialog
        
ABOUTBOX DIALOG DISCARDABLE  32, 32, 180, 100
        
STYLE DS_MODALFRAME | WS_POPUP
        
FONT 8, "MS Sans Serif"
        
BEGIN
        
   DEFPUSHBUTTON              "OK",IDOK,66,80,50,14
        
   ICON                                                     "ABOUT1",IDC_STATIC,7,7,21,20
        
   CTEXT                                                    "About1",IDC_STATIC,40,12,100,8
        
   CTEXT                                "About Box Demo Program",IDC_STATIC,7,40,166,8
        
   CTEXT                                "(c) Charles Petzold,
        
1998",IDC_STATIC,7,52,166,8
        
END
        
/////////////////////////////////////////////////////////////////////////////
        
// Menu
        
ABOUT1      MENU DISCARDABLE
        
BEGIN
        
   POPUP "&Help"
        
  BEGIN
        
                  MENUITEM "&About About1...",                             IDM_APP_ABOUT
        
  END
        
END
        
/////////////////////////////////////////////////////////////////////////////
        
// Icon
        
ABOUT1             ICON    DISCARDABLE     "About1.ico"
        
	RESOURCE.H (摘录)
	
        
// Microsoft Developer Studio generated include file.
        
// Used by About1.rc
        
#define IDM_APP_ABOUT        40001
        
#define IDC_STATIC              -1
        
| 
					 ABOUT1.ICO  | 
			
	
藉由后面章节中介绍的方法,您还可以在程序中建立图标和菜单。图示和菜单的ID名均为「About1」。菜单有一个选项,它产生一条ID名为IDM_APP_ABOUT的WM_COMMAND消息。这使得程序显示的图11-1所示的对话框。
	
