| 
 
				 (10.02.2024 23:06)XEPOMAHT Wrote:  igrik, по какому принципу wog_native_dialogs.era решает, отрисовывать эти кнопки или нет? Т.к. при вызове диалога из главного меню игры, кнопки на форму не ставятся: 
Заполнение состояния кнопок просходит в функции BuildAll 0x7787CE (wogsetup.cpp в исходниках WOG).  
Как именно - я уже не и помню. Но в этот механизм я не лез. Тут всё делает сам Вог
 ] 
Code:
 // _DlgSetup* ds = o_DlgSetup // 0x2918390char* bttnName = "WoGBttn.def";
 if (ds->ButtonsStates[5] == 1) {dlg->AddItem(_DlgButton_::Create(375, 528, 64, 30, 5, bttnName, 15, 16, 0, HK_B, 0)); } // id = 5 // выбрать всё
 if (ds->ButtonsStates[4] == 1) {dlg->AddItem(_DlgButton_::Create(440, 528, 64, 30, 6, bttnName, 18, 19, 0, HK_N, 0)); } // id = 6 // сбросить всё
 if (ds->ButtonsStates[2] == 1) {dlg->AddItem(_DlgButton_::Create(510, 528, 64, 30, 7, bttnName, 12, 13, 0, HK_R, 0)); } // id = 7 // по умолчанию
 if (ds->ButtonsStates[8] == 1) {dlg->AddItem(_DlgButton_::Create(580, 528, 64, 30, 8, bttnName, 6, 7, 0, HK_L, 0)); }   // id = 8 // загрузить
 if (ds->ButtonsStates[1] == 1) {dlg->AddItem(_DlgButton_::Create(645, 528, 64, 30, 9, bttnName, 9, 10, 0, HK_S, 0)); }  // id = 9 // сохранить
 if (ds->ButtonsStates[3] == 1) {dlg->AddItem(_DlgButton_::Create(305, 528, 64, 30, 10, bttnName, 21, 22, 0, HK_M, 0)); }  // id = 10 // мультиплеер
 if (ds->ButtonsStates[0] == 1) {dlg->AddItem(_DlgButton_::Create(715, 528, 64, 30, DIID_OK, bttnName, 0, 1, 1, HK_ENTER, 2)); } // id = 30725
Code:
 // #define o_DlgSetup ((_DlgSetup*)0x2918390)struct _DlgSetup{
 char *Name;                // название окна
 char *Hint;                // текст хинта внизу (при наведении на имя окна)
 char *PopUp;               // текст в окне по правой мыши (при клике на имя окна)
 char *Intro;               // текст вступления
 DlgSetup_Page *Pages[8];   // страницы
 int   (*Listener)(int Type,int Page, int ItemList,int Item); // 0x7775EC
 // ук. на функцию, которую надо вызывать при каждом изменении
 // Type - 0 - кнопки, 1 - элементы списков, 2 - страничка
 // Page - # страницы
 // ItemList - # списка (0 - LT, 1 - LB, 2 - RT, 3 - RB)
 // Item - # элемента списка (для кнопок: 0 - OK, 1 - Save,
 //                           2 - Restore, 3 - Multiplayer)
 // Реагирование на возвращаемые значения:
 // 0 - ничего, 1 - перерисовка, 2 - закрытие диалога
 
 int *ButtonsStates;         // указатель на массив состояний кнопок
 // -1 - нет кнопки, 0 - кнопка неактивна, 1 - активна
 // #0 - кнопка Ok,  (-1 не действует)
 // #1 - Save,
 // #2 - Restore,
 // #3 - Multiplayer,
 // #4 - UnSelectAll,
 // #5 - SelectAll,
 // #6 - Next,
 // #7 - Back,
 // #8 - Load,
 // #9 - Restore Multiplayer
 char* NextButtonHint;       // хинт для кнопки Next
 char* BackButtonHint;       // хинт для кнопки Back
 Dword Flags;
 
 };
 
 game bug fixes extended.dll  ||  My Plugins  ||  My GitHub
 |