Android WorkManager API для запуска ежедневных задач в фоновом режиме

Так же, как @Deukalion, я случайно поместил желаемый размер клиентской области в вызов ::CreateWindow(), и, рисовая сетку, я оказался не в пикселях. Я применил тот же подход к исследованию размера пикселя скриншота моего приложения. Я мог понять, что границы окна и заголовок отбирают какую-то комнату из клиентской области, но разочарование заключается в том, что в Windows 10 даже не имеет общего размера окна приложения!

Я подозреваю, что ::CreateWindow() вычисляет меньшую клиентскую область путем вычитания жестко заданного количества пикселей по ширине и высоте, а затем создает границу окна и строку заголовка вокруг этого. Это жестко запрограммированное число больше не подходит для ультратонкой темы для Windows. Это смешно - на экране размером с ::CreateWindow()!

действительно нет ничего

Я следовал совету @PeterRuderman, чтобы использовать вызов ::AdjustWindowRect():

RECT rect;
rect.left = rect.top = 0;
rect.right = clientWidth;
rect.bottom = clientHeight;
::AdjustWindowRect(&rect, wflags, false);
HWND hWindow = ::CreateWindow(wcName, title, wflags, 0, 0,
  rect.right - rect.left, rect.bottom - rect.top, 0, 0, hInstance, 0);
  • Как указано в https://msdn.microsoft.com/en-us /library/windows/desktop/dd162897.aspx структура RECT рассматривает поля right и bottom как вне предполагаемого прямоугольника.
  • Он имел бы было приятно, если ::AdjustWindowRect() оставил исходные координаты (0,0) неповрежденными, так что right и bottom могут быть непосредственно заполнены в вызов ::CreateWindow(). Но, к моему удивлению, поля left и bottom стали отрицательными.

13
задан Vadim Kotov 18 May 2018 в 23:55
поделиться