Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций Часть II.doc
Скачиваний:
14
Добавлен:
20.11.2018
Размер:
1.48 Mб
Скачать

П. 1.11 Вспомогательные функции создания окон

1.11.1 Функции отображения и перерисовки окон

Если окно не имеет стиля WS_VISIBLE, то оно создано только в памяти. Для отображения окна вызывают функцию ShowWindow. Она объявлена следующим образом:

BOOL ShowWindow( HWND hwnd, int nCmdShow);

При первом после запуска приложения ее вызове вторым аргументом можно передать значение формального параметра nCmdShow функции WinMain. В последующих вызовах вторым аргументом вызова нужно указывать одну из констант следующей таблицы:

Константа

Действие функции ShowWindow

SW_HIDE

Скрывает окно hwnd и активизирует другое окно

SW_MAXIMIZE

Максимизирует окно

SW_MINIMIZE

Сворачивает окно hwnd и активизирует расположенное под ним окно

SW_RESTORE

Восстанавливает свернутое окно hwnd

SW_SHOW

Активизирует окно hwnd в текущих размерах и позиции

SW_SHOWMAXIMIZED

Активизирует окно hwnd в максимально распахнутом виде

SW_SHOWMINIMIZED

Активизирует окно hwnd в свернутом виде

SW_SHOWMINNOACTIVE

Сворачивает окно hwnd

SW_SHOWNA

Показывает состояние окна hwnd

SW_SHOWNOACTIVATE

Показывает окно hwnd в текущих ко­ординатах

SW _HOWNORMAL

Активизирует и отображает окно hwnd в первоначальных размерах и позиции

Следующая функция сообщает функции окна hwnd о необходимости "перерисовки" рабочей области:

UpdateWindow(hwnd);

1.11.2 Функции поиска и определения состояния окон

BOOL lsWindow( HWND hwnd); - определяет, существует ли окно для некоторого де­скриптора Если окно с дескриптором hwnd существует, функция возвращает не­нулевое значение, иначе - нуль.

BOOL lsWindowEnabled( HWND hwnd ); - определяет, имеет ли заданное окно фокус ввода. Если окно hwnd активно, функция возвращает ненулевое значение, иначе - нуль.

BOOL EnableWindow( HWND hwnd. BOOL bEnable); вызывают для передачи или отнятия фокуса ввода у окна При bEnable=TRUE фокус ввода передают окну hwnd, иначе - блоки­руют это окно.

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

SetFocus(hwnd); - передают окну фокус ввода.

BOOL lslconic(HWND hwnd); - возвращает ненулевое значение, если окно hwnd свернуто в пиктограмму.

HWND FindWindow( LPCTSTR IpClassName, LPCTSTR IpWindowName); запрашивает у операционной системы деск­риптор окна (не дочернего) класса lpClassName с заголовком lpWindowName.

Если lpWindowName - NULL, то заголовок искомого окна может быть любым. Если lpClassName - NULL, искомое окно может принадле­жать к любому классу. Рекомендуется указывать данные как можно бо­лее подробнее. Если такое окно найдено, функция возвращает его дескриптор, иначе - NULL.

1.11.3 Функции перемещения окон

Для перемещения и изменения размеров окна hwnd вызывают функ­цию MoveWindow. Ей передают новые координаты окна. Функция MoveWindow объявлена следующим образом:

BOOL MoveWindow( HWND hwnd,

int x, //новая координата левого края окна

int у, //новая координата верхнего края окна

int nWidth, //новая ширина окна

int nHeight, //новая высота окна

BOOL bRepaint //флажок перекрашивания окна

);

Если bRepaint=TRUE, немедленно после перемещения перерисовы­ваются те части экрана, на которых отразилось перемещение окна. Иначе окно перерисовывает себя только после обработки всех поступивших к моменту перемещения сообщений. При успешном выполнении функция возвращает ненулевое значение, иначе - нуль.

Функция SetWindowPos изменяет координаты окна hwnd на экране и его расположение по отношению к другим окнам:

