第一個 有菜單的視窗 紀念下 搞了三天

來源:互聯網
上載者:User

 

#include<windows.h>
#include<string.h>
#include<tchar.h>
#include<stdio.h>
#include<stdlib.h>

#include"resource1.h"

 

HMENU hmenu,hprintmenu;

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(
       HINSTANCE hInstance,
       HINSTANCE hPrevInst,
       LPSTR lpszCmdLine,
       int nCmdShow

       )
{
HWND hwnd;
MSG Msg;
HACCEL hAccel;
WNDCLASS wndclass;
wchar_t lpszClassName[]=_T("栗子");
//wchar_t lpszMenuName[]=_T("MENU");//
wchar_t lpszTitle[]=_T("My_Menu_Example");
wndclass.style=0;
wndclass.lpfnWndProc=WndProc;
wndclass.cbWndExtra=0;
wndclass.cbClsExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=_T("MENU");//載入視窗類別菜單
wndclass.lpszClassName=lpszClassName;
if(!RegisterClass(&wndclass))
   {
 
   return FALSE;

   }
hwnd=CreateWindow(lpszClassName,
      lpszTitle,
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT,
      CW_USEDEFAULT,
      CW_USEDEFAULT,
      CW_USEDEFAULT,
      NULL,
      NULL,//NULL__使用視窗的預設菜單
      hInstance,
      NULL
      );
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);

//載入加速鍵資源
hAccel=LoadAccelerators(hInstance,_T("MENU"));

while(GetMessage(&Msg,NULL,0,0))
{
if(!TranslateAccelerator(hwnd,hAccel,&Msg))
   {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
   }

 

}
return Msg.wParam;
 }

LRESULT CALLBACK WndProc(
       HWND hwnd,
       UINT message,
       WPARAM wParam,
       LPARAM lParam
      
       )
{
 switch(message)
 {
 case WM_COMMAND:
 switch(LOWORD(wParam))
 {
 case IDM_NEW:
  break;
 case IDM_OPEN:
  break;
 case IDM_SAVE:
  break;
 case IDM_SAVEAS:
  break;
 case IDM_CLOSE:
  break;
 case IDM_ADDPRINTMENU:
  hmenu=GetMenu(hwnd);//
  
  hprintmenu=CreateMenu();//建立菜單
  
  AppendMenu(hprintmenu,MF_ENABLED,IDM_LINE,_T("求和"));
  
  AppendMenu(hprintmenu,MF_ENABLED,IDM_RECT,_T("方差"));
  
  AppendMenu(hprintmenu,MF_ENABLED,IDM_RRECT,_T("平均值"));
  
  AppendMenu(hprintmenu,MF_ENABLED,IDM_ELLIP,_T("均方根"));
  //將建立的彈出式菜單插入主菜單中
  
  InsertMenu(hmenu,2,MF_POPUP|MF_BYPOSITION,(UINT)hprintmenu,_T("統計計算(&C)"));//參數4怎麼啦
  //相應改變菜單中有關統計計算單項的屬性
  
  EnableMenuItem(hmenu,IDM_ADDPRINTMENU,MF_GRAYED);
  
  EnableMenuItem(hmenu,IDM_DELPRINTMENU,MF_ENABLED);
  
  DrawMenuBar(hwnd);
  
  break;
  
  //從主菜單中刪除彈出式統計計算菜單
 case IDM_DELPRINTMENU:
  
  DeleteMenu(hmenu,2,MF_BYPOSITION);
       
  EnableMenuItem(hmenu,IDM_ADDPRINTMENU,MF_ENABLED);
       
  EnableMenuItem(hmenu,IDM_DELPRINTMENU,MF_GRAYED);
  
  DrawMenuBar(hwnd);
  
  break;
 case IDM_EXIT:
  SendMessage(hwnd,WM_DESTROY,0,0);
  
  break;
 case IDM_CUT:
  
  break;
 case IDM_COPY:
  
  break;
 case IDM_DELETE:
  break;
 }
 break;
case WM_DESTROY:
 PostQuitMessage(0);
 break;
default:
 return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}

 

//resource.h
#define IDR_MENU1                       101

// Next default values for new objects
//
#define IDM_NEW 10
#define IDM_OPEN 11
#define IDM_CLOSE 12
#define IDM_SAVE 13
#define IDM_SAVEAS 14
#define IDM_ADDPRINTMENU 15
#define IDM_DELPRINTMENU 16
#define IDM_EXIT 17
#define IDM_CUT 18
#define IDM_COPY 19
#define IDM_PASTE 20
#define IDM_DELETE 21
#define IDM_HELP 22
#define IDM_LINE 23
#define IDM_RECT 24
#define IDM_RRECT 25
#define IDM_ELLIP 26
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

 

 

 #include<resource1.h>
#include<winuser.h>//虛擬鍵用到哦

    MENU MENU DISCARDABLE

{
    POPUP"檔案(&F)"
  
 {
 
    MENUITEM"建立(&N) \t Ctrl+N",                IDM_NEW

    MENUITEM"開啟(&O) \t Ctrl+O",                IDM_OPEN

 MENUITEM"關閉(&C) ",                         IDM_CLOSE

 MENUITEM SEPARATOR
 MENUITEM "儲存(&S)\t Ctrl +S",               IDM_SAVE

 MENUITEM"另存新檔(&A)",                        IDM_SAVEAS
 MENUITEM SEPARATOR

 MENUITEM "建立統計計算功能表項目(&P)\t Ctrl+P",  IDM_ADDPRINTMENU

 MENUITEM "刪除統計計算功能表項目(&D)\t Ctrl+D",  IDM_DELPRINTMENU,GRAYED

 MENUITEM SEPARATOR

 MENUITEM "退出(&X)",                         IDM_EXIT
   
 }

 POPUP"編輯(&E)"
 {
  MENUITEM  "剪下(&T) \t  Ctrl+X",              IDM_CUT
 
     MENUITEM  "複製(&C) \t  Ctrl+C",              IDM_COPY
 
  MENUITEM  "粘貼(&P) \t  Ctrl+V",              IDM_PASTE
 
  MENUITEM  "刪除(&D) \t  Del",                 IDM_DELETE
     }

 MENUITEM"協助(&H)",                            IDM_HELP
    }
         
                                                                                                                                                                                    

 
     Menu ACCELERATORS

                                                                                                                                     

{                                                          
 "N", IDM_NEW,                                ASCII

 "O", IDM_OPEN,                               ASCII

 "S", IDM_SAVE,                               ASCII

 "P", IDM_ADDPRINTMENU,                       ASCII

 "D", IDM_DELPRINTMENU,                       ASCII

 "X", IDM_CUT,                                ASCII

 "C", IDM_COPY,                               ASCII

 "V", IDM_PASTE,                              ASCII

  VK_DELETE, IDM_DELETE,                     VIRTKEY
}

       

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.