2011-01-30 13 views
31

Win32 APIを使用して特定のクライアント領域サイズを使用してウィンドウを作成するにはどうすればよいだろうか。WinAPI:指定されたクライアント領域サイズのウィンドウを作成する

次のコードを使用してウィンドウを作成しようとすると、ウィンドウ全体がウィンドウのクロムがクライアント領域の一部を取って、640×480である:簡単な数学を想定し

HWND  hWnd; 
WNDCLASSEX WndClsEx; 
ZeroMemory(&WndClsEx, sizeof(WNDCLASSEX)); 

WndClsEx.cbSize  = sizeof(WNDCLASSEX); 
WndClsEx.style   = CS_HREDRAW | CS_VREDRAW; 
WndClsEx.lpfnWndProc = DefWindowProc; 
WndClsEx.cbClsExtra = 0; 
WndClsEx.cbWndExtra = 0; 
WndClsEx.hIcon   = LoadIcon(NULL, IDI_APPLICATION); 
WndClsEx.hCursor  = LoadCursor(NULL, IDC_ARROW); 
WndClsEx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
WndClsEx.lpszMenuName = NULL; 
WndClsEx.lpszClassName = TEXT("Title"); 
WndClsEx.hInstance  = hInstance; 
WndClsEx.hIconSm  = LoadIcon(NULL, IDI_APPLICATION); 

RegisterClassEx(&WndClsEx); 

hWnd = CreateWindowEx( NULL, 
      TEXT("Title"), 
      TEXT("Title"), 
      WS_OVERLAPPEDWINDOW, 
      CW_USEDEFAULT, 
      CW_USEDEFAULT, 
      640, 
      480, 
      NULL, 
      NULL, 
      hInstance, 
      NULL); 

はなく、かなります問題を解決するには、どのようにクロムサイズを考慮に入れますか?

注:私はウィンドウを作成した後、SDLを使用していますが、私はそれは、ウィンドウサイズにバインドされています推測し、その大きさに違いはありませんよ。

答えて

32

関数AdjustWindowRectまたはAdjustWindowRectEx関数を使用して、希望のクライアント領域サイズでウィンドウサイズを計算できます。

+1

修正、クライアントエリアの座標に基づいてウィンドウエリアの座標を計算します。 –

+0

@エドミン:ありがとう。私はそれを訂正します。 'AdjustWindowRect'を' WS_OVERLAPPED'と併用できない理由については、 – Ferruccio

+0

[関連する回答](http://stackoverflow.com/a/13793660/3427520)を参照してください。 – zwcloud

関連する問題