Zireael |
Отправлено: 04 Апреля, 2019 - 02:43:09
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: а можно как то скрыть само диалоговое окно?
Нет, на него вводится статик. Можно убрать рамку окна.
code (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define SS_BITMAP 14
#define SS_NOTIFY 256
#define SS_CENTERIMAGE 512
#define STM_SETIMAGE 370
#define WS_CAPTION 12582912
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "LoadImage", "LoadImageA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
int static;
int image1=LoadImage(0, "C:\Безымянный.bmp", 0, 150, 74, 16); // загрузка картинки 150*74
createdialog(0);
showdialog(0, "Диалог",100, 100, 160, 80, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
static=CreateWindow(0, "STATIC", "", SS_NOTIFY | SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 150, 74, gethwnd(0), 0, 0, 0); // создать статик
sendmessage(STM_SETIMAGE, 0, image1, formatiw(static)); // установить картинку на статик
SetWindowLong(gethwnd(0), -16, GetWindowLong(gethwnd(0), -16) | WS_CAPTION); // убрать рамку диалога
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==static) // если был клик по статику
{
while(getkeystate(1))sleep(1); // ждать пока кнопка мыши нажата
messagebox("Был нажат статик" );
}
} |
|
|
Zireael |
Отправлено: 04 Апреля, 2019 - 11:31:43
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: передвигать кнопку по экрану
code (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define SS_BITMAP 14
#define SS_NOTIFY 256
#define SS_CENTERIMAGE 512
#define STM_SETIMAGE 370
#define WS_CAPTION 12582912
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "LoadImage", "LoadImageA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll" );
external(INT, "WindowFromPoint", "WindowFromPoint", "User32.dll" );
external(INT, "SetWindowPos", "SetWindowPos", "User32.dll" );
int static, mouse_x, mouse_y, delta_x, delta_y, flag=0, rect[4];;
int image1=LoadImage(0, "C:\Безымянный.bmp", 0, 150, 74, 16); // загрузка картинки 150*74
createdialog(0);
showdialog(0, "Диалог",100, 100, 160, 80, 1, 1);
enabletimer(0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
static=CreateWindow(0, "STATIC", "", SS_NOTIFY | SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 150, 74, gethwnd(0), 0, 0, 0); // создать статик
sendmessage(STM_SETIMAGE, 0, image1, formatiw(static)); // установить картинку на статик
SetWindowLong(gethwnd(0), -16, GetWindowLong(gethwnd(0), -16) | WS_CAPTION); // убрать рамку диалога
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==static) // если был клик по статику
{
while(getkeystate(1))sleep(1); // ждать пока кнопка мыши нажата
messagebox("Был нажат статик" );
}
}
CREATE_TIMER(0, 50)
{
while(flag || getkeystate(2)) // пока flag не равно 0 или нажата правая кнопка
{
getmouse(mouse_x, mouse_y); // получить координаты курсора
if(WindowFromPoint(mouse_x, mouse_y)==static) // получить хендл окна под курсором, если он равен с хендлу кнопки
{
if(GetWindowRect(static, address(#rect[0]))) // получить позицию кнопки
{
delta_x=mouse_x-rect[0]; delta_y=mouse_y-rect[1]; // разница координат курсора и координат кнопки
while(getkeystate(2)) // пока нажата правая кнопка мыши
{
getmouse(mouse_x, mouse_y); // получить координаты курсора
SetWindowPos(gethwnd(0), 0, mouse_x-delta_x, mouse_y-delta_y, -1, -1, 1); // переместить кнопку
sleep(10);
}
}
}
else
{
if(flag==0)break; // если хендл под курсором не равен хендлу кнопку и flag равно 0
}
}
}
Перетаскивать правой кнопкой мыши. |
|
|
Kibor |
Отправлено: 04 Апреля, 2019 - 15:44:48
|
Эксперт
Покинул форум
Сообщений всего: 8203
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Budni пишет: я не могу передвигать кнопку по экрану, как это можно сделать?
CODE:#define WS_CAPTION 12582912
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
createdialog(0);
//////////
showdialog(0, "Диалог", 558, 234, 250, 300, 1, 1);
//////////
win w;
int l=0;
int x, y;
int x1, y1;
loop()sleep(1);
function getmessage(0, WM_CREATE)
{
SetWindowLong(gethwnd(0), -16, GetWindowLong(gethwnd(0), -16) | WS_CAPTION); // убрать рамку диалога
}
function getmessage(0, WM_MOUSEMOVE)//Отлавливаем перемещение мыши
{
if (l==1)
{
getmouse(x1, y1);
w.leftclient=w.leftclient-(x-x1);
w.topclient=w.topclient-(y-y1);
x=x1; y=y1;
moveclient(w);
}
}
function getmessage(0, WM_LBUTTONDOWN)//Отлавливаем клик левой кнопки мыши
{
w=getwindow();
getmouse(x, y);
l=1;
//messagebox (x);
}
function getmessage(0, WM_LBUTTONUP)//Отлавливаем отпустить левой кнопки мыши
{
l=0;
} |
|
|
|