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