Вопрос

Я пытаюсь создать пользовательский элемент управления CStatic в vc ++ , и у меня возникли некоторые проблемы.

Изначально я просто использовал элемент управления CStatic со стилем SS_BLACKRECT . Это было хорошо для ситуации, пока мне не нужно было отобразить изображение элемента управления по требованию.

Я выяснил всю логистику, лежащую в основе фактического рисования изображения на элементе управления, но я не могу понять, как это сделать, не мешая другим вещам.

В основном я хочу, чтобы элемент управления функционировал как обычный CStatic со стилем SS_BLACKRECT в большинстве случаев.

Тогда мне нужно иметь возможность вызывать метод, который заставит его рисовать изображение поверх элемента управления. Я делаю рисование с использованием GDI и пробовал его как в методе OnPaint () , так и в методе DrawItem () , но безуспешно. Я могу заставить его рисовать в OnPaint () , но когда я вызываю базу CStatic :: OnPaint () , он рисует поверх моего изображения.

Мне нужно, чтобы он рисовался как обычно, но затем просто добавляю изображение сверху. Когда я попытался сделать это в методе DrawItem () , у меня возникла проблема, потому что, очевидно, он рисовал не в стиле SS_BLACKRECT , а ждал, когда я отрисую элемент управления, как его должен.

Я думаю, что я ищу, это одна из трех вещей. Способ рисования с использованием GDI после завершения базового метода OnPaint () . Способ заставить элемент управления рисовать стиль SS_BLACKRECT по умолчанию, а затем OWNERDRAW изображение впоследствии. Или код для имитации рисования SS_BLACKRECT .

Последний может быть самым простым, но я просто не знаю всех вещей, которые мне нужно настроить, чтобы нарисовать элемент управления CStatic , такой как DrawItem по умолчанию.

Это было полезно?

Решение

Попробуйте вызвать Default () в обработчике OnPaint () .

Затем, в зависимости от того, рисуете ли вы свое изображение, вы можете рисовать поверх стандартного элемента управления CStatic .

Другие советы

Вот пара идей:

Если CStatic :: OnPaint () рисует поверх вашего изображения, попробуйте сначала вызвать его, а затем нарисовать изображение.

В противном случае, из того, что я мало видел в SS_BLACKRECT, вы сможете скопировать его рисунок, просто вызывая CDC :: FillSolidRect () , передавая прямоугольник вашего элемента управления, полученный через GetClientRect () и используя цвет, возвращаемый GetSysColor (COLOR_WINDOWFRAME)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top