• 《windows程序设计 第五版》实例


    //MENUDEMO.C
    #include <windows.h>
    #include "resource.h"
    #define ID_TIMER 1
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
    TCHAR szAppName[] = TEXT ("MenuDemo") ;
    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, IDI_APPLICATION) ;
         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 ("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 int idColor [5] = { WHITE_BRUSH,  LTGRAY_BRUSH, GRAY_BRUSH,
                                    DKGRAY_BRUSH, BLACK_BRUSH } ;
         static int iSelection = IDM_BKGND_WHITE ;
         HMENU      hMenu ;
     
         switch (message)
         {
         case WM_COMMAND:
              hMenu = GetMenu (hwnd) ;  //获取主菜单句柄
              //LOWORD(wParam)表示菜单ID
              switch (LOWORD (wParam))
              {
              case IDM_FILE_NEW:
              case IDM_FILE_OPEN:
              case IDM_FILE_SAVE:
              case IDM_FILE_SAVE_AS:
                   MessageBeep (0) ;
                   return 0 ;
     
              case IDM_APP_EXIT:
                   SendMessage (hwnd, WM_CLOSE, 0, 0) ;
                   return 0 ;
     
              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) ;           //菜单ID
                   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_TIMER_START:
                   if ( SetTimer (hwnd, ID_TIMER, 1000, NULL))
                   {//打开定时器
                      EnableMenuItem (hMenu, IDM_TIMER_START, MF_GRAYED) ;//使得开始菜单变灰色
                      EnableMenuItem (hMenu, IDM_TIMER_STOP,  MF_ENABLED) ;//使得停止菜单
                   }
                   return 0 ;
     
              case IDM_TIMER_STOP:
                   KillTimer (hwnd, ID_TIMER) ;  //关闭定时器
                   EnableMenuItem (hMenu, IDM_TIMER_START, MF_ENABLED) ;
                   EnableMenuItem (hMenu, IDM_TIMER_STOP,  MF_GRAYED) ;
                   return 0 ;
     
              case IDM_APP_HELP:
                   MessageBox (hwnd, TEXT ("Help not yet implemented!"),
                               szAppName, MB_ICONEXCLAMATION | MB_OK) ;
                   return 0 ;
     
              case IDM_APP_ABOUT:
                   MessageBox (hwnd, TEXT ("Menu Demonstration Program
    ")
                                     TEXT ("(c) Charles Petzold, 1998"),
                               szAppName, MB_ICONINFORMATION | MB_OK) ;
                   return 0 ;
              }
              break ;
     
         case WM_TIMER:
              MessageBeep (0) ;
              return 0 ;
     
         case WM_DESTROY:
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    //Resource.h
    #include <windows.h>
    #include "resource.h"
    #define ID_TIMER 1
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
    TCHAR szAppName[] = TEXT ("MenuDemo") ;
    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, IDI_APPLICATION) ;
         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 ("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 int idColor [5] = { WHITE_BRUSH,  LTGRAY_BRUSH, GRAY_BRUSH,
                                    DKGRAY_BRUSH, BLACK_BRUSH } ;
         static int iSelection = IDM_BKGND_WHITE ;
         HMENU      hMenu ;
     
         switch (message)
         {
         case WM_COMMAND:
              hMenu = GetMenu (hwnd) ;  //获取主菜单句柄
              //LOWORD(wParam)表示菜单ID
              switch (LOWORD (wParam))
              {
              case IDM_FILE_NEW:
              case IDM_FILE_OPEN:
              case IDM_FILE_SAVE:
              case IDM_FILE_SAVE_AS:
                   MessageBeep (0) ;
                   return 0 ;
     
              case IDM_APP_EXIT:
                   SendMessage (hwnd, WM_CLOSE, 0, 0) ;
                   return 0 ;
     
              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) ;           //菜单ID
                   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_TIMER_START:
                   if ( SetTimer (hwnd, ID_TIMER, 1000, NULL))
                   {//打开定时器
                      EnableMenuItem (hMenu, IDM_TIMER_START, MF_GRAYED) ;//使得开始菜单变灰色
                      EnableMenuItem (hMenu, IDM_TIMER_STOP,  MF_ENABLED) ;//使得停止菜单
                   }
                   return 0 ;
     
              case IDM_TIMER_STOP:
                   KillTimer (hwnd, ID_TIMER) ;  //关闭定时器
                   EnableMenuItem (hMenu, IDM_TIMER_START, MF_ENABLED) ;
                   EnableMenuItem (hMenu, IDM_TIMER_STOP,  MF_GRAYED) ;
                   return 0 ;
     
              case IDM_APP_HELP:
                   MessageBox (hwnd, TEXT ("Help not yet implemented!"),
                               szAppName, MB_ICONEXCLAMATION | MB_OK) ;
                   return 0 ;
     
              case IDM_APP_ABOUT:
                   MessageBox (hwnd, TEXT ("Menu Demonstration Program
    ")
                                     TEXT ("(c) Charles Petzold, 1998"),
                               szAppName, MB_ICONINFORMATION | MB_OK) ;
                   return 0 ;
              }
              break ;
     
         case WM_TIMER:
              MessageBeep (0) ;
              return 0 ;
     
         case WM_DESTROY:
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    //menudemo.rc
    #include "resource.h"
    #include "afxres.h"
    MENUDEMO MENU DISCARDABLE
    BEGIN
       POPUP "&File"
       BEGIN
          MENUITEM "&New", IDM_FILE_NEW
          MENUITEM "&Open", IDM_FILE_OPEN
          MENUITEM "&Save", IDM_FILE_SAVE
          MENUITEM "&Save &AS", IDM_FILE_SAVE_AS
          MENUITEM SEPARATOR
          MENUITEM "E&xit",   IDM_APP_EXIT
       END
       POPUP "&Edit"
       BEGIN
          MENUITEM "&Undo", IDM_EDIT_UNDO
          MENUITEM SEPARATOR
          MENUITEM "C&ut",IDM_EDIT_CUT
          MENUITEM "&Copy",IDM_EDIT_COPY
          MENUITEM "&Paste",IDM_EDIT_PASTE
          MENUITEM "De&lete",IDM_EDIT_CLEAR
      END
      POPUP "&Background"
      BEGIN
         MENUITEM "&White",IDM_BKGND_WHITE,CHECKED
         MENUITEM "&Light Gray",IDM_BKGND_LTGRAY
         MENUITEM "&Gray",IDM_BKGND_GRAY
         MENUITEM "&Dark Gray",IDM_BKGND_DKGRAY
         MENUITEM "&Black"  ,IDM_BKGND_BLACK
      END
      POPUP "&Timer"
      BEGIN
         MENUITEM "&Start",  IDM_TIMER_START
         MENUITEM "S&top",IDM_TIMER_STOP,GRAYED
      END
      POPUP "&Help"
      BEGIN
       MENUITEM "&Help",      IDM_APP_HELP
       MENUITEM "&About MenuDemo...",IDM_APP_ABOUT
      END
    END
    
    
  • 相关阅读:
    ssd的BUG
    ImportError: No module named lmdb
    GPU卡掉卡
    mobileeye
    caffe convert mxnet
    学前书单-百科
    捉襟见肘
    caffe+opencv3.3.1
    ipython notebook开通远程
    到底什么是故事点(Story Point)?
  • 原文地址:https://www.cnblogs.com/coding365/p/12872364.html
Copyright © 2020-2023  润新知