« 窓掴み 0.41 公開 | トップページ | 窓掴み 0.46 公開 »

2014年4月21日 (月)

Aeroが有効の環境でのウィンドウサイズ取得

Windows Vista 以降でAeroを使用している環境ではGetWindowRect()が
サイズ固定のウィンドウに対し実際のウィンドウより小さい矩形を取得してくる。
どうも、Vista以降で導入されたフレーム拡張のためらしい。

以下のサイトに感謝
http://www.orangemaker.sakura.ne.jp/labo/memo/sdk-mfc/earoframeex.html
http://jnsmith.blog64.fc2.com/blog-entry-104.html

フレーム拡張を考慮したウィンドウサイズを取得するためには
DwmGetWindowAttribute()を使用する。
Vista以降でAeroを有効としていない環境を考慮するためには
DwmGetWindowAttribute()でAaroが有効か調べる。

1.
2.
3.
4.
5.
6.
7.
BOO bAero;   
DwmGetWindowAttribute(&bAero);   
if(bAero==TRUE){   
    RECT rc;   
    DwmGetWindowAttribute(hWnd,DWMWA_EXTENDED_FRAME_BOUNDS,&rc,sizeof(rc));   
}   
‌ 
このコードは CodePublisher で生成しています

DWM関数はVista以降で用意された関数群のため
XP以前を考慮するにはDWM関数のDLLであるdwmapi.dllが
LoadLibrary()できるかで判断できる。

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
typedef HRESULT (WINAPI *PDwmIsCompositionEnabled)(BOOL*);  
typedef HRESULT (WINAPI *PDwmGetWindowAttribute)(HWND,DWORD,LPCVOID,DWORD);  
‌   
PDwmIsCompositionEnabled fpDwmIsCompositionEnabled;  
PDwmGetWindowAttribute   fpDwmGetWindowAttribute;  
‌   
TCHAR dir[MAX_PATH];  
HMODULE  hDWM;  
GetSystemDirectory(dir,sizeof(dir));  
lstrcat(dir,_T("\\dwmapi.dll"));  
hDWM=LoadLibrary(dir);  
if(hDWM!=NULL){  
    fpDwmIsCompositionEnabled=(PDwmIsCompositionEnabled)GetProcAddress(hDWM,"DwmIsCompositionEnabled");  
    fpDwmGetWindowAttribute=(PDwmGetWindowAttribute)GetProcAddress(hDWM,"DwmGetWindowAttribute");  
}  
‌  
‌ 
このコードは CodePublisher で生成しています

なお、これらDWM関数の戻り値はHRESULT型なので
関数が成功しているか調べるためにはSUCCEEDED()マクロを使用する。

|

« 窓掴み 0.41 公開 | トップページ | 窓掴み 0.46 公開 »

プログラム」カテゴリの記事

コメント

I really like your blog.. very nice colors & theme. Did you make this website yourself or did you hire someone to do it for you? Plz respond as I'm looking to construct my own blog and would like to know where u got this from. thank you dggcedgcfdef

投稿: Johnb875 | 2014年5月17日 (土) 01時20分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/570255/59504124

この記事へのトラックバック一覧です: Aeroが有効の環境でのウィンドウサイズ取得:

« 窓掴み 0.41 公開 | トップページ | 窓掴み 0.46 公開 »