Win32API學習筆記第六章(三)

這次的筆記,首先要記錄4個(兩對)比較實用的函數:

LONG WINAPI GetWindowLong(
  _In_ HWND hWnd,
  _In_ int  nIndex
);
LONG WINAPI SetWindowLong(
  _In_ HWND hWnd,
  _In_ int  nIndex,
  _In_ LONG dwNewLong
);
DWORD WINAPI GetClassLong(
  _In_ HWND hWnd,
  _In_ int  nIndex
);
LONG WINAPI SetWindowLong(
  _In_ HWND hWnd,
  _In_ int  nIndex,
  _In_ LONG dwNewLong
);

這兩個函數的第二個消息宏開頭分別對應:
GWL,GCL(說白了就是首字母縮寫)

Get(Set)WindowLong說白了就是獲得(設置)某一個窗口的

GWL_EXSTYLE
額外風格
GWL_HINSTANCE
窗口的實例句柄
GWL_HWNDPARENT(這個標識符SetWindowLong不可用)
父窗口句柄
GWL_ID
窗口ID
GWL_STYLE
窗口風格
GWL_USERDATA
一個用戶創建窗口的應用程序使用的文件
GWL_WNDPROC
窗口過程函數的地址

Get(Set)ClassLong說白了就是獲得(設置)某一個窗口類的

GCW_ATOM(這個標識符SetClassLong不可用)
返回一個ATOM類(第一無二的,可用於代替窗口類名來創建一個窗口)和RegisterClass的返回值是一個東西
GCL_CBCLSEXTRA(這個標識符SetClassLong不可用)
返回與類相關的額外內存的大小(在cbClsExtra設定的)
GCL_CBWNDEXTRA(這個標識符SetClassLong不可用)
返回與窗口相關的額外內存的大小(在cbWndExtra設定的)
GCL_HBRBACKGROUND
關於窗口類的刷子顏色的
GCL_HCURSOR
窗口類光標
GCL_HICON
窗口類圖標
GCL_HICONSM
窗口類小圖標
GCL_HMODULE
註冊類模塊句柄
GCL_MENUNAME
菜單名稱(RC中的話要用到MAKEINTRESOURCEW轉化爲字符串)
GCL_STYLE
窗口類類型
GCL_WNDPROC
窗口類窗口過程函數指針


接下來繼續講菜單:
有一個右鍵浮動式菜單,就是我們平常用的鼠標右鍵
這個菜單要使用它其實很簡單,思路就是我們吧這個菜單單獨在收到鼠標右鍵時顯示就好了
讓它顯示就調用:TrackPopupMenu(HMENU,標誌位,x,y,0(保留位必須爲0),擁有這個菜單的窗口句柄,NULL);這個函數的具體說法和用法已經在百度百科很詳細了
那麼這個時候問題來了,我們怎麼獲得哪個HMENU?就用LoadMenu,從實例句柄中(我們知道,RC的內容是保留在exe文件內的,這裏就是從存放rc的內存中獲取他的句柄)。然後在獲取由指定菜單項激活的下拉菜單或子菜單的句柄GetSubMenu
具體用法:(局部)

 wcex.lpszMenuName   = NULL;//不在窗口類內設置菜單。
  hMenu = LoadMenu (hInst, szAppName) ;
  hMenu = GetSubMenu (hMenu, 0) ;
   case WM_RBUTTONUP:
          point.x = LOWORD (lParam) ;
          point.y = HIWORD (lParam) ;
          ClientToScreen (hwnd, &point) ;

          TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, point.x, point.y, 
                          0, hwnd, NULL) ; //這裏的菜單彈出左上角必須爲相對屏幕的。
          return 0 ;
發佈了46 篇原創文章 · 獲贊 24 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章