The Russian Electronic Developer Magazine | |
Русский электронный журнал разработчика | |
Мдаа... Работящие люди обычно плюют на все это и быстренько рисуют рамку с помощью полтора десятка строк обращений к GPI функциям, а вот ленивые - лезут в интернет в поисках чего нибудь этакого и недокументированного и, если находят, потом еще тратят время на эксперименты с полученной информацией. Такие вот дела.
Давайте-ка вспомним синтаксис той самой разочаровавшей нас функции:
#define INCL_WINWINDOWMGR /* Or use INCL_WIN, INCL_PM, */ #include <os2.h> rc = WinDrawBorder(hps, prcl, cx, cy, clrFore, clrBack, flCmd); PS hps; /* Presentation-space handle. */ PRECTL prcl; /* Bounding rectangle for the border. */ LONG cx; /* Width of border rectangle vertical sides. */ LONG cy; /* Width of border rectangle horizontal sides. */ LONG clrFore; /* Color of edge of border. */ LONG clrBack; /* Color of interior of border. */ ULONG flCmd; /* Flags controlling the way in which the border is drawn. */ BOOL rc; /* Success indicator. */Так-с, а теперь возьмем и самым наглым образом объявим флаги, которых нет в заголовочных файлах OS/2 (Где я их взял? Ну конечно же в интернет! :)
#define DB_RAISED 0x0400 #define DB_DEPRESSED 0x0800 #define DB_TROUGH 0x1000 #define DB_FENCE 0x2000 #define DB_FIELD 0x4000Ну-с, а теперь можно посмотреть на то что получится:
1. WinDrawBorder( hps, prcl, 2, 2, 0, 0, DB_RAISED );
Очень напоминает стандартную осевую кнопку. Надо заметить что цвета
clrFore и clrBack при рисовании этой рамки игнорируются.
2. WinDrawBorder( hps, prcl, 2, 2, 0, 0, DB_DEPRESSED );
Опять же очень напоминает стандартную осевую кнопку, только в нажатом состоянии.
Надо заметить что цвета clrFore и clrBack вновь игнорируются.
3. WinDrawBorder( ps, prcl, 1, 1, CLR_BLACK, 0, DB_TROUGH );
Ба! Да это же наш старый знакомый GROUP BOX, только там вместо черного цвета для
clrFore используется темно-серый. Но это уж как Вам захочется. А цвет clrBack
снова игнорируется.
4. WinDrawBorder( ps, prcl, 1, 1, CLR_WHITE, 0, DB_FENCE );
А вот это я даже сразу и не вспомню - где же я это видел. Но, впрочем, тоже
выглядит вполне 3D. Кстати, clrBack, как это не удивительно, опять игнорируется.
5. WinDrawBorder( ps, prcl, 1, 1, CLR_BLACK, CLR_WHITE, DB_FIELD );
Ну это уже даже и не рамка, а прямо таки поле ввода какое-то. Хотя тоже может
пригодиться. Кроме того, что это не похоже на рамку, здесь еще можно
задавать оба цвета - clrFore и clrBack (я и сам то сначала в это не поверил :).
Ну вот и все.
Надеюсь это кому-то пригодится. Потому что нужной лично мне разновидности рамки здесь не оказалось и мне таки пришлось написать полтора десятка строк кода и нарисовать ее самостоятельно :)
Дмитрий А.Стекленев, aka GlassMan(RU)
Интересные ссылки:
Что такое бизнес.
Комментариев к странице: 0 | Добавить комментарий
Редактор: Дмитрий Бан
Оформление: Евгений Кулешов