1. 程式人生 > >[VC++]如何在win32程式中加入右擊選單並新增響應

[VC++]如何在win32程式中加入右擊選單並新增響應

0.先說一下如何在win32程式中開啟控制檯,複製以下程式碼即可:

#include "io.h"
#include "fcntl.h"

void InitConsole()  
{  
    int nRet= 0;  
    FILE* fp;  
    AllocConsole();   // 呼叫產生控制檯的視窗
    nRet= _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);  
    //GetStdHandle 獲取控制檯的控制代碼,若沒有AllocConsole(),獲取標準的輸入輸出視窗控制代碼
	
    fp = _fdopen(nRet, "w");  
    //fdopen()會將nRet的檔案描述詞,轉換為對應的檔案指標後返回
    *stdout = *fp;  
    setvbuf(stdout, NULL, _IONBF, 0);//輸出流

}  



下面來介紹一下如何在win32 中實現點選右鍵彈出選單,步驟如下:

1:先在標頭檔案中中先定義三個IDM資源,這三個引數很重要,在監聽選單點選事件的時候會用到。

#define IDM_AAA 200
#define IDM_BBB 201
#define IDM_CCC 202



2.定義一個全域性變數
static HMENU hMenu;


3.在Init()方法中新增程式碼:

hMenu=CreatePopupMenu();

AppendMenu(hMenu,MF_STRING,IDM_AAA,_T("&AAA"));

AppendMenu(hMenu,MF_SEPARATOR,0,NULL);

AppendMenu(hMenu,MF_STRING,IDM_BBB,_T("&BBB"));

AppendMenu(hMenu,MF_STRING,IDM_CCC,_T("&CCC"));

4.在回撥函式WndProc的WM_RBUTTONDOWN中新增右擊響應程式碼

case WM_RBUTTONDOWN:
{
    printf("Right");
    POINT point;
    point.x=LOWORD(lParam);
    point.y=HIWORD(lParam);
    ClientToScreen(hWnd,&point);
    TrackPopupMenu(hMenu,TPM_RIGHTALIGN,point.x,point.y,0,hWnd,NULL);
    break;
}


還可以設定該項位選中狀態:

CheckMenuItem(hMenu,IDM_AAA,MF_CHECKED);


5.在回撥函式WndProc的WM_COMMAND中新增選中選單的響應這樣便設定完畢了。
為了方便檢驗,我們加上以下程式碼:
cout<<wParam<<endl;


右擊後點擊檢視輸出臺便會發現輸出的是選中項在前面巨集定義的數值。便可以對此數值switch分類處理了,表過不提。