Используя очень простой пример wxFrame с официального wxWidgets
сайта, я хотел бы установить положение созданного окна в самом верхнем левом углу экрана.
поэтому я добавил простую строку frame->SetPosition(wxPoint(0, 0))
. К сожалению, по какой-то странной причине с левой стороны есть небольшой, но НЕЖЕЛАТЕЛЬНЫЙ «поля», как показано на введите описание изображения здесь. Что это такое и как устранить этот зазор, чтобы расположить окно именно так, как ожидалось?
@Игорь Да, извините, я использую Win с wx 3.2.5, Да правы:-) Я вызываю SetPosition в MyApp::OnInit после создания экземпляра класса MyFrame.
Это граница окна. Прозрачный на Win10+. Чтобы увидеть это, переместите туда курсор мыши. Обратите внимание, как изменяется курсор, позволяя перетаскивать края.
@Dario101 Dario101 Есть ли какие-нибудь обновления?
Это особенность Windows, а не wxWidgets: современная версия Windows по какой-то причине резервирует некоторое пространство внутри «прямоугольника окна». Вы можете изменить это с помощью функций, специфичных для DWM, но в этом случае ваше окно будет выглядеть немного иначе, чем по умолчанию.
В качестве дополнения к ВЗ. ответ.
Используйте DwmGetWindowAttribute, чтобы получить BOUNDS и вычесть WindowRect.
#include<dwmapi.h>
#pragma comment(lib,"Dwmapi.lib")
.
bool MyApp::OnInit()
{
MyFrame* frame = new MyFrame();
frame->Show(true);
HWND hwnd = frame->GetHWND();
RECT extendedFrameBounds = { 0 };
HRESULT hr = DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &extendedFrameBounds, sizeof(extendedFrameBounds));
if (SUCCEEDED(hr))
{
RECT windowRect;
GetWindowRect(hwnd, &windowRect);
int offsetX = extendedFrameBounds.left - windowRect.left;
int offsetY = extendedFrameBounds.top - windowRect.top;
frame->SetPosition(wxPoint (-offsetX, -offsetY));
}
return true;
}
в какой момент вы вызываете SetPosition()? Кроме того, я полагаю, вы используете Windows с wx 3.2.5? У вас экран HighDPI?