日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Win32_16来看看标准菜单和右键菜单的玩法

發(fā)布時(shí)間:2025/4/16 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Win32_16来看看标准菜单和右键菜单的玩法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

日常應(yīng)用中,菜單主要分為兩種:(1) 標(biāo)準(zhǔn)菜單(處于應(yīng)用程序菜單欄處的菜單)??? (2)右鍵快捷菜單

幾乎你所見(jiàn)過(guò)或使用過(guò)的軟件中,都有它倆兒

?

為應(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)對(duì)應(yīng)的操作

?

下面,我就來(lái)講一下標(biāo)準(zhǔn)菜單和右鍵菜單的創(chuàng)建以及用法

?

(1)首先,不管是標(biāo)準(zhǔn)菜單還是右鍵菜單,都需要先創(chuàng)建,創(chuàng)建的方式有兩種:

1>代碼方式,用CreateMenu函數(shù)來(lái)創(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)菜單的添加方式很簡(jiǎn)單,因?yàn)榇翱谥蓄A(yù)留了一個(gè)菜單欄,就是來(lái)放菜單的,具體代碼如下:(在注冊(cè)窗口類之間修改lpszMenuName參數(shù))

wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);//加載標(biāo)準(zhǔn)菜單

?

2>右鍵菜單的添加方式

主要是使用TrackMenu這個(gè)函數(shù)來(lái)顯示,來(lái)看看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) );


具體代碼:(在右鍵按下消息中顯示右鍵菜單)

case WM_RBUTTONDOWN:ptCm.x = LOWORD(lParam);//設(shè)定右鍵菜單坐標(biāo)ptCm.y = HIWORD(lParam);/*當(dāng)前獲取的坐標(biāo)是客戶區(qū)坐標(biāo) , 而TrackPopupMenu函數(shù)顯示的坐標(biāo)是屏幕坐標(biāo)因此 , 需將ptCm轉(zhuǎn)換成屏幕坐標(biāo)(否則顯示位置不正確)*/ClientToScreen(hwnd, &ptCm);//顯示右鍵菜單TrackPopupMenu(hSub, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON,ptCm.x, ptCm.y,0, hwnd, NULL);return 0;

?

(4)消息處理,這里為了方便,我給標(biāo)準(zhǔn)菜單和右鍵菜單一種同樣的相應(yīng)方式

具體代碼如下:

case WM_COMMAND://響應(yīng)菜單消息switch(LOWORD(wParam))//判斷子菜單項(xiàng)的ID{//菜單欄和右鍵菜單的子項(xiàng)相同 , 因此對(duì)應(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("確定離開(kāi)嗎?"), TEXT("提示"), MB_YESNO))SendMessage(hwnd, WM_CLOSE, wParam, lParam);}return 0;


?

?

下面來(lái)看看運(yùn)行效果:

?

總結(jié)

以上是生活随笔為你收集整理的Win32_16来看看标准菜单和右键菜单的玩法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。