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

Появляется когда пользователь нажимает правой клавишей на поле элемента управления.
Состав пунктов меню задается отдельно для каждого элемента управления.
Можно задавать и снимать отметку у пунктов.
Можно делать пункты доступными или недоступными.
Типы пунктов - строка или разделитель.
Пример.
Создать контекстное меню для листбокса.
При нажатии на "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