1 Attachment(s)
Groupbox keeps not repaint itselfs on window resizing
I have written a program in which I have 2 splitters and 3 controls (subwindows). While resizing splitter (window) in which groupox is contained, groupbox does not repaint its frames ( I think so). What do I wrongly?
Code:
case WM_SIZE:
{
if (info == NULL)
break;
if (info->horizontal)
{
/*
If window is shrunk so that splitter now lies outside the
window boundaries, move the splitter within the window.
*/
if ((wParam != SIZE_MINIMIZED) && (HIWORD(lParam) < info->dwSplitterPos))
info->dwSplitterPos = HIWORD(lParam) - 10;
/* Adjust the children's size and position */
MoveWindow(info->hWnd1, 0, 0, LOWORD(lParam), info->dwSplitterPos - 1, TRUE);
MoveWindow(info->hWnd2, 0, info->dwSplitterPos+2, LOWORD(lParam) , HIWORD(lParam) - info->dwSplitterPos - 2, TRUE);
}
else
{
if ((wParam != SIZE_MINIMIZED) && (LOWORD(lParam) < info->dwSplitterPos))
info->dwSplitterPos = LOWORD(lParam) - 10;
MoveWindow(info->hWnd1, 0, 0, info->dwSplitterPos - 1, HIWORD(lParam), TRUE);
MoveWindow(info->hWnd2, info->dwSplitterPos+2, 0, LOWORD(lParam) - info->dwSplitterPos - 2, HIWORD(lParam) , TRUE);
}
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
return 0;
}
And creation of groupbox and splitters
Code:
case WM_CREATE:
{
InitCommonControls();
HWND hWnd1 = CreateWindowEx( WS_EX_CLIENTEDGE,
L"button", L"Dane",
WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
0, 0, 0, 0,
hWnd, (HMENU) 1,
hInst, NULL );
oldGroubox = (WNDPROC)GetWindowLongPtr(hWnd1, GWL_WNDPROC);
SetWindowLongPtr(hWnd1, GWL_WNDPROC, (LONG_PTR)GroupboxWndProc);
hWnd2 = CreateWindowEx(0, L"button", NULL, WS_CHILD | WS_VISIBLE , 5, 5, 150, 200,
hWnd, NULL, hInst, NULL);
LRESULT CALLBACK GroupboxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
HWND hwndlog = CreateWindowEx(0, L"listbox", 0, WS_CHILD | LBS_NOINTEGRALHEIGHT
| WS_VISIBLE , 0, 0, 0, 0,
hWnd2, NULL, hInst, NULL);
HWND hWnd3 = CreateWindowEx( WS_EX_CLIENTEDGE,
L"listbox", NULL,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL,
0, 0, 0, 0,
hWnd, (HMENU) 3,
hInst, NULL );
SendMessage(hWnd3, LB_ADDSTRING, 0, (LPARAM)L"Element 1");
InitializeSplitter(hInst);
HBRUSH rec = CreateSolidBrush(RGB(255, 0, 0));
HBRUSH blue = CreateSolidBrush(RGB(0, 0,255));
splitter = CreateSplitterWindow(hInst, hWnd1, hWnd2, L"splitter", rec, TRUE);
splitter2 = CreateSplitterWindow(hInst, hWnd3, splitter, L"splitter2", blue, FALSE);
SetParent(splitter2, hWnd);
UpdateWindow(splitter);
UpdateWindow(splitter2);
ShowWindow(splitter2, TRUE);
Log(L"Utworzono");
Whole project
Attachment 30569
--EDIT-- After covering window and uncovering window repaints correctly (maximizing and minimizing windows make the window to repaint itself also).
Incorrect drawing means the window leaves grayish unpainted mix of colors within the new added space (by moving splitter)