Методы управления состоянием окна

Сначала рассмотрим четыре типа состояний:

  • Активное/неактивное. Активным является окно, с которым пользователь работает в текущий момент. Оно находится поверх всех окон и выделено цветом заголовка. Окно активизируется после щелчка мыши в любой его точке.
  • В фокусе/не в фокусе клавиатуры. Окну в фокусе клавиатуры направляются сообщения, вызванные нажатием клавиш на клавиатуре. Как правило, активное окно как раз и находится в фокусе клавиатуры. Исключения составляют дочерние окна, которые сами по себе не могут быть активными или неактивными, но при этом могут быть в фокусе клавиатуры. В этом случае активным должно быть родительское окно.
  • Мышь захвачена/не захвачена. Все сообщения от мыши, захваченной окном, направляются этому окну независимо от позиции курсора на экране.Только одно окно может захватить мышь в текущий момент.
  • Включенное/выключенное (доступное/недоступное). Если окно во выключенном состоянии, пользователь не может сделать его активным или передать ему фокус. Операционная система игнорирует любые сообщения окну от клавиатуры и мыши.

Перечислим некоторые методы управления состоянием окна.

BOOL IsWindowEnabled() const;

Если окно в выключенном состоянии, возвращает нулевое значение, в противном случае - 0.

BOOL EnableWindow(BOOL bEnable=TRUE);

Если значение параметра TRUE, окно переводится в включенное состояние, FALSE - в выключенное. Метод возвращает ненулевое значение, если в момент вызова окно находилось в выключенном состоянии. Если окно было во включенном состоянии или произошла ошибка, возвращается 0.

CWnd* SetActiveWindow();

Переводит окно в активное состояние. Возвращает указатель на оконный объект, обеспечивающий доступ к окну, активному в момент вызова этого метода (указатель может быть временным и не должен запоминаться для дальнейшего использования).

static CWnd* PASCAL GetActiveWindow();

Возвращает указатель на оконный объект, обеспечивающий доступ к окну, активному в момент вызова этого метода. Если в момент вызова активных окон нет, возвращается NULL. Этот указатель может быть временным и не должен запоминаться для дальнейшего использования.

CWnd* SetCapture();

Переводит окно в состояние захвата мыши. Возвращает указатель на оконный объект, обеспечивающий доступ к окну, которым мышь была захвачена в момент вызова этого метода. Если в момент вызова мышь не захвачена, возвращает NULL. Этот указатель может быть временным и не должен запоминаться для дальнейшего использования. Чтобы освободить мышь, используется API-функция ReleaseCapture (параметров не имеет). При успешном ее выполнении возвращается TRUE, иначе - FALSE.

static CWnd* PASCAL GetCapture();

Возвращает указатель, задающий окно, захватившее мышь. Если такого окна нет, возвращает NULL.

BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags=0);

Изменяет стиль окна. Параметр dwRemove задает набор элементов стиля, которые должны быть изъяты из стиля окна. Параметр dwAdd - набор элементов стиля, которые должны быть добавлены к стилю окна. Возвращает ненулевое значение, если стиль был успешно изменен, в противном случае - 0.

Если параметр nFlags не равен 0, то после изменения стиля вызывается API-функция SetWindowPos, которая перерисовывает окно, используя набор флагов, полученный комбинацией значения:

  • SWP_NOSIZE - сохранять текущий размер;
  • SWP_NOMOVE - сохранять текущую позицию;
  • SWP_NOZORDER - сохранять текущий Z-порядок;
  • SWP_NOACTIVE - не делать окно активным.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: