Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Переместить контрол (Отобразить)CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define SWP_NOSIZE 1
#define SWP_NOZORDER 4
external(INT, "WindowFromPoint", "WindowFromPoint", "User32.dll");
external(INT, "SetWindowPos", "SetWindowPos", "User32.dll");
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowInfo", "GetWindowInfo", "User32.dll");
int mouseX, mouseY, mouseX2, mouseY2;
int b0;
int rect[4], rect2[4];
int pwi[15];
createdialog(0);
showdialog(0, "Dialog", 200, 100, 400, 300, 1, 1);
GetWindowInfo (gethwnd(0), address(#pwi[0])); // узнать параметры диалогового окна
int frame_w = pwi[12]; // ширина рамки окна
int frame_h = pwi[6]-pwi[2]; // высота рамки окна
b0=CreateWindow(0, "BUTTON", "button", WS_VISIBLE | WS_CHILD, 200, 150, 100, 20, gethwnd(0), 0, 0, 0); // создать кнопку
enabletimer(0);
loop()sleep(1);
CREATE_TIMER(0, 30)
{
if(getkeystate(1)) // если нажата левая кнопка мыши
{
getmouse(mouseX, mouseY); // получить координаты курсора
if(WindowFromPoint(mouseX, mouseY)==b0) // если под курсор кнопка
{
GetWindowRect(b0, address(#rect[0])); // получить позицию кнопки
GetWindowRect(gethwnd(0), address(#rect2[0])); // получить позицию диалогового окна
while(getkeystate(1)) // пока нажата левая кнопка мыши
{
getmouse(mouseX2, mouseY2); // получить координаты курсора
if(mouseX2>mouseX) // если курсор сместился вправо
{
// если курсор сместился вниз иначе вверх
if(mouseY2>mouseY)SetWindowPos(b0, 0, rect[0] - rect2[0]-frame_w+(mouseX2-mouseX), rect[1] - rect2[1]-frame_h+(mouseY2-mouseY), 0, 0, SWP_NOSIZE | SWP_NOZORDER);
else SetWindowPos(b0, 0, rect[0] - rect2[0]-frame_w+(mouseX2-mouseX), rect[1] - rect2[1]-frame_h-(mouseY-mouseY2), 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}
if(mouseX2<mouseX) // если курсор сместился влево
{
// если курсор сместился вниз иначе вверх
if(mouseY2>mouseY)SetWindowPos(b0, 0, rect[0] - rect2[0]-frame_w+(mouseX2-mouseX), rect[1] - rect2[1]-frame_h+(mouseY2-mouseY), 0, 0, SWP_NOSIZE | SWP_NOZORDER);
else SetWindowPos(b0, 0, rect[0] - rect2[0]-frame_w+(mouseX2-mouseX), rect[1] - rect2[1]-frame_h-(mouseY-mouseY2), 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}
sleep(1);
}
}
}
}
|