Вопросы по определенным номерам заголовочного файла
Я никогда не пытался сделать GUI без дизайнера GUI, и теперь я учусь разрабатывать приложения для Palm OS с книгой " Программирование на Palm OS: Руководство для разработчиков". И на нем у меня есть этот код, который является объявлением некоторых элементов графического интерфейса:
#define HelloWorldForm 1000
#define HelloWorldButtonButton 1003
#define HelloWorldMenuBar 1000
#define GoodnightMoonAlert 1101
#define FirstBeep 1010
#define SecondBeepmore 1000
Я хочу знать некоторые вещи:
- Мне нужно сделать это в виде заказа?
- Почему мне нужно объявить эти цифры?
- В чем они мне помогут?
- У них есть что-нибудь, связанное с типом предмета, которым они являются?
3 ответа
Они идентификаторы ресурсов. Вы не обязаны определять такие макросы, но если вы этого не сделаете, вам придется использовать необработанные целочисленные значения, когда вы пытаетесь обратиться к виджетам пользовательского интерфейса в коде. Например, типичным способом получения указателя на элемент управления пользовательского интерфейса будет вызов:
FormType* formP = FrmGetActiveForm();
UInt16 index = FrmGetObjectIndex(formP, objectID);
ControlType* controlP = FrmGetObjectPtr(formP, index);
Вам нужно было бы получить указатели на виджеты пользовательского интерфейса, чтобы выполнять такие действия, как чтение их состояний (например, для флажков), изменение текстовых меток, их динамическое отображение или скрытие и т. Д.
Нет никакой безопасности типов между идентификаторами ресурса и тем, что вы делаете с указателем, который вы получаете FrmGetObjectPtr
; Вы несете ответственность за то, чтобы отслеживать, какой идентификатор соответствует какому типу контроля (обычная практика - использовать описательные имена).
Это, вероятно, "удобочитаемые человеком ярлыки" (кажется, в виде макросов C), связанные с элементами GUI: на упомянутые элементы, вероятно, ссылаются только через целые числа в хост-системе. Вы не предоставили нам много деталей для работы здесь.
Преимущество такой техники обычно связано с более простым обслуживанием (среди прочего).
Они предоставляют пару преимуществ.
- Документирование кода. Вы бы предпочли звонок как
LoadForm(1000);
или жеLoadForm(HelloWorldForm);
в вашем исходном коде? - Они могут фактически использоваться файлом, который определяет ресурсы. Если вам когда-нибудь понадобится изменить нумерацию ресурсов (возможно, вы объединяете два проекта, в которых оба использовали 1000 для разных форм), вам нужно будет изменить значение только в одном месте.