设为首页 加入收藏

TOP

二、Windows菜单—浮动弹出式菜单
2012-11-05 12:34:47 】 浏览:558
Tags:Windows 菜单 动弹

您还可以在没有顶层菜单列的情况下使用菜单,也就是说,您可以使弹出式菜单出现在屏幕顶层的任何位置。一种方法是使用鼠标右键来启动弹出式菜单。程序10-6所示的POPMENU说明了这种方法。

程序10-6 POPMENU
        POPMENU.C        /*----------------------------------------------------------------------          POPMENU.C -- Popup Menu Demonstration                                                         (c) Charles Petzold, 1998        -------------------------------------------------------------------------*/        #include <windows.h>        #include "resource.h"        LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;        HINSTANCE hInst ;        TCHAR              szAppName[] = TEXT ("PopMenu") ;        int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                                                                 PSTR szCmdLine, int iCmdShow)        {                   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, szAppName) ;                   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 ;            }                              hInst = hInstance ;                   hwnd = CreateWindow ( szAppName, TEXT ("Popup 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  hMenu ;                   static int            idColor [5] = {WHITE_BRUSH, LTGRAY_BRUSH, GRAY_BRUSH,                                                 DKGRAY_BRUSH, BLACK_BRUSH } ;                   static int            iSelection    = IDM_BKGND_WHITE ;                   POINT                                point ;                              switch (message)            {                   case   WM_CREATE:                          hMenu = LoadMenu (hInst, szAppName) ;                          hMenu = GetSubMenu (hMenu, 0) ;                          return 0 ;                  case   WM_RBUTTONUP:                          point.x = LOWORD (lParam) ;                          point.y = HIWORD (lParam) ;                          ClientToScreen (hwnd, &point) ;                                          TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL) ;                          return 0 ;                                   case   WM_COMMAND:                          switch (LOWORD (wParam))                          {                          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 ;                                               case   IDM_BKGND_WHITE:              // Note: Logic below                         case   IDM_BKGND_LTGRAY:             //   assumes that IDM_WHITE                          case   IDM_BKGND_GRAY:               //   through IDM_BLACK are                          case   IDM_BKGND_DKGRAY:             //   consecutive numbers in                          case   IDM_BKGND_BLACK:            //   the order shown here.                                                                      CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;                                                 iSelection = LOWORD (wParam) ;                                                 CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;                                                                     SetClassLong (hwnd, GCL_HBRBACKGROUND, (LONG)                                                                       GetStockObject                                   (idColor [LOWORD (wParam) - IDM_BKGND_WHITE])) ;                                                                      InvalidateRect (hwnd, NULL, TRUE) ;                                                return 0 ;                                               case   IDM_APP_ABOUT:                                                 MessageBox (hwnd, TEXT ("Popup Menu Demonstration Program\n")                                  TEXT ("(c) Charles Petzold, 1998"),                                          szAppName, MB_ICONINFORMATION | MB_OK) ;                                          return 0 ;                                               case   IDM_APP_EXIT:                                                 SendMessage (hwnd, WM_CLOSE, 0, 0) ;                                                 return 0 ;                                               case   IDM_APP_HELP:                                                MessageBox (hwnd, TEXT ("Help not yet implemented!"),                                   szAppName, MB_ICONEXCLAMATION | MB_OK) ;                                                 return 0 ;                          }                          break ;                                   case   WM_DESTROY:                          PostQuitMessage (0) ;                          return 0 ;            }                   return DefWindowProc (hwnd, message, wParam, lParam) ;        }        
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇二、Windows菜单—使用系统菜单 下一篇二、Windows菜单—较难的一种菜单..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目