Размер кнопки по умолчанию?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

8
задан macbirdie 12 September 2008 в 10:25
поделиться

3 ответа

В идеальном, беспрепятственном мире...

Для создания стандартной кнопки размера, мы должны были бы сделать это:

LONG units = GetDialogBaseUnits();
m_hButton = CreateWindow(TEXT("BUTTON"), TEXT("Close"), 
                 WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 
                 0, 0, MulDiv(LOWORD(units), 50, 4), MulDiv(HIWORD(units), 14, 8),
                 hwnd, NULL, hInst, NULL);

где 50 и 14 соответствующие размеры DLU, 4 и 8 горизонтальные и вертикальные диалоговые шаблонные единицы соответственно, на основе GetDialogBaseUnits() функциональные комментарии документации.


Ничто не прекрасно

НО поскольку Anders указал, те метрики основаны на системном шрифте. Если Ваше окно использует шрифт диалогового окна оболочки или просто что-нибудь не создание Вашего глазного выхода за край, Вы в значительной степени самостоятельно.

Для получения собственных "диалоговых" основных единиц необходимо получить метрики текущего текста с GetTextMetrics() и используйте высоту символа и среднюю ширину (tmHeight и tmAveCharWidth из TEXTMETRIC структура соответственно), и переводят их с MulDiv Вашим собственным, если Вы не находитесь в диалоговом окне, затем MapDialogRect() сделает все задание для Вас.

Отметьте это tmAveCharWidth только приближает фактическую среднюю ширину символов, таким образом, рекомендуется использовать a GetTextExtentPoint32() функция на наборе буквенных символов вместо этого.

См.:


Более простая альтернатива

Если кнопки являются единственным управлением, Вы хотите изменить размер автоматически, можно также использовать BCM_GETIDEALSIZE сообщение Button_GetIdealSize() макрос (Windows XP и только) для получения оптимальной ширины и высоты, которая соответствует чему-либо кнопка, содержит, хотя это выглядит довольно ужасным без любых полей, примененных вокруг текста кнопки.

7
ответ дан 5 December 2019 в 10:45
поделиться

Это - то, что должен сказать MSDN: Спецификации Дизайна и Инструкции - Визуальное проектирование: Расположение.

Размер по умолчанию кнопки 50x14 DLUs, который может быть вычислен к пикселям с помощью примеров, показанных для GetDialogBaseUnits.

Функция MapDialogRect, кажется, делает вычисление для Вас.

8
ответ дан 5 December 2019 в 10:45
поделиться

@macbirdie: Вы не должны использовать GetDialogBaseUnits (), он основан на системном шрифте по умолчанию (Ужасный растровый шрифт). Необходимо использовать MapDialogRect ()

1
ответ дан 5 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: