Вы можете использовать методы из Object
, потому что Стандартная спецификация языка ECMA-334 C # гласит:
14. Выражения
14.3 Поиск членов
14.3.1 Базовые типы
Для целей поиска членов тип Считается, что T имеет следующие базовые типы:
[...]
blockquote>
- Если
T
имеет интерфейсный тип , то базовые типыT
являются базовыми интерфейсамиT
и типом классаobject
.Вот почему вы можете вызвать
ToString()
для переменной, в которой в качестве типа используется интерфейс, даже если для этого интерфейса не определен методToString()
.
Ваш лучший выбор может быть передачей GetThemeBackgroundContentRect TBN_BACKGROUND
как iPartId для лотка уведомляют фон.
GetThemeBackgroundContentRect должен возвратить размер, определенный текущей темой, которая может использоваться для рисования, не перекрывая границы родительского элемента. Если бы я читаю это правильно, которое было бы самым большим размерным допустимым значком уведомления и по-видимому размер, который используется.
Тестирование с несколькими настройками DPI является, вероятно, самым легким способом сказать, возвращает ли это правильное значение.
Базовый ответ Mark's является правильным: Создайте свои значки в нескольких форматах и позвольте Windows выбрать правильный. Не забывайте делать 32x32 и 64x64 значки для сценариев HighDPI.
Но SM_CXICON/SM_CYICON не обязательно возвратит размер, который будет использоваться в панели задач. Панель задач выбирает правильный размер значков, поскольку это - размер (это намного более важно в Окне 7).
Просто обеспечьте соответственно измеренные значки, и необходимо быть в порядке.
Создайте свои значки в нескольких форматах и позвольте Windows выбрать тот, который он хочет.
Вот статья Wikipedia о .ico формате.
Если действительно необходимо знать, GetSystemMetrics с параметром SM_CXICON или SM_CYICON скажет Вам ширину и высоту, что Windows хочет загрузиться.