zoukankan      html  css  js  c++  java
  • 《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
    
    
  • 相关阅读:
    机器学习(深度学习)
    机器学习(六)
    机器学习一-三
    Leetcode 90. 子集 II dfs
    Leetcode 83. 删除排序链表中的重复元素 链表操作
    《算法竞赛进阶指南》 第二章 Acwing 139. 回文子串的最大长度
    LeetCode 80. 删除有序数组中的重复项 II 双指针
    LeetCode 86 分割链表
    《算法竞赛进阶指南》 第二章 Acwing 138. 兔子与兔子 哈希
    《算法竞赛进阶指南》 第二章 Acwing 137. 雪花雪花雪花 哈希
  • 原文地址:https://www.cnblogs.com/coding365/p/12872364.html
Copyright © 2011-2022 走看看