Заполнение PictureBox типа Rectangle, C ++ WINAPI

Я воссоздаю приложение, которое имитирует диалоговое окно редактирования цвета Windows (например, из Paint), в учебных целях.
http://i.stack.imgur.com/UGdtU.jpg

Я создал идентично выглядящий диалог, используя PictureBox (ы) в качестве «цветных контейнеров».
Я установил тип PictureBox на «Прямоугольник», я подумал, что было бы проще использовать LOGBRUSH для заполнения объекта Rectangle; вместо того, чтобы устанавливать PictureBox для ввода «Растровое изображение» и устанавливать каждый пиксель растрового изображения на нужный цвет.

У меня проблема в том, что … я не знаю, как использовать HWND элемента управления PictureBox с LOGBRUSH, чтобы заполнить его.

У меня были проблемы с поиском уведомлений и сообщений PictureBox для связи с элементом управления.

Кто-нибудь может дать мне некоторое представление о том, как правильно общаться с PictureBox Control?

0

Решение

Используйте статический элемент управления со стилем SS_SIMPLE и без текста. Затем обработайте сообщение WM_CTLCOLORSTATIC в родительском окне. Затем родительское окно может вернуть кисть, которую система использует для рисования фона. Помните, что ваша ответственность — освободить кисть, если она не системная. Т.е., если вы создали кисть, используя CreateSolidBrush или аналогичные функции, вам нужно освободить кисть, когда она больше не используется, иначе это приведет к утечке объектов GDI. Для реализации, которую вы предлагаете, вы можете создать массив дескрипторов кистей при инициализации диалога и предоставить соответствующую кисть для определенного блока в ответ на WM_CTLCOLORSTATIC. И когда диалоговое окно собирается уничтожить, вы можете освободить ручки кисти.

Другой способ реализовать это создать пользовательский элемент управления, который сохраняет только цвета для различных блоков в массиве в личных данных окна и рисует их вручную в ответ на WM_PAINT.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]