⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdidemo.c

📁 大量示例.有助于我们深刻了解计算机的网络开发
💻 C
📖 第 1 页 / 共 2 页
字号:

                        break ;        // ...and then to DefFrameProc
                    }
               break ;

          case WM_QUERYENDSESSION :
          case WM_CLOSE :                     // Attempt to close all children

               SendMessage (hwnd, WM_COMMAND, IDM_CLOSEALL, 0) ;

               if (NULL != GetWindow (hwndClient, GW_CHILD))
                    return 0 ;

               break ;   // I.e., call DefFrameProc 

          case WM_DESTROY :
               PostQuitMessage (0) ;
               return 0 ;
          }
               // Pass unprocessed messages to DefFrameProc (not DefWindowProc)

     return DefFrameProc (hwnd, hwndClient, iMsg, wParam, lParam) ;
     }

BOOL CALLBACK CloseEnumProc (HWND hwnd, LPARAM lParam)
     {
     if (GetWindow (hwnd, GW_OWNER))         // Check for icon title
          return 1 ;

     SendMessage (GetParent (hwnd), WM_MDIRESTORE, (WPARAM) hwnd, 0) ;

     if (!SendMessage (hwnd, WM_QUERYENDSESSION, 0, 0))
          return 1 ;

     SendMessage (GetParent (hwnd), WM_MDIDESTROY, (WPARAM) hwnd, 0) ;
          return 1 ;
     }

LRESULT CALLBACK HelloWndProc (HWND hwnd, UINT iMsg, WPARAM wParam,
                                                        LPARAM lParam)
     {
     static COLORREF clrTextArray[] = { RGB (0,   0, 0), RGB (255, 0,   0),
                                        RGB (0, 255, 0), RGB (  0, 0, 255),
                                        RGB (255, 255, 255) } ;
     static HWND     hwndClient, hwndFrame ;
     HDC             hdc ;
     HMENU           hMenu ;
     LPHELLODATA     lpHelloData ;
     PAINTSTRUCT     ps ;
     RECT            rect ;

     switch (iMsg)
          {
          case WM_CREATE :
                         // Allocate memory for window private data

               lpHelloData = (LPHELLODATA) HeapAlloc (GetProcessHeap (),
                                                      HEAP_ZERO_MEMORY, 
                                                      sizeof (HELLODATA)) ;
               lpHelloData->iColor  = IDM_BLACK ;
               lpHelloData->clrText = RGB (0, 0, 0) ;
               SetWindowLong (hwnd, 0, (long) lpHelloData) ;

                         // Save some window handles

               hwndClient = GetParent (hwnd) ;
               hwndFrame  = GetParent (hwndClient) ;
               return 0 ;

          case WM_COMMAND :
               switch (wParam)
                    {
                    case IDM_BLACK :
                    case IDM_RED :
                    case IDM_GREEN :
                    case IDM_BLUE :
                    case IDM_WHITE :
                                   // Change the text color

                         lpHelloData = (LPHELLODATA) GetWindowLong (hwnd, 0) ;

                         hMenu = GetMenu (hwndFrame) ;

                         CheckMenuItem (hMenu, lpHelloData->iColor,
                                               MF_UNCHECKED) ;
                         lpHelloData->iColor = wParam ;
                         CheckMenuItem (hMenu, lpHelloData->iColor,
                                               MF_CHECKED) ;

                         lpHelloData->clrText =
                               clrTextArray[wParam - IDM_BLACK] ;

                         InvalidateRect (hwnd, NULL, FALSE) ;
                    }
               return 0 ;

          case WM_PAINT :
                         // Paint the window

               hdc = BeginPaint (hwnd, &ps) ;

               lpHelloData = (LPHELLODATA) GetWindowLong (hwnd, 0) ;
               SetTextColor (hdc, lpHelloData->clrText) ;

               GetClientRect (hwnd, &rect) ;

               DrawText (hdc, "Hello, World!", -1, &rect,
                         DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

               EndPaint (hwnd, &ps) ;
               return 0 ;

          case WM_MDIACTIVATE :

                         // Set the Hello menu if gaining focus

               if (lParam == (LPARAM) hwnd)
                    SendMessage (hwndClient, WM_MDISETMENU,
                               (WPARAM) hMenuHello, (LPARAM) hMenuHelloWindow) ;

                         // Check or uncheck menu item

               lpHelloData = (LPHELLODATA) GetWindowLong (hwnd, 0) ;
               CheckMenuItem (hMenuHello, lpHelloData->iColor,
                        (lParam == (LPARAM) hwnd) ? MF_CHECKED : MF_UNCHECKED) ;

                         // Set the Init menu if losing focus

               if (lParam != (LPARAM) hwnd)
                    SendMessage (hwndClient, WM_MDISETMENU, (WPARAM) hMenuInit,
                                 (LPARAM) hMenuInitWindow) ;

               DrawMenuBar (hwndFrame) ;
               return 0 ;

          case WM_QUERYENDSESSION :
          case WM_CLOSE :
               if (IDOK != MessageBox (hwnd, "OK to close window?", "Hello",
                                       MB_ICONQUESTION | MB_OKCANCEL))
                    return 0 ;

               break ;   // I.e., call DefMDIChildProc

          case WM_DESTROY :
               lpHelloData = (LPHELLODATA) GetWindowLong (hwnd, 0) ;
               HeapFree (GetProcessHeap (), 0, lpHelloData) ;
               return 0 ;
          }
               // Pass unprocessed message to DefMDIChildProc

     return DefMDIChildProc (hwnd, iMsg, wParam, lParam) ;
     }

LRESULT CALLBACK RectWndProc (HWND hwnd, UINT iMsg, WPARAM wParam,
                                                       LPARAM lParam)
     {
     static HWND  hwndClient, hwndFrame ;
     HBRUSH       hBrush ;
     HDC          hdc ;
     LPRECTDATA   lpRectData ;
     PAINTSTRUCT  ps ;
     int          xLeft, xRight, yTop, yBottom ;
     short        nRed, nGreen, nBlue ;

     switch (iMsg)
          {
          case WM_CREATE :
                         // Allocate memory for window private data

               lpRectData = (LPRECTDATA) HeapAlloc (GetProcessHeap (),
                                                    HEAP_ZERO_MEMORY, 
                                                    sizeof (RECTDATA)) ;

               SetWindowLong (hwnd, 0, (long) lpRectData) ;

                         // Start the timer going

               SetTimer (hwnd, 1, 250, NULL) ;

                         // Save some window handles

               hwndClient = GetParent (hwnd) ;
               hwndFrame  = GetParent (hwndClient) ;
               return 0 ;

          case WM_SIZE :            // If not minimized, save the window size

               if (wParam != SIZE_MINIMIZED)
                    {
                    lpRectData = (LPRECTDATA) GetWindowLong (hwnd, 0) ;

                    lpRectData->cxClient = LOWORD (lParam) ;
                    lpRectData->cyClient = HIWORD (lParam) ;
                    }

               break ;        // WM_SIZE must be processed by DefMDIChildProc

          case WM_TIMER :           // Display a random rectangle

               lpRectData = (LPRECTDATA) GetWindowLong (hwnd, 0) ;

               xLeft   = rand () % lpRectData->cxClient ;
               xRight  = rand () % lpRectData->cxClient ;
               yTop    = rand () % lpRectData->cyClient ;
               yBottom = rand () % lpRectData->cyClient ;
               nRed    = rand () & 255 ;
               nGreen  = rand () & 255 ;
               nBlue   = rand () & 255 ;

               hdc = GetDC (hwnd) ;
               hBrush = CreateSolidBrush (RGB (nRed, nGreen, nBlue)) ;
               SelectObject (hdc, hBrush) ;

               Rectangle (hdc, min (xLeft, xRight), min (yTop, yBottom),
                               max (xLeft, xRight), max (yTop, yBottom)) ;

               ReleaseDC (hwnd, hdc) ;
               DeleteObject (hBrush) ;
               return 0 ;

          case WM_PAINT :           // Clear the window

               InvalidateRect (hwnd, NULL, TRUE) ;
               hdc = BeginPaint (hwnd, &ps) ;
               EndPaint (hwnd, &ps) ;
               return 0 ;

          case WM_MDIACTIVATE :     // Set the appropriate menu
               if (lParam == (LPARAM) hwnd)
                    SendMessage (hwndClient, WM_MDISETMENU, (WPARAM) hMenuRect,
                                 (LPARAM) hMenuRectWindow) ;
               else
                    SendMessage (hwndClient, WM_MDISETMENU, (WPARAM) hMenuInit,
                                 (LPARAM) hMenuInitWindow) ;

               DrawMenuBar (hwndFrame) ;
               return 0 ;

          case WM_DESTROY :
               lpRectData = (LPRECTDATA) GetWindowLong (hwnd, 0) ;
               HeapFree (GetProcessHeap (), 0, lpRectData) ;
               KillTimer (hwnd, 1) ;
               return 0 ;
          }
               // Pass unprocessed message to DefMDIChildProc

     return DefMDIChildProc (hwnd, iMsg, wParam, lParam) ;
     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -