Zireael |
Отправлено: 28 Декабря, 2018 - 01:05:31
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
code (Отобразить)CODE:external(INT, "CreateMenu", "CreateMenu", "User32.dll" );
external(INT, "CreatePopupMenu", "CreatePopupMenu", "User32.dll" );
external(INT, "AppendMenu", "AppendMenuA", "User32.dll" );
external(INT, "SetMenuInfo", "SetMenuInfo", "User32.dll" );
external(INT, "SetMenu", "SetMenu", "User32.dll" );
int MENUINFO[7]={28, 16, 134217728, 0, 0, 0, 0};
int HMENU, HMENU2, HMENU3;
win w;
HMENU2=CreatePopupMenu();
AppendMenu(HMENU2, 16, 1, "Новый" );
AppendMenu(HMENU2, 16, 2, "Открыть" );
AppendMenu(HMENU2, 16, 3, "Сохранить" );
AppendMenu(HMENU2, 16, 4, "Сохранить как" );
HMENU3=CreatePopupMenu();
AppendMenu(HMENU3, 16, 5, "Вырезать" );
AppendMenu(HMENU3, 16, 6, "Копировать" );
HMENU=CreateMenu();
AppendMenu(HMENU, 16, HMENU2, "Файл" );
AppendMenu(HMENU, 16, HMENU3, "Правка" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
while(window ("Диалог")==0)sleep(10);
w=window ("Диалог");
SetMenuInfo(HMENU, address(#MENUINFO[0]));
SetMenu(formatwi(w), HMENU);
loop()sleep(1);
Как-то можно узнать какой был выбран пункт? Например, Файл, Открыть. |
|
|
Kibor |
Отправлено: 31 Января, 2019 - 06:45:29
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Zireael пишет: Как-то можно узнать какой был выбран пункт? Например, Файл, Открыть.
Получение и обработка сообщений в немодальных окнах Кибор
CODE:external(INT, "CreateMenu", "CreateMenu", "User32.dll" );
external(INT, "CreatePopupMenu", "CreatePopupMenu", "User32.dll" );
external(INT, "AppendMenu", "AppendMenuA", "User32.dll" );
external(INT, "SetMenuInfo", "SetMenuInfo", "User32.dll" );
external(INT, "SetMenu", "SetMenu", "User32.dll" );
int MENUINFO[7]={28, 16, 134217728, 0, 0, 0, 0};
int HMENU, HMENU2, HMENU3;
HMENU2=CreatePopupMenu();
AppendMenu(HMENU2, 16, 1, "Новый" );
AppendMenu(HMENU2, 16, 2, "Открыть" );
AppendMenu(HMENU2, 16, 3, "Сохранить" );
AppendMenu(HMENU2, 16, 4, "Сохранить как" );
HMENU3=CreatePopupMenu();
AppendMenu(HMENU3, 16, 5, "Вырезать" );
AppendMenu(HMENU3, 16, 6, "Копировать" );
HMENU=CreateMenu();
AppendMenu(HMENU, 16, HMENU2, "Файл" );
AppendMenu(HMENU, 16, HMENU3, "Правка" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
while(window ("Диалог")==0)sleep(10);
win w=window ("Диалог");
SetMenuInfo(HMENU, address(#MENUINFO[0]));
SetMenu(formatwi(w), HMENU);
loop()
{
w=window ("Диалог");
textout(1, w.left, w.top, " Не обновляли ", 0);
sleep(1);
}
function Простая_функция()//В ней пересчитаем на оконные координаты
{
textout(0, message.x, message.y, " "+format(message.x-w.leftclient)+" "+format(message.y-w.topclient), 1);
}
function getmessage(0, WM_MOUSEMOVE)//Отлавливаем перемещешие мыши над окном
{
Простая_функция();//Перейдем в другую функцию
}
function getmessage(0, WM_MENUCOMMAND)//Отлавливаем клик по пункту меню
{
if (message.lparam==HMENU2)//идентификатор меню "Файл"
{
if (message.wparam==0)messagebox ("Новый");
if (message.wparam==1)messagebox ("Открыть");
if (message.wparam==2)messagebox ("Сохранить");
if (message.wparam==3)messagebox ("Сохранить как");
}
if (message.lparam==HMENU3)//идентификатор меню "Правка"
{
if (message.wparam==0)messagebox ("Вырезать");
if (message.wparam==1)messagebox ("Копировать");
}
}
function getmessage(0, WM_LBUTTONDOWN)//Отлавливаем клик левой кнопки мыши
{
beep(2500, 100);
}
function getmessage(0, 15)//WM_PAINT Отлавливаем обновление окна
{
textout(1, w.left, w.top, " Обновили окно ", 0);
sleep(100);
}
|
|
|
Kibor |
Отправлено: 13 Апреля, 2019 - 18:00:30
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Zireael пишет: Добавьте 4 - ничего не делать, чтобы можно было в function getmessage(0, WM_CLOSE) выполнить нужный код.
Обновил.
CODE:createdialog(0);
//////////
showdialog(0, "Диалог", 558, 234, 250, 300, 4, 1);
//////////
loop() sleep(10);//Убрать после теста
function getmessage(0, WM_CLOSE)
{
if (messageboxyn ("Закрыть программу ?")==1) close();
} |
|
|
Zireael |
Отправлено: 13 Апреля, 2019 - 19:27:56
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как называется функция, при которой выполняется код, когда жмешь кнопку аналогичной "крестику"- "свернуть".
CODE:#define SC_MINIMIZE 61472
createdialog(0);
showdialog(0, "Диалог", 558, 234, 250, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_SYSCOMMAND)
{
if(message.wparam==SC_MINIMIZE)messagebox("Нажата кнопка свернуть");
} |
|
|
|