设为首页 加入收藏

TOP

一、Windows模态对话框—更复杂的对话框
2012-11-05 12:36:00 】 浏览:568
Tags:Windows 模态 对话 复杂

ABOUT1中的简单对话框展示了设计和执行一个对话框的要点,现在让我们来看一个稍微复杂的例子。程序11-2给出的ABOUT2程序展示了如何在对话框程序中管理控件(这里用单选按钮)以及如何在对话框的显示区域中绘图。

程序11-2 ABOUT2
        ABOUT2.C        /*--------------------------------------------------------------------------          ABOUT2.C --     About Box Demo Program No. 2                                                (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 iCurrentColor         = IDC_BLACK,           iCurrentFigure        = IDC_RECT ;        int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                                                         PSTR szCmdLine, int iCmdShow)        {                   static TCHAR          szAppName[] = TEXT ("About2") ;                   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 ;        }        void PaintWindow (HWND hwnd, int iColor, int iFigure)        {                   static COLORREF crColor[8] = { RGB ( 0, 0, 0), RGB ( 0, 0, 255),                               RGB ( 0, 255, 0), RGB ( 0, 255, 255),                                                 RGB (255,   0, 0), RGB (255,   0, 255),                               RGB (255, 255, 0), RGB (255, 255, 255)} ;                   HBRUSH                                       hBrush ;                   HDC                                          hdc ;                   RECT                                         rect ;                              hdc = GetDC (hwnd) ;                   GetClientRect (hwnd, &rect) ;                   hBrush = CreateSolidBrush (crColor[iColor - IDC_BLACK]) ;                   hBrush = (HBRUSH) SelectObject (hdc, hBrush) ;                              if (iFigure == IDC_RECT)                          Rectangle (hdc, rect.left, rect.top, rect.right, rect.bottom) ;                   else                    Ellipse   (hdc, rect.left, rect.top, rect.right, rect.bottom) ;                   DeleteObject (SelectObject (hdc, hBrush)) ;                   ReleaseDC (hwnd, hdc) ;        }        void PaintTheBlock (HWND hCtrl, int iColor, int iFigure)        {                   InvalidateRect (hCtrl, NULL, TRUE) ;                   UpdateWindow (hCtrl) ;                   PaintWindow (hCtrl, iColor, iFigure) ;        }        LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)        {                   static HINSTANCE              hInstance ;                   PAINTSTRUCT                          ps ;                              switch (message)            {                   case   WM_CREATE:                          hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;                          return 0 ;                                   case   WM_COMMAND:                          switch (LOWORD (wParam))                          {                          case IDM_APP_ABOUT:                                                 if (DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc))                                                         InvalidateRect (hwnd, NULL, TRUE) ;                                                 return 0 ;                          }                          break ;                                   case   WM_PAINT:                          BeginPaint (hwnd, &ps) ;                          EndPaint (hwnd, &ps) ;                                               PaintWindow (hwnd, iCurrentColor, iCurrentFigure) ;                          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)        {                   static HWND   hCtrlBlock ;                   static int            iColor, iFigure ;                              switch (message)                   {                   case   WM_INITDIALOG:                          iColor               = iCurrentColor ;                          iFigure               = iCurrentFigure ;                          CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE,   iColor) ;                          CheckRadioButton (hDlg, IDC_RECT,  IDC_ELLIPSE, iFigure) ;                                          hCtrlBlock = GetDlgItem (hDlg, IDC_PAINT) ;                                        SetFocus (GetDlgItem (hDlg, iColor)) ;                          return FALSE ;                                   case   WM_COMMAND:                          switch (LOWORD (wParam))                          {                          case   IDOK:                                                 iCurrentColor         = iColor ;                                               iCurrentFigure        = iFigure ;                                                 EndDialog (hDlg, TRUE) ;                                                 return TRUE ;                                               case   IDCANCEL:                                                 EndDialog (hDlg, FALSE) ;                                                 return TRUE ;                                              case   IDC_BLACK:                          case   IDC_RED:                          case   IDC_GREEN:                          case   IDC_YELLOW:                          case   IDC_BLUE:                          case   IDC_MAGENTA:                          case   IDC_CYAN:                          case   IDC_WHITE:                                                 iColor = LOWORD (wParam) ;                                                 CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, LOWORD (wParam)) ;                                                 PaintTheBlock (hCtrlBlock, iColor, iFigure) ;                                                 return TRUE ;                                               case   IDC_RECT:                          case   IDC_ELLIPSE:                                                 iFigure = LOWORD (wParam) ;                                                 CheckRadioButton (hDlg, IDC_RECT, IDC_ELLIPSE, LOWORD (wParam)) ;                                                 PaintTheBlock (hCtrlBlock, iColor, iFigure) ;                                                 return TRUE ;                          }                          break ;                                   case   WM_PAINT:                          PaintTheBlock (hCtrlBlock, iColor, iFigure) ;                        break ;                   }                   return FALSE ;        }        
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一、Windows模态对话框—使用对话.. 下一篇一、Windows模态对话框—不同的主..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目