как нарисовать отключенную иконку - PullRequest
1 голос
/ 24 февраля 2012

Я наконец-то дошел до добавления значков в наши выпадающие меню:

menu clip
На этом изображении вы можете видеть, что все, кроме выделенной линии, в порядке.Выделенная линия в порядке, за исключением значка, который нарисован в цвете, а не в сером цвете.

Я основываю свой код на минималистском подходе:
http://www.codeproject.com/Articles/16529/Simple-Menus-That-Display-Icons-Minimalistic-Appro?msg=4166441#xx4166441xx

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

Это работает для наших целей, кроме случаев выбора неактивного (серого) пункта меню.
Но когда пункт меню затенен и выделен, тогда нарисованный значок появляется, как если бы он был включен,Неправильно.:(

Тем не менее тот же самый код рисования работает, когда фон выделен / выделен.

Это заставляет меня поверить, что есть некоторые из утверждений, полностью содержащихся в HDC, которые должны контролироватькак отображается значок - так как следующий код работает при всех условиях, но выбран:

::DrawIconEx(lpdis->hDC, lpdis->rcItem.left+0, lpdis->rcItem.top, pIcon->GetHandle(), pIcon->GetSize().cx, pIcon->GetSize().cy, 0, NULL, DI_NORMAL);

Кто-нибудь знает, какое состояние инкапсулировано в HDC, которое будет контролировать работу DrawIconEx? Если я могу повторитьсостояние HDC во время выбранного чертежа, обнаруженное при не выбранном чертеже, я должен иметь возможность генерировать серые значки, не прибегая к реализации из 30-50 строк, которая вручную отображает серый значок в памяти.

1 Ответ

1 голос
/ 24 февраля 2012

Вы можете использовать:

DrawState(...)

API-функция с флагом DSS_DISABLED, но я не уверен в качестве вывода.

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