Контекстные меню - очень удобный элемент интерфейса.


Появляется когда пользователь нажимает правой клавишей на поле элемента управления.

Состав пунктов меню задается отдельно для каждого элемента управления.

Можно задавать и снимать отметку у пунктов.

Можно делать пункты доступными или недоступными.

Типы пунктов - строка или разделитель.


Пример.

Создать контекстное меню для листбокса.

При нажатии на "Hello 1" этот пункт должен становиться недоступным, а "Hello 2" - доступным.

И наоборот, при нажатии "Hello 2", пункт должен становиться недоступным, а "Hello 1" - вновь доступным.

Пункт "Hello 3" должен работать как чекбокс.


int main()

{

...

// там где мы создаем диалог и листбокс:

       object("create", "ts_dialogcontrol", iListBoxMatsArchicad, "iListBoxMatsArchicad");

       ts_dialogcontrol(iListBoxMatsArchicad, "init_control", "singlesellistbox", iTabPage6, 0, 0, width, 242, 48, 20);

       ts_dialogcontrol(iListBoxMatsArchicad, "SetAnchorToPanelResize", 0, 0, 1, 1);

       ts_dialogcontrol(iListBoxMatsArchicad, "eventreaction", "Event_ListBoxSelectionChanged");

       ts_dialogcontrol(iListBoxMatsArchicad, "eventreaction", "Event_ListBoxClicked");

       ts_dialogcontrol(iListBoxMatsArchicad, "eventreaction", "Event_ContextMenuRequested");

// очистить контекстное меню

       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "clear");

// добавить пункт "Hello 1". При его выборе меню должно возвращать 10

       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "add_item", "string", "Hello 1", 10);

// добавить разделитель

       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "add_item", "separator", "", 0);

// добавить пункт "Hello 2". При его выборе меню должно возвращать 11. Сделать недоступным для выбора.

       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "add_item", "string", "Hello 2", 11);

       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "set_enabled", 11, 0);

// добавить пункт "Hello 2". При его выборе меню должно возвращать 12

       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "add_item", "string", "Hello 3", 12);

...

}


// Обработчик события при вызове контекстного меню у элемента управления (щелчек правой клавишей мыши)

int Event_ContextMenuRequested(int iDescr, string sDescr)

{

       int ires;

       cout << "\n---------------------\n";

       if (sDescr == "iListBoxMatsArchicad") {

              // показать меню на экране и получить выбор от пользователя (если вернет 0 - значит отказ).

               ires = ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "apply");

               if (ires == 12) {

                     // переключить "галочку" у пункта 12. потом состояние можно проверить через "get_checked".

                       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "switch_checked", ires);

               }

               if (ires == 10) {

                       // сделать доступным пункт 11 и недоступным 10

                       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "set_enabled", 11, 1);

                       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "set_enabled", 10, 0);

               }

               if (ires == 11) {

                       // сделать доступным пункт 10 и недоступным 11

                       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "set_enabled", 10, 1);

                       ts_dialogcontrol(iListBoxMatsArchicad, "context_menu", "set_enabled", 11, 0);

               }

       }

}

Created with the Personal Edition of HelpNDoc: Effortlessly Create Professional Documentation with HelpNDoc's Clean UI