Я помогаю кому-то преобразовать огромный беспорядок панелей и 700 дотошно расположенных флажков с чем-то немного более вменяемым.Я планирую реализовать пользовательский элемент управления, который использует класс ControlPaint для рисования флажков вручную;это облегчит работу с данными, и удаление 700 дескрипторов GDI из формы, вероятно, будет хорошей вещью *.
ControlPaint.DrawCheckbox () занимает графика , границы для флажка и ButtonState .Границы казались интересными;Я подумал, что поведение может быть либо:
- Если я предоставлю слишком много места, я получу флажок, нарисованный по центру в этих границах.
- Я получу флажок размером с границыЯ указал.
Итак, я протестировал прямоугольник 100x100 для границ и обнаружил, что результатом является флажок 100x100.Интересно!Тем не менее, я просто хочу простой старый флажок, который отображается с размером системы по умолчанию для флажка.Я ожидал, что это будет вызов некоторой функции API, такой как GetSystemMetrics () , но я не уверен, что что-то выделяется как правильный путь.(Возможно, SM_CXMENUCHECK? Кажется, это только случайно).
CheckBoxRenderer рендеринг с правильным размером.Я собираюсь использовать это, но мне не нравится не знать, как что-то сделать.Поэтому я поковырялся с Reflector, чтобы посмотреть, что он делает.Если вы визуализируете с каким-то визуальным стилем, он вызывает GetThemePartSize () , который является довольно сложным вызовом API, но, по крайней мере, отвечает, как я могу получить размер для визуальной темы.Что интересно, если визуальные стили не используются, кажется, что они возвращают жестко заданный размер: 13x13.Является ли размер флажка системы действительно жестко заданным в квадрате 13 пикселей, или это был просто ленивый недосмотр MS?
Смысл этого вопроса не в том, чтобы сказать мне, чтобы просто использовать CheckBoxRenderer .Я уже делаю это.Мне было любопытно, как найти размер самому, и в процессе написания этого использовался Reflector, и теперь мне любопытно, является ли размер на самом деле тем, что нельзя изменить.
* I 'Я осознаю, что иметь 700 на экране что-либо - плохая идея, даже если вы найдете способ, который использует отрицательную память.Шаг 2 этого проекта предлагает более разумный дизайн.DataGridView уже был отклонен как нечто, что просто не выглядело правильно.Я пытаюсь делать что-то одно за раз, и мне также искренне любопытно, есть ли способ определить размер флажка системы.