Внимание!
void InitDialogItems(
const struct InitDialogItem *Init,
struct FarDialogItem *Item,
int ItemsNumber
)
{
int I;
const struct InitDialogItem *PInit=Init;
struct FarDialogItem *PItem=Item;
for (I=0; I < ItemsNumber; I++,PItem++,PInit++)
{
PItem->Type=PInit->Type;
PItem->X1=PInit->X1;
PItem->Y1=PInit->Y1;
PItem->X2=PInit->X2;
PItem->Y2=PInit->Y2;
PItem->Focus=PInit->Focus;
PItem->Reserved=PInit->Selected;
PItem->Flags=PInit->Flags;
PItem->DefaultButton=PInit->DefaultButton;
if ((unsigned int)PInit->Data < 2000)
strcpy(PItem->Data,GetMsg((unsigned int)PInit->Data));
else
strcpy(PItem->Data,PInit->Data);
}
}
Нет.
Введение функции InitDialogItems обусловлено следующим:
Поскольку переменная FarDialogItem.Data имеет большой размер, прямая
инициализация массива FarDialogItem, может заметно увеличить
потребление памяти.
В примере (см. ниже) показано как использовать функцию InitDialogItems и структуру InitDialogItem для создания диалога.
Пример вывода диалога конфигурирования плагина TempPanel:
int Config()
{
struct InitDialogItem InitItems []={
DI_DOUBLEBOX,3,1,72,8,0,0,0,0,(char *)MConfigTitle,
DI_CHECKBOX,5,2,0,0,0,0,0,0,(char *)MConfigAddToDisksMenu,
. . .
DI_BUTTON,0,7,0,0,0,0,DIF_CENTERGROUP,1,(char *)MOk,
DI_BUTTON,0,7,0,0,0,0,DIF_CENTERGROUP,0,(char *)MCancel
};
struct FarDialogItem DialogItems[sizeof(InitItems)/sizeof(InitItems[0])];
. . .
InitDialogItems(InitItems,DialogItems,sizeof(InitItems)/sizeof(InitItems[0]));
. . .
int ExitCode=Info.Dialog(Info.ModuleNumber,
-1,-1,76,10,
"TempCfg",DialogItems,
sizeof(DialogItems)/sizeof(DialogItems[0]));
if (ExitCode != 7)
return(FALSE);
. . .
}