BOOL SetWindowPos( HWND hwnd,

HWND hWndlnsertAfter, //дескриптор порядка размещения

int x, //новая координата левого края

int у, //новая координата верхнего края

int ex, //новая ширина

int су, //новая высота

UINT uFlags //флажок позиционирования

),

В случае успешного выполнения она возвращает ненулевое значение.

Параметр hWndInsertAfter может быть дескриптором предшествую­щего окна или равным одному из следующих значений:

Значение

Пояснение

HWND_BOTTOM

Помещает окно ниже других окон

HWND_NOTOPMOST

Помещает временное или дочернее окно выше временных и дочерних, но ниже перекрывающихся окон

HWND_TOP

Помещает окно выше всех окон

HWND_TOPMOST

То же, что HWNDNOTOPMOST, но окно сохраняет позицию после потери активности

Параметр uFlags может быть комбинацией значений из нижеследую­щей таблицы:

Значение

Пояснение

SWP_DRAWFRAME

Вокруг окна рисовать заданную в клас­се окна рамку

SWP_FRAMECHANGED

Функции окна посылать сообщение об изменении размеров, даже если раз­ мер окна не изменяется

SWP_HIDEWINDOW

Скрыть окно

SWP_NOACTIVATE

Отменить активность окна

SWP_NOCOPYBITS

Стереть содержимое рабочей области

SWP_NOMOVE

Сохранить текущую позицию

SWP_NOOWNERZORDER или SWP NOREPOSITION

Не изменять расположение окна отно­ сительно других окон

SWP_MOREDRAW

Не перерисовывать содержимое окна

SWP_NOSENDCHANGING

Не сообщать об изменении позиции

SWP_NOSIZE

Сохранить текущий размер

SWP_NOZORDER

Не менять расположение

SWP_SHOWWINDOW

Показать окно

При одновременной работе нескольких приложений одно из них можно вывести на передний план и передать его окну фокус ввода.

Для этих целей используют функцию SetForegroundWmdow. Она по­мещает поток, который создал заданное окно, на передний план и акти­визирует это окно. Синтаксис этой функции:

BOOL SetForegroundWindow (HWND Wnd );

В случае успешного перемещения функция возвращает ненулевое значение, иначе - нуль.

Для перемещения окна важно знать системные метрики экрана и ок­на. Их получают с помощью функции GetSystemMetncs. Она возвращает метрики и текущие установки конфигурации системы. Метрики систе­мы- это габариты (ширина и высота) отображаемых элементов Windows. Все габариты возвращаются в пикселях.

Функция GetSystemMetncs объявлена следующим образом.

int GetSystemMetncs (int nindex);

Параметр nindex указывает на возвращаемую метрику системы или установку конфигурации. Ниже приводится таблица некоторых имен для этого параметра:

Имя

Возвращаемая характеристика

SM CXMIN

Минимальная ширина окна

SM CYMIN

Минимальная высота окна

SM CXSCREEN

Ширина экрана

SM CYSCREEN

Высота экрана

SM CYCAPTION

Высота заголовка

SM CYMENU

Высота полосы меню

Например, следующий оператор определяет ширину экрана:

int w=GetSystemMetrics(SM_CXSCREEN);

Следующая функция позволяет получить координаты обрамляющего окно hwnd прямоугольника.

BOOL GetWindowRect( HWND hwnd, LPRECT lpRect);

Параметр lpRect указывает на структуру типа RECT.

typedef struct

{

LONG left, //левый край

LONG top, //верхний край

LONG right, //правый край

LONG bottom//нижний край

} RECT,

Координаты прямоугольника отсчитываются от левого верхнего угла экрана в пикселях. В случае успешного выполнения функция возвращает ненулевое значение. Следующий фрагмент демонстрирует получение экранных координат прямоугольника окна:

RECT гс; GetWindowRed(hwnd, &гс);

Функция GetClientRect возвращает координаты прямоугольника, об­рамляющего рабочую область окна:

BOOL GetClientRect( HWND hwnd, LPRECT IpRect);

При этом прямоугольник смещен в левый верхний угол экрана. То есть rc.left=Tc.top=0, а значения полей right и bottom равны соответствен­но ширине и высоте рабочей области.