トップページ > 過去ログ > 記事閲覧
枠だけのウィンドウ
名前:美味しい緑茶 日時: 2012/05/17 21:29

SetWindowStyleModeとSetWindowLongを組み合わせて、 Windows Vistaの音量のような大きさを変更できない枠だけのウィンドウ(機能ではなくデザインです)を作りたいのですが どうしたらいいでしょうか? ※SetWindowStyleMode(1)ではないです。

Page: 1 |

Re: 枠だけのウィンドウ ( No.1 )
名前:いっち 日時:2012/05/19 00:57

全く検証していませんが、以下のスレッドの内容が参考になるかもしれません。 > ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=578
Re: 枠だけのウィンドウ ( No.2 )
名前:美味しい緑茶 日時:2012/05/19 07:57

いっちさんありがとうございます。 SetWindowStyleMode(9); と HWND hWnd = GetMainWindowHandle(); SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE)^WS_OVERLAPPEDWINDOW | WS_OVERLAPPED); SetWindowPos(hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED); とすることで見た目は目的のものになりました。 しかし今度はウィンドウのサイズが変更されるようになりました。 これを防ぐ方法はないのでしょうか?
Re: 枠だけのウィンドウ ( No.3 )
名前:いっち 日時:2012/05/20 11:05

SetWindowStyleMode の仕様が良く分からないので不安ですが、 美味しい緑茶さんの望む動作としては以下のような感じでどうでしょうか? コツとしては WS_THICKFRAME を立てないことと、 WS_BORDER と WS_EX_DLGMODALFRAME、WS_EX_CLIENTEDGE、WS_EX_STATICEDGE の組み合わせで枠の見た目が変わるということです。 //- 以下、テストコード -// #include "DxLib.h" int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { ChangeWindowMode( TRUE ); SetWindowText( "DxLib:" DXLIB_VERSION_STR ); if ( DxLib_Init( ) == -1 ) return -1; int white = GetColor( 255, 255, 255 ); HWND hWnd = GetMainWindowHandle(); DWORD s = GetWindowLong( hWnd, GWL_STYLE ) & ~(WS_BORDER|WS_DLGFRAME|WS_SYSMENU) /*| WS_THICKFRAME*/; DWORD es = GetWindowLong( hWnd, GWL_EXSTYLE ) | WS_EX_DLGMODALFRAME /*| WS_EX_CLIENTEDGE*/ /*| WS_EX_STATICEDGE*/; SetWindowLong( hWnd, GWL_STYLE, s ); SetWindowLong( hWnd, GWL_EXSTYLE, es ); SetWindowPos(hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED); SetDrawScreen( DX_SCREEN_BACK ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen( ); DrawFormatString( 0, 0, white, "TEST" ); ScreenFlip( ); } DxLib_End( ); return 0; }

Page: 1 |