(10.02.2024 23:06)XEPOMAHT Wrote:  igrik, по какому принципу wog_native_dialogs.era решает, отрисовывать эти кнопки или нет? Т.к. при вызове диалога из главного меню игры, кнопки на форму не ставятся: 
Заполнение состояния кнопок просходит в функции BuildAll 0x7787CE (wogsetup.cpp в исходниках WOG).  
Как именно - я уже не и помню. Но в этот механизм я не лез. Тут всё делает сам Вог
 ] 
Code: 
 // _DlgSetup* ds = o_DlgSetup // 0x2918390 
char* 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
			
		 |