Вопросы по определенным номерам заголовочного файла - PullRequest
1 голос
/ 12 января 2010

Я никогда не пытался создать 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 ]

3 голосов
/ 12 января 2010

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

FormType* formP = FrmGetActiveForm();
UInt16 index = FrmGetObjectIndex(formP, objectID);
ControlType* controlP = FrmGetObjectPtr(formP, index);

Вам необходимо получить указатели на виджеты пользовательского интерфейса, чтобы выполнять такие операции, как чтение их состояний (например, для флажков), изменение текстовых меток, их динамическое отображение или скрытие и т. Д.

Нет никакой безопасности типов между идентификаторами ресурса и тем, что вы делаете с указателем, который вы получаете из FrmGetObjectPtr; Вы несете ответственность за отслеживание того, какой идентификатор соответствует какому типу контроля (обычная практика - использовать описательные имена).

3 голосов
/ 12 января 2010

Это, вероятно, «читаемые человеком ярлыки» (кажется, в виде макросов C), связанные с элементами GUI: на упомянутые элементы, вероятно, ссылаются только через целые числа в хост-системе. Вы не предоставили нам много деталей для работы здесь.

Преимущество такой техники обычно связано с более простым обслуживанием (среди прочих).

1 голос
/ 12 января 2010

Они предоставляют пару преимуществ.

  1. Документирование кода. Вы бы предпочли, чтобы в вашем исходном коде был звонок типа LoadForm(1000); или LoadForm(HelloWorldForm);?
  2. Они могут фактически использоваться файлом, который определяет ресурсы. Если вам когда-нибудь понадобится изменить нумерацию ресурсов (возможно, вы объединяете два проекта, которые использовали 1000 для разных форм), вам нужно будет изменить значение только в одном месте.
...