Цитата:
Сообщение от
miklenew
Ну у меня что-то похожее получилось
X++:
int getRightPointer()
{
Binary data = new Binary(32);
DLL _winApiDLL = new DLL('user32');
DLLFunction fun = new DLLFunction(_winApiDLL, 'GetWindowRect');
;
fun.returns(ExtTypes::DWord);
fun.arg(ExtTypes::DWord, ExtTypes::Pointer);
fun.call(infolog.hWnd(), data);
return data.dWord(8);
}
Хм... мне кажется логика
getRightPointer() в текущей реализации (использование
GetWindowRect вместо
GetClientRect) может работать не совсем корректно.
2 момента на которые обратил внимание:
- GetWindowRect() дает координаты окна относительно экрана в виде [left, top, right, bottom] - data.dWord(8) = right возвратит правую координату окна по горизонтали, а не ширину его. Если Ax открыта не в режиме 'на весь экран' (SW_MAXIMIZE), то открываемая форма должна уйти за правую границу рабочей области Ax - ровно на растояние от левого края экрана до левой границы Ax.
- Если имеются открытые окна с правой стыковкой (окно свойств, например) - то это тоже повлияет правое выравнивание (координаты и размеры окна Ax не изменятся - а вот 'рабочая область' будет меньше).