007wan |
Отправлено: 05 Сентября, 2019 - 17:14:32
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
При отключении контрола или диалога через CODE:EnableWindow(gethwnd(0), 0);
Оно становится неактивным, не пропускающим нажатия или перемещения. Так вот. Как, что бы оно пропускало нажатия по диалогу?
Использую CODE:EnableWindow(gethwnd(0), 1);//диалог становится как камень и не двигается и не нажимается кнопки в нем, а я хочу, что бы в диалоге ничего не работало, но нажатия по диалогу распознавало
Я думаю, что EnableWindow отключает все функции, котоыре отслеживают нажатия в окне
(Добавление)
Тоесть когдаCODE: EnableWindow(gethwnd(0), 1); То он распознавать должен нажатия в диалог+нажатия на саму рамку диалога+на неактивные контрол(если возможно), но контролы работать не должны. Тоесть. Принцип хочу реализовать, когда открываешь настройки в какой-то программе, то основной окно становится неактивным и когда на него жмешь, то оно мигает(мигалка уже есть)(Отредактировано автором: 05 Сентября, 2019 - 17:17:09) |
|
|
Zireael |
Отправлено: 06 Сентября, 2019 - 14:38:58
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Принцип хочу реализовать, когда открываешь настройки в какой-то программе, то основной окно становится неактивным и когда на него жмешь, то оно мигает(мигалка уже есть)
code (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define FLASHW_CAPTION 1
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "FlashWindowEx", "FlashWindowEx", "User32.dll" );
external(INT, "EnableWindow", "EnableWindow", "User32.dll" );
external(INT, "PtInRect", "PtInRect", "User32.dll" );
external(INT, "WindowFromPoint", "WindowFromPoint", "User32.dll" );
win dialog;
int b0;
int rect_dialog[4], mouse_x, mouse_y;
int FLASHWINFO[5];
createdialog(0);
showdialog(0, "Диалог1",100, 100, 500, 500, 1, 0);
enabletimer(0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
dialog=formatiw(gethwnd(0));
b0=CreateWindow(0, "BUTTON", "Кнопка", WS_BORDER | WS_CHILD | WS_VISIBLE, 10, 10, 80, 25, gethwnd(0), 0, 0, 0);
}
function getmessage(1, WM_CREATE)
{
EnableWindow(gethwnd(0), 0);
FLASHWINFO[0]=sizearray(FLASHWINFO)*4; // размер структуры
FLASHWINFO[1]=gethwnd(1); // хендл окна
FLASHWINFO[2]=FLASHW_CAPTION; // флаг
FLASHWINFO[3]=7; // сколько раз мигнуть
FLASHWINFO[4]=100; // время мигания
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam==b0)
{
createdialog(1);
showdialog(1, "Диалог2",200, 200, 300, 300, 4, 1);
}
}
function getmessage(1, WM_CLOSE)
{
destroydialog(1);
EnableWindow(gethwnd(0), 1);
}
CREATE_TIMER(0, 30)
{
if(getkeystate(1) || getkeystate(2))
{
setwindowparam(dialog);
getmouse(mouse_x, mouse_y);
rect_dialog[0]=dialog.left;
rect_dialog[1]=dialog.top;
rect_dialog[2]=dialog.left+dialog.width;
rect_dialog[3]=dialog.top+dialog.height;
if(WindowFromPoint(mouse_x, mouse_y) != gethwnd(1))
{
if(PtInRect(address(#rect_dialog[0]), mouse_x, mouse_y))
FlashWindowEx(address(#FLASHWINFO[0]));
return;
}
}
} |
|
|
007wan |
Отправлено: 06 Сентября, 2019 - 14:46:29
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Принцип хочу реализовать, когда открываешь настройки в какой-то программе, то основной окно становится неактивным и когда на него жмешь, то оно мигает(мигалка уже есть)
code (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define FLASHW_CAPTION 1
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "FlashWindowEx", "FlashWindowEx", "User32.dll" );
external(INT, "EnableWindow", "EnableWindow", "User32.dll" );
external(INT, "PtInRect", "PtInRect", "User32.dll" );
external(INT, "WindowFromPoint", "WindowFromPoint", "User32.dll" );
win dialog;
int b0;
int rect_dialog[4], mouse_x, mouse_y;
int FLASHWINFO[5];
createdialog(0);
showdialog(0, "Диалог1",100, 100, 500, 500, 1, 0);
enabletimer(0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
dialog=formatiw(gethwnd(0));
b0=CreateWindow(0, "BUTTON", "Кнопка", WS_BORDER | WS_CHILD | WS_VISIBLE, 10, 10, 80, 25, gethwnd(0), 0, 0, 0);
}
function getmessage(1, WM_CREATE)
{
EnableWindow(gethwnd(0), 0);
FLASHWINFO[0]=sizearray(FLASHWINFO)*4; // размер структуры
FLASHWINFO[1]=gethwnd(1); // хендл окна
FLASHWINFO[2]=FLASHW_CAPTION; // флаг
FLASHWINFO[3]=7; // сколько раз мигнуть
FLASHWINFO[4]=100; // время мигания
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam==b0)
{
createdialog(1);
showdialog(1, "Диалог2",200, 200, 300, 300, 4, 1);
}
}
function getmessage(1, WM_CLOSE)
{
destroydialog(1);
EnableWindow(gethwnd(0), 1);
}
CREATE_TIMER(0, 30)
{
if(getkeystate(1) || getkeystate(2))
{
setwindowparam(dialog);
getmouse(mouse_x, mouse_y);
rect_dialog[0]=dialog.left;
rect_dialog[1]=dialog.top;
rect_dialog[2]=dialog.left+dialog.width;
rect_dialog[3]=dialog.top+dialog.height;
if(WindowFromPoint(mouse_x, mouse_y) != gethwnd(1))
{
if(PtInRect(address(#rect_dialog[0]), mouse_x, mouse_y))
FlashWindowEx(address(#FLASHWINFO[0]));
return;
}
}
} О, спасибо. то самое)) |
|
|
Zireael |
Отправлено: 09 Сентября, 2019 - 10:51:46
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как задействовать кнопку в диалоге по середине "Полноэкранный режим"
CODE:#define WS_MAXIMIZEBOX 65536
#define GWL_STYLE -16
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 0);
loop()sleep(100);
function getmessage (0, WM_CREATE)
{
SetWindowLong(gethwnd(0), GWL_STYLE, GetWindowLong(gethwnd(0), GWL_STYLE) + WS_MAXIMIZEBOX); // включить кнопку 'развернуть окно'
}
Цитата: Например,при первом нажатии делает окно в пользовательских размерах, пусть будет 300 300, а при следующем уже больше, скажем 450 450
Кто-то пытается код сократить, при этом придумывает кучу ерунды. Добавить окну стиль WS_SIZEBOX и пусть пользователь меняет размеры как ему надо. |
|
|
007wan |
Отправлено: 09 Сентября, 2019 - 14:39:56
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: как обработать сообщение при клике на Textout
Сообщения для окон, Textout не окно. А думал вдруг...
----
CODE:if(IsZoomed(formatwi(MainWindow)))messagebox("Окно развёрнуто");
else messagebox("Окно не развёрнуто");
if(IsWindowVisible(formatwi(MainWindow)))messagebox("Окно не скрыто");
else messagebox("Окно скрыто");
if(IsIconic(formatwi(MainWindow)))messagebox("Окно свёрнуто");
else messagebox("Окно не свёрнуто"); Не работает перед showdialog.
При первом showdialog окно открывается по анимации, а закрывается тоже по анимации через ShowWindow(gethwnd(1), SW_HIDE);, но во-второй раз, когда открываешь диалог через showdialog он резко появляется, что не очень, а закрывается так же по анимации. Почему во-второй раз открывается резко и как исправить? Выше код не помогает распознать свернутый диалог скрытый через ShowWindow(gethwnd(1), SW_HIDE);
(Добавление)
Я думаю это всё из-за createdialog |
|
|
|