Zireael |
Отправлено: 12 Сентября, 2019 - 01:33:57
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как получить координаты контрола(координаты, габариты)?
А чем вариант выше не устраивает?
Цитата: Вроде через GetWindowRect
CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll");
int b0, rect_window[4];
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
if(GetWindowRect(b0, address(#rect_window[0])))
{
messagebox("Ширина кнопки:"+format(rect_window[2]-rect_window[0]));
messagebox("Высота кнопки:"+format(rect_window[3]-rect_window[1]));
}
function getmessage(0, WM_CREATE)
{
b0=CreateWindow(0, "BUTTON", "Кнопка", WS_BORDER | WS_CHILD | WS_VISIBLE, 20, 10, 100, 30, gethwnd(0), 0, 0, 0);
}
А вообще есть GetWindowInfo. |
|
|
007wan |
Отправлено: 12 Сентября, 2019 - 13:35:52
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: rect_window[0] - координата X.
rect_window[1] - Y. Не правда.
Код (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll");
int b0, rect_window[4];
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
if(GetWindowRect(b0, address(#rect_window[0])))
{
messagebox(format(rect_window[0]));
messagebox(format(rect_window[1]));
}
function getmessage(0, WM_CREATE)
{
b0=CreateWindow(0, "BUTTON", "Кнопка", WS_BORDER | WS_CHILD | WS_VISIBLE, 20, 10, 100, 30, gethwnd(0), 0, 0, 0);
}
Результат: messagebox('123'); messagebox('135');
Показывать должен:
Цитата: b0=CreateWindow(0, "BUTTON", "Кнопка", WS_BORDER | WS_CHILD | WS_VISIBLE, 20, 10, 100, 30, gethwnd(0), 0, 0, 0);
(Добавление)
Zireael пишет: А вообще есть GetWindowInfo. Сложно и много. Лишнее не нужно.
---
И чего?
Код (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetClientRect", "GetClientRect", "User32.dll");
int b0, rect_window[4];
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
function getmessage(0, WM_CREATE)
{
b0=CreateWindow(0, "BUTTON", "Кнопка", WS_BORDER | WS_CHILD | WS_VISIBLE, 20, 10, 100, 30, gethwnd(0), 0, 0, 0);
}
GetClientRect(b0, address(#rect_window[0]));
messagebox(format(rect_window[0]));
messagebox(format(rect_window[1])); И чего не так?
(Добавление)
Результат:
Цитата: messagebox(format(rect_window[0] = '0'));
messagebox(format(rect_window[1] = '0'));
messagebox(format(rect_window[2] = '98'));
messagebox(format(rect_window[3] = '28')); |
|
|
Zireael |
Отправлено: 12 Сентября, 2019 - 13:45:43
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: rect_window[0] - координата X.
rect_window[1] - Y.
Не правда.
Правда. Координаты экранные.
Цитата: И чего не так?
Всё так. 2 пикселя рамка WS_BORDER. |
|
|
007wan |
Отправлено: 12 Сентября, 2019 - 13:47:02
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: rect_window[0] - координата X.
rect_window[1] - Y.
Не правда.
Правда. Координаты экранные.
Цитата: И чего не так?
Всё так. 2 пикселя рамка WS_BORDER.
А почему не пишет 10, 20 координаты? А? Рамка же не 20 или 10.
(Добавление)
Как сделать, что бы оконные показал координаты? 10 и 20 и всегда точно |
|
|
007wan |
Отправлено: 12 Сентября, 2019 - 13:52:21
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
ivantu пишет: Zireael пишет: Результат: messagebox('123'); messagebox('135');
Это Координаты Окна Я уже давно знаю. Не уточнил, нужно координаты контрола в окне, а не экранные.
(Добавление)
ivantu пишет: Это Координаты Окна ой, это же координаты экранные, он же написал. А мне нужно оконные(диалоговые), от этого диалога. Должны совпадать 10 и 20 как при создании контрола |
|
|
|