У меня есть главное окно, созданное со следующими стилямиWS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_TABSTOP | WS_GROUP | WS_VISIBLE
и с ex-stlesWS_EX_ACCEPTFILES | WS_EX_CONTROLPARENT | WS_EX_LEFT | WS_EX_LTRREADING
.
Это главное окно имеет дочернее окно, которое представляет собой элемент управления редактирования, созданный с помощью стилейWS_VISIBLE | WS_CHILD | ES_READONLY
и ex-styleWS_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;
На этот раз это не работает. Главное окно полностью исчезает, как только я перетаскиваю какую-то его часть за пределы экрана, и оно полностью перестает отвечать на запросы. Значки на рабочем столе под ним видны, но не кликабельны.
Итак, что мне нужно сделать, чтобы нарисовать дочернее окно (элемент управления редактированием)?