Другое событие 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));
}
Для создания стандартной кнопки размера, мы должны были бы сделать это:
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 и только) для получения оптимальной ширины и высоты, которая соответствует чему-либо кнопка, содержит, хотя это выглядит довольно ужасным без любых полей, примененных вокруг текста кнопки.
Это - то, что должен сказать MSDN: Спецификации Дизайна и Инструкции - Визуальное проектирование: Расположение.
Размер по умолчанию кнопки 50x14 DLUs, который может быть вычислен к пикселям с помощью примеров, показанных для GetDialogBaseUnits.
Функция MapDialogRect, кажется, делает вычисление для Вас.
@macbirdie: Вы не должны использовать GetDialogBaseUnits (), он основан на системном шрифте по умолчанию (Ужасный растровый шрифт). Необходимо использовать MapDialogRect ()