Я все еще не думаю, что вы предоставили достаточно информации для решения своей проблемы, но вот полная программа, которая делает (в основном) то, что вы хотите. Вы можете сравнить его с вашим, чтобы увидеть, где вы ошибетесь.
#include
LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg ) {
case WM_CLOSE:
PostQuitMessage( 0 );
break;
case WM_PAINT:
{
RECT clientArea;
GetClientRect( hwnd, &clientArea );
PAINTSTRUCT ps;
BeginPaint( hwnd, &ps );
HBRUSH brush = (HBRUSH)GetStockObject( BLACK_BRUSH );
RECT topLeft = clientArea;
topLeft.right /= 2;
topLeft.bottom /= 2;
RECT bottomRight = clientArea;
bottomRight.left = bottomRight.right / 2;
bottomRight.top = bottomRight.bottom / 2;
FillRect( ps.hdc, &topLeft, brush );
FillRect( ps.hdc, &bottomRight, brush );
EndPaint( hwnd, &ps );
}
return 0;
}
return DefWindowProc( hwnd, uMsg, wParam, lParam );
}
int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// Error checking omitted for brevity.
WNDCLASSEX wc = { 0 };
wc.cbSize = sizeof( wc );
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszClassName = L"testclass";
ATOM classAtom = RegisterClassEx( &wc );
HWND window = CreateWindow( L"testclass", L"Test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 480, 240, NULL, NULL, hInstance, NULL );
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) ) {
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
Изменить
После повторного чтения вашего вопроса, я думаю, вы просто ищете AdjustWindowRect API. В этом случае ваш вопрос является дубликатом этого: WinAPI: создайте окно с указанным размером клиентской области . Для дальнейшего использования «область, которую вы можете нарисовать» называется клиентской областью.