设为首页 加入收藏

TOP

二、Windows菜单—建立菜单的非正统方法
2012-11-05 12:35:01 】 浏览:506
Tags:Windows 菜单 建立 正统 方法

现在让我们稍微偏离我们所讨论的主题。如果在您的程序中没有下拉式菜单,而是建立了多个没有弹出式菜单的顶层菜单,并呼叫SetMenu在顶层菜单之间切换,那会是什么样的情形呢?就像Lotus 1-2-3中老式的文字模式菜单那样。程序10-8中的NOPOPUPS程序展示了处理这种情况。在这个程序中,「File」和「Edit」项与MENUDEMO程序中的类似,但是却以另一种顶层菜单显示出来。

程序10-8 NOPOPUPS
        NOPOPUPS.C        /*-------------------------------------------------------------------------          NOPOPUPS.C --         Demonstrates No-Popup Nested Menu                                                                 (c) Charles Petzold, 1998        -------------------------------------------------------------------------*/        #include <windows.h>        #include "resource.h"        LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;        int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                                                                 PSTR szCmdLine, int iCmdShow)        {                   static TCHAR szAppName[] = TEXT ("NoPopUps") ;                   HWND                                 hwnd ;                   MSG                                  msg ;                   WNDCLASS                      wndclass ;                              wndclass.style                              = CS_HREDRAW | CS_VREDRAW ;                   wndclass.lpfnWndProc                         = WndProc ;                   wndclass.cbClsExtra                          = 0 ;                   wndclass.cbWndExtra                          = 0 ;                   wndclass.hInstance                           = hInstance ;                   wndclass.hIcon                               = LoadIcon (NULL, IDI_APPLICATION) ;                   wndclass.hCursor                             = LoadCursor (NULL, IDC_ARROW) ;                   wndclass.hbrBackground              = (HBRUSH) GetStockObject (WHITE_BRUSH) ;                   wndclass.lpszMenuName                = NULL ;                   wndclass.lpszClassName = szAppName ;                   if (!RegisterClass (&wndclass))                   {                   MessageBox (  NULL, TEXT ("This program requires Windows NT!"),                                                                 szAppName, MB_ICONERROR) ;                   return 0 ;            }                              hwnd = CreateWindow (szAppName,                        TEXT ("No-Popup Nested Menu Demonstration"),                        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 HMENU hMenuMain, hMenuEdit, hMenuFile ;                   HINSTANCE             hInstance ;                   switch (message)            {                   case   WM_CREATE:                          hInstance = (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE) ;                                          hMenuMain = LoadMenu (hInstance, TEXT ("MenuMain")) ;                          hMenuFile = LoadMenu (hInstance, TEXT ("MenuFile")) ;                          hMenuEdit = LoadMenu (hInstance, TEXT ("MenuEdit")) ;                                        SetMenu (hwnd, hMenuMain) ;                          return 0 ;                                   case   WM_COMMAND:                          switch (LOWORD (wParam))                          {                         case   IDM_MAIN:                                                 SetMenu (hwnd, hMenuMain) ;                                                 return 0 ;                                               case   IDM_FILE:                                                 SetMenu (hwnd, hMenuFile) ;                                                 return 0 ;                                               case   IDM_EDIT:                                                 SetMenu (hwnd, hMenuEdit) ;                                                 return 0 ;                                              case   IDM_FILE_NEW:                          case   IDM_FILE_OPEN:                          case   IDM_FILE_SAVE:                          case   IDM_FILE_SAVE_AS:                          case   IDM_EDIT_UNDO:                          case   IDM_EDIT_CUT:                          case   IDM_EDIT_COPY:                          case   IDM_EDIT_PASTE:                          case   IDM_EDIT_CLEAR:                                                 MessageBeep (0) ;                                                 return 0 ;                          }                          break ;                                   case   WM_DESTROY:                          SetMenu (hwnd, hMenuMain) ;                         DestroyMenu (hMenuFile) ;                          DestroyMenu (hMenuEdit) ;                          PostQuitMessage (0) ;                          return 0 ;            }                   return DefWindowProc (hwnd, message, wParam, lParam) ;        }        
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇三、Windows键盘快捷键 下一篇二、Windows菜单—其它菜单命令

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目