2021年6月27日 星期日

從 HWND 取得 HINSTANCE

 從 HWND 取得 HINSTANCE

前言

  最近需要透過 HWND 來取得 HINSTANCE ,但不知是不是太久沒接觸 Win32 API ,遽然卡在編譯,在此把學習的過程做個紀錄。


內容

  透過搜尋應該會找到 GetWindowLong() 來取得,所以使用以下

#include <winuser.h>
//
HINSTANCE hIns = (HINSTANCE)GetWindowLong( hWnd , GWL_HINSTANCE);


但編譯後發現"GWL_HINSTANCE"遽然未定義!但透過 Visual Standio 的 F12 可以找到定義,在一番查找後才知道 GetWindowLong() 是給 32 位元系統在用的舊 API ,新的 API 是 GetWindowLongPtr() ,用起來如下

#include <winuser.h>
//
HINSTANCE hIns = (HINSTANCE)GetWindowLongPtr( hWnd , GWLP_HINSTANCE);


這裡要注意後方的 Marco 名稱是有些微的差異的,GWLP_HINSTANCE 不論是 32 位元或 64 位元都會存在,但 GWL_HINSTANCE 僅存在於 32 位元,如果用 F12 去 wunuser.h  裡可以發現 64 位元時該 Marcro 會被 undef 掉,這就是為什麼會發生未定義錯誤的原因。


參考資料

[ docs.microsoft.com ] GetWindowLongPtrW function

沒有留言:

張貼留言