У меня есть главное окно, которое создается с помощью следующих стилей
WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_TABSTOP | WS_GROUP | WS_VISIBLE
и с бывшим stles
WS_EX_ACCEPTFILES | WS_EX_CONTROLPARENT | WS_EX_LEFT | WS_EX_LTRREADING
.Как рисовать дочернее окно с помощью FillRect()?
Это главное окно имеет дочернее окно на нем, который является элемент управления редактированием, созданное с стилями
WS_VISIBLE | WS_CHILD | ES_READONLY
и экс-стилем
WS_EX_CLIENTEDGE
.
Я собираюсь использовать этот элемент управления редактирования в качестве регулятора хода выполнения. Я не хочу использовать стандартный контроль выполнения Wind32 (PROGRESS_CLASS
), потому что я хочу сделать на нем какую-то пользовательскую картину (например, динамическое изменение цвета заливки, отображение текста на нем и т. Д.).
Я могу нарисовать любую область главного окна следующим кодом:
// hWnd: Handle of the main window
case WM_PAINT:
hDc = BeginPaint(hWnd, &Ps);
Rect = AFunctionToGetCornerThePointsOfTheEditControl();
Rect.right = Rect.left + 3 * (Rect.right - Rect.left)/4; // Fill 3/4 (75%) of it
Rect.left -= 10; // Enlarge the paint region a little
Rect.top -= 10; // so that we can see it if it stays
Rect.bottom += 10; // under the edit control.
hBrush = CreateSolidBrush(RGB(50,100,255));
ret = FillRect(hDc, &Rect, hBrush); // ret = 1 always
ler = GetLastError(); // ler = 0
EndPaint(hWnd, &Ps);
break;
Это выглядит следующим образом:
Я изменил этот код немного окрасить дочерний элемент управления, вместо этого:
// hWndEdit: Handle of the edit control
case WM_PAINT:
hDc = BeginPaint(hWndEdit, &Ps);
Rect = AFunctionToGetCornerThePointsOfTheEditControl();
Rect.right = Rect.left + 3 * (Rect.right - Rect.left)/4; // Fill 3/4 (75%) of it
Rect.left -= 10;
Rect.top -= 10;
Rect.bottom += 10;
hBrush = CreateSolidBrush(RGB(50,100,255));
ret = FillRect(hDc, &Rect, hBrush); // ret = 0 always
ler = GetLastError(); // ler = 6 (ERROR_INVALID_HANDLE)
EndPaint(hWndEdit, &Ps);
break;
На этот раз это не сработает. Основные окна полностью исчезают, как только я вывожу какую-то часть из области экрана, и он становится полностью невосприимчивым. Значки рабочего стола под ним видны, но не доступны.
Итак, что мне нужно сделать, чтобы нарисовать дочернее окно (элемент управления редактированием)?
Правильный способ сделать обычную покраску - подклассифицировать ее. – chris