среда, 28 ноября 2007 г.

Удобный метод создания статических контролов в IUP

Очень приятный метод написания кода функций создания статических контролов в IUP.

Допустим, необходимо сметь функцию создания контрола вертикальной группировки (vbox), который внутри себя содержит три контрола горизонтальной группировки (hbox). Так же, есть необходимость безопасно получать handle vbox'a.
Для решения этих 2х задач, очень удобно использовать одну функцию, которая либо возвращает handle уже созданного vbox'a, либо создаёт его и возвращает его handle.

Код может иметь вид:

// макроопределения хендла
#define GUI_VBOX "vbox"

// vbox
Ihandle *gui_GetVbox( void )
{
Ihandle *vbox = NULL;

// Существует ли vbox ?
vbox = IupGetHandle( GUI_VBOX );
if ( !vbox )
{
// vbox не существует и его необходимо создать
fprintf( stdout, "Создание vbox..." );

// Получаем хендлы детей vbox'a

// все функции аналогичны gui_GetVbox()
Ihandle *upperHbox = gui_GetUpperhbox();
Ihandle *middleHbox = gui_GetMiddlehbox();
Ihandle *lowerHbox = gui_GetLowerhbox();

// Создаём новый vbox
vbox = IupVbox( upperHbox, middleHbox, lowerHbox, NULL );
if ( !vbox )
{
fprintf( stderr, "vbox не был создан" );
return NULL;
}
// присваиваем хендл vbox'у
IupSetHandle( GUI_VBOX, vbox );

fprintf( stdout, "... vbox был создан" );

// установка атрибутов элемента vbox
IupSetAttribute( vbox, IUP_ALIGNMENT, IUP_ACENTER );
}
return vbox;
} // gui_GetVbox

При таком подходе, для создания диалога, достаточно вызвать всего 1 функцию, скажем,
gui_GetVbox() , который может быть родителем для нашего vbox и автоматически будут созданы все контролы "сверху-вниз".

Комментариев нет: