Пользовательский контроль CStatic - PullRequest
0 голосов
/ 31 июля 2009

Я пытаюсь создать пользовательский элемент управления 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 по умолчанию.

Ответы [ 2 ]

1 голос
/ 03 августа 2009

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

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

0 голосов
/ 31 июля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...