Win32_16来看看标准菜单和右键菜单的玩法
日常應用中,菜單主要分為兩種:(1) 標準菜單(處于應用程序菜單欄處的菜單)??? (2)右鍵快捷菜單
幾乎你所見過或使用過的軟件中,都有它倆兒
?
為應用程序添加它們的基本步驟:
(1)用代碼或者IDE創建一個菜單資源
(2)加載、顯示菜單菜單
(3)如果是右鍵菜單,在獲取右鍵坐標按下的坐標時,還應該將它轉換為屏幕坐標(ClientToScreen) —— 后面有原因解析
(4)在WM_COMMANG消息中相應對應的操作
?
下面,我就來講一下標準菜單和右鍵菜單的創建以及用法
?
(1)首先,不管是標準菜單還是右鍵菜單,都需要先創建,創建的方式有兩種:
1>代碼方式,用CreateMenu函數來創建(為了方便,我這里就不用代碼方式了,我選擇IDE創建方式)
2>用IDE提供的創建方式(就是添加資源,和添加位圖資源是一回事兒,這里就是新建菜單)
(2)我這里,為了區分,為標準菜單和右鍵菜單各自創建了一個菜單資源
1>標準菜單
菜單ID為IDR_MENU
子菜單項橢圓ID為IDM_ELLIPSE
子菜單項矩形ID為IDM_RECT
子菜單項退出ID為IDM_EXIT
2>右鍵菜單
右鍵菜單ID為IDR_CONTEXTMENU
子菜單項橢圓ID為IDCM_ELLIPSE
子菜單項矩形ID為IDCM_RECT
子菜單項退出ID為IDCM_EXIT
?
(3)下面就是兩種菜單的添加方式
1>標準菜單的添加方式很簡單,因為窗口中預留了一個菜單欄,就是來放菜單的,具體代碼如下:(在注冊窗口類之間修改lpszMenuName參數)
wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);//加載標準菜單?
2>右鍵菜單的添加方式
主要是使用TrackMenu這個函數來顯示,來看看msdn:
BOOL TrackPopupMenu( HMENU hMenu,//菜單句柄UINT uFlags,//位置標記int x, //x坐標int y, //y坐標int nReserved,//必須為0,不用管HWND hWnd, //擁有右鍵菜單的窗口的句柄HWND prcRect//忽略(NULL) );
具體代碼:(在右鍵按下消息中顯示右鍵菜單)
?
(4)消息處理,這里為了方便,我給標準菜單和右鍵菜單一種同樣的相應方式
具體代碼如下:
case WM_COMMAND://響應菜單消息switch(LOWORD(wParam))//判斷子菜單項的ID{//菜單欄和右鍵菜單的子項相同 , 因此對應執行相同操作case IDM_ELLIPSE:case IDCM_ELLIPSE:isEllipse = TRUE;InvalidateRect(hwnd, NULL, TRUE);break;case IDM_RECT:case IDCM_RECT:isEllipse = FALSE;InvalidateRect(hwnd, NULL, TRUE);break;case IDM_EXIT:case IDCM_EXIT:if(IDYES == MessageBox(hwnd, TEXT("確定離開嗎?"), TEXT("提示"), MB_YESNO))SendMessage(hwnd, WM_CLOSE, wParam, lParam);}return 0;
?
?
下面來看看運行效果:
?
總結
以上是生活随笔為你收集整理的Win32_16来看看标准菜单和右键菜单的玩法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用矩阵快速幂求斐波那契数列
- 下一篇: [Jobdu] 题目1214:丑数