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

📄 19. 多重文件界面.txt

📁 本书介绍了在Microsoft Windows 98、Microsoft Windows NT 4.0和Windows NT 5.0下程序写作的方法
💻 TXT
📖 第 1 页 / 共 4 页
字号:
        
                          }
        
           }
        
                          // Clean up by deleting unattached menus
        
           DestroyMenu (hMenuHello) ;
        
           DestroyMenu (hMenuRect) ;
        
   
        
           return msg.wParam ;
        
           }
        
   
        
LRESULT CALLBACK FrameWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
        
{
        
           static HWND                   hwndClient ;
        
           CLIENTCREATESTRUCT            clientcreate ;
        
          HWND                          hwndChild ;
        
           MDICREATESTRUCT               mdicreate ;
        
        
        
           switch (message)
        
           {
        
           case   WM_CREATE:                                  // Create the client window
        
        
        
       clientcreate.hWindowMenu          = hMenuInitWindow ;
        
          clientcreate.idFirstChild            = IDM_FIRSTCHILD ;
        
        
        
       hwndClient = CreateWindow  (      TEXT ("MDICLIENT"), NULL,
        
                                         WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE, 
        
                                         0, 0, 0, 0, hwnd, (HMENU) 1, hInst,
        
                                         (PSTR) &clientcreate) ;
        
                          return 0 ;
        
           case   WM_COMMAND:
        
                          switch (LOWORD (wParam))
        
                          {
        
                          case   IDM_FILE_NEWHELLO:  // Create a Hello child window
        
                          mdicreate.szClass             = szHelloClass ;
        
                                         mdicreate.szTitle            = TEXT ("Hello") ;
        
                                         mdicreate.hOwner              = hInst ;
        
                                         mdicreate.x                                 = CW_USEDEFAULT ;
        
                                         mdicreate.y                                 = CW_USEDEFAULT ;
        
                                         mdicreate.cx                         = CW_USEDEFAULT ;
        
                                         mdicreate.cy                         = CW_USEDEFAULT ;
        
                                         mdicreate.style               = 0 ;
        
                                        mdicreate.lParam              = 0 ;
        
             
        
                 hwndChild = (HWND) SendMessage (hwndClient,
        
               WM_MDICREATE, 0, (LPARAM) (LPMDICREATESTRUCT) &mdicreate) ;
        
                  return 0 ;
        
             
        
                          case   IDM_FILE_NEWRECT:     // Create a Rect child window
        
             
        
                          mdicreate.szClass                = szRectClass ;
        
                          mdicreate.szTitle                = TEXT ("Rectangles") ;
        
                          mdicreate.hOwner                 = hInst ;
        
                          mdicreate.x                          = CW_USEDEFAULT ;
        
                          mdicreate.y                          = CW_USEDEFAULT ;
        
                          mdicreate.cx                         = CW_USEDEFAULT ;
        
                          mdicreate.cy                         = CW_USEDEFAULT ;
        
                          mdicreate.style                  = 0 ;
        
                          mdicreate.lParam                 = 0 ;
        
             
        
                         hwndChild = (HWND) SendMessage (hwndClient,
        
                                  WM_MDICREATE, 0,
        
                               (LPARAM) (LPMDICREATESTRUCT) &mdicreate) ;
        
                                                 return 0 ;
        
             
        
                          case   IDM_FILE_CLOSE:       // Close the active window
        
             
        
                         hwndChild = (HWND) SendMessage (hwndClient,
        
                               WM_MDIGETACTIVE, 0, 0) ;
        
             
        
                          if (SendMessage (hwndChild, WM_QUERYENDSESSION, 0, 0))
        
                                  SendMessage (hwndClient, WM_MDIDESTROY,
        
                      (WPARAM) hwndChild, 0) ;
        
                                  return 0 ;
        

                          case   IDM_APP_EXIT:// Exit the program
        
             
        
                          SendMessage (hwnd, WM_CLOSE, 0, 0) ;
        
                          return 0 ;
        
             
        
                          // messages for arranging windows
        

                          case   IDM_WINDOW_TILE:
        
                                         SendMessage (hwndClient, WM_MDITILE, 0, 0) ;
        
                                         return 0 ;
        
             
        
                          case   IDM_WINDOW_CASCADE:
        
                                         SendMessage (hwndClient, WM_MDICASCADE, 0, 0) ;
        
                                         return 0 ;
        
             
        
                          case   IDM_WINDOW_ARRANGE:
        
                                         SendMessage (hwndClient, WM_MDIICONARRANGE, 0, 0) ;
        
                                         return 0 ;
        
             
        
                          case   IDM_WINDOW_CLOSEALL:  // Attempt to close all children
        
             
        
                                         EnumChildWindows (hwndClient, CloseEnumProc, 0) ;
        
                                         return 0 ;
        
             
        
                          default:                      // Pass to active child...
        

                                         hwndChild = (HWND) SendMessage (hwndClient,
        
                                        WM_MDIGETACTIVE, 0, 0) ;
        
                                         if (IsWindow (hwndChild))
        
                         SendMessage (hwndChild, WM_COMMAND, wParam, lParam) ;
        
             
        
                                  break ;    // ...and then to DefFrameProc
        
                          }
        
                          break ;
        
        
        
           case   WM_QUERYENDSESSION:
        
           case   WM_CLOSE:     // Attempt to close all children
        
             
        
                SendMessage (hwnd, WM_COMMAND, IDM_WINDOW_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, message, wParam, lParam) ;
        
}
        

BOOL CALLBACK CloseEnumProc (HWND hwnd, LPARAM lParam)
        
{
        
           if (GetWindow (hwnd, GW_OWNER)) // Check for icon title
        
                          return TRUE ;
        
   
        
           SendMessage (GetParent (hwnd), WM_MDIRESTORE, (WPARAM) hwnd, 0) ;
        
           if (!SendMessage (hwnd, WM_QUERYENDSESSION, 0, 0))
        
       return TRUE ;
        
           SendMessage (GetParent (hwnd), WM_MDIDESTROY, (WPARAM) hwnd, 0) ;
        
           return TRUE ;
        
}
        

LRESULT CALLBACK HelloWndProc (HWND hwnd, UINT message,
        
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 ;
        
           PHELLODATA                    pHelloData ;
        
           PAINTSTRUCT                   ps ;
        
           RECT                          rect ;
        
   
        
           switch (message)
        
           {
        
           case   WM_CREATE:
        
               // Allocate memory for window private data
        
        
        
                          pHelloData = (PHELLODATA) HeapAlloc (GetProcessHeap (),
        
                                  HEAP_ZERO_MEMORY, sizeof (HELLODATA)) ;
        
                          pHelloData->iColor  = IDM_COLOR_BLACK ;
        
                          pHelloData->clrText = RGB (0, 0, 0) ;
        
                          SetWindowLong (hwnd, 0, (long) pHelloData) ;
        

⌨️ 快捷键说明

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