Является ли перемещение окна с SetWindowPos «нормальным способом»? - PullRequest
2 голосов
/ 08 января 2011

Мне интересно, если бы для перемещения окна (ms-windows-) с Win32 API на 20 пикселей вправо и на 40 пикселей вниз, следующий вызов функции был бы следующим:

SetWindowPos(
  /* hWnd             */  hChildDlg2, 
  /* hWndInsertAfter  */ (HWND) -1,
  /* X                */ 20,
  /* Y                */ 40,
  /* cx               */ -1,
  /* cy               */ -1,
  /* uFlags           */  SWP_NOSIZE |  // Ignore cx, cy
                          SWP_NOZORDER  // and hWndInsertAfter
);

Я спрашиваю, потому что мне кажется, что может быть функция, принимающая только HWND и x и y в качестве параметров.

Ответы [ 3 ]

4 голосов
/ 08 января 2011

Да, это довольно много, как это делается.Вы должны предпочесть использовать SetWindowPos(), поскольку это дает вам немного контроля над тем, как окно нужно перемещать / изменять его размер.

Я обычно использую его так (часть небольшогофреймворк, который я написал):

// Window member function
void Window::Move(int x, int y)
{
    if(hwnd != 0)
    {
        ::SetWindowPos(hwnd, 0, x, y, 0, 0, 
            SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);
    }
}

Также есть функция MoveWindow(), которая делает то же самое.С доступной функцией SetWindowPos(), теперь это более удобная функция, чем что-либо еще .

1 голос
/ 08 января 2011

Да, это нормальный способ, и окно получит сообщение WM_WINDOWPOSCHANGING (с измененными параметрами). Существует также более старое MoveWindow, но оно менее гибкое и фактически заставляетдля установки размера.

Для правильного сохранения и восстановления размеров окна следует использовать GetWindowPlacement и SetWindowPlacement соответственно.

0 голосов
/ 08 января 2011

Вы имеете в виду, как MoveWindow?

Требуется hwnd, x, y, ширина, высота, поскольку нет флага SWP_NOSIZE, на самом деле его сложнее использовать дляпросто переместите окно, так как вы также должны получить размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...