HWND から HINSTANCE を取得する

最終更新 2004 02/05


GetWindowLong 関数

    対応しているバージョン
    95, 98, Me, NT3.1以降, CE1.0以降, 2000, XP
    
    使用するヘッダとライブラリ
    winuser.h
    user32.lib

リソースデータを読み込むときなんかに HINSTANCE の値が必要になります。
そういうときに

「HWND は分かってるんだけど、これから HINSTANCE 取ってこれないかなぁ?」

という状況があったりします。

HINSATANCE は WinMain() の引数に渡って来るので、ここから取得できますが
いちいち


HINSTANCE g_hInstance = NULL;

WINAPI WinMain(
    HINSTANCE hInst,
    HINSTANCE hPrevInst,
    LPCSTR lpCmd,
    int nShow
)
{
    g_hInstance = hInst;
    .
    .
    .
    return 0;
}
こんな風にしてグローバル変数を使うのは無駄な気がします。 で、HWND からどうにかして取って来れないだろうかと思うわけですが、結論から いうと、HINSTANCE は HWND が分かっていれば取って来ることはできます。 HWND( ウィンドウハンドル ) から HINSTANCE( インスタンスハンドル ) を 取得するには、GetWindowLong() 関数を使います。

HINSTANCE hInst = (HINSTANCE)GetWindowLong( hWnd, GWL_HINSTANCE );
GetWindowLong() 関数は他にも色々使い道があるので、MSDNライブラリを 一度読んでおくと良いかも知れません。

| home |