- •Функции класса окна CWnd
- •Получение заголовка окна
- •Установка заголовка окна
- •Получение длины заголовка
- •Изменение позиции, размеров окна и состояния окна
- •Отображение окна
- •Структура WINDOWPLACEMENT
- •Изменение позиции, размера и стиля отображения окна
- •Изменение доступа к окну
- •Получение размеров окна. Функция GetWindowRect
- •Перемещение окна
- •Проверка и обмен данными
Лекция 5 |
Методы класса диалога |
1 |
Л Е К Ц И Я 5
МЕТОДЫ КЛАССА CWND________________________________________________________________ 1
Функции класса окна CWnd _______________________________________________________________ 1 Получение заголовка окна_________________________________________________________________ 1 Установка заголовка окна _________________________________________________________________ 2 Получение длины заголовка _______________________________________________________________ 2 Изменение позиции, размеров окна и состояния окна _________________________________________ 2 Отображение окна ______________________________________________________________________ 3 Структура WINDOWPLACEMENT __________________________________________________________ 3
Получение информации о позиции, размере и стиле отображения окна __________________________ 4 Изменение позиции, размера и стиля отображения окна_______________________________________ 4
Изменение доступа к окну________________________________________________________________ 4 Получение размеров окна. Функция GetWindowRect __________________________________________ 4
Получение размеров клиентской области окна. Функция GetClientRect ___________________________ 4
Перемещение окна _____________________________________________________________________ 5 Проверка и обмен данными ______________________________________________________________ 5
МЕТОДЫ КЛАССА CWND
Свойства диалогового окна, как правило, устанавливаются в режиме конструктора в окне свойств Properties, но могут также быть изменены в ходе выполнения программы. Язык Visual C++ является объ- ектно-ориентированным языком, поэтому изменить свойства объекта путём изменения значения некоторой переменной нельзя. Для этой цели каждый объект содержит методы, с помощью которых можно изменить его свойства в ходе выполнения программы.
Класс CWnd обеспечивает основные функциональные возможности всех классов окна в библиотеке фундаментальных классов Microsoft (Microsoft Foundation Class Library – MFC). Класс является наследни-
ком классов CObject и CCmdTaget и автоматически наследует их свойства и методы.
CObject
CCmdTaget
CWnd
Функции класса окна CWnd
Ниже приведены некоторые методы класса CWnd.
GetWindowText ( ) |
получает заголовок окна или текст, введённый в элемент управления; |
SetWindowText ( ) |
устанавливает заголовок окна или содержимое элемента управления; |
GetWindowTextLength ( ) возвращает количество символов в заголовке окна; |
|
SetWindowPos ( ) |
изменяет позицию, размеры и порядок отображения дочерних, всплываю- |
ShowWindow ( ) |
щих окон и окон верхнего уровня |
изменяет стиль отображения окна; |
|
GetWindowPlacement ( ) |
позволяет получить информацию о позиции, размере и стиле отображения |
IsWindowEnabled ( ) |
окна; |
определяет, доступен ли диалог или элемент управления; |
|
EnableWindow ( ) |
изменяет доступ к диалогу или элементу управления; |
GetWindowRect ( ) |
копирует положение окна в структуру типа RECT; |
GetClientRect ( ) |
копирует размеры клиентской области окна в структуру типа RECT; |
MoveWindow ( ) |
изменяет положение и размеры окна; |
UpdateData ( ) |
осуществляет проверку данных и их обмен между элементами управления |
|
диалога и связанными с ними переменными-членами класса; |
Получение заголовка окна
Определить значение заголовка окна или текста, введённого в элемент управления, можно с помощью функции, объявленной в классе CWnd:
Выжол Ю.А. |
Программирование на Visual C++ |
Лекция 5 |
Методы класса диалога |
2 |
|
void GetWindowText ( CString & String ) const ; |
|
String |
переменная типа CString получает заголовок окна. Если окно является элементом |
|
|
управления – то получает содержимое окна. |
|
В следующем примере считывается текст из текстового поля IDC_CAP, с которым связана перемен- ная-член класса m_cap:
CString S ; |
// объявляет строковую переменную |
m_cap.GetWindowText ( S ) ; |
// считывает данные из текстового поля IDC_CAP в переменную S |
Установка заголовка окна
Установить новое значение заголовка окна или текста в элементе управления, можно с помощью следующейфункции:
BOOL SetWindowText ( LPCTSTR lpszString ) ;
lpszString указатель на строку, значение которой будет использовано в заголовке окна. Если окно является элементом управления – то в содержимое окна.
В приведённом ниже примере мы изменяем заголовок текущего диалогового окна.
SetWindowText ( ''Заголовок окна'' ) ; |
// изменяет заголовок текущего диалога |
Получение длины заголовка
Получить количество символов в заголовке окна можно с помощью следующей функции: int GetWindowTextLength ( ) const ;
В следующем примере осуществляется |
определение длины текста в элементе управления |
IDC_CAP, с которым связана переменная-член класса m_cap: |
|
int L = m_cap.GetWindowTextLength ( ) ; |
// определяет длину текста в поле IDC_CAP |
Изменение позиции, размеров окна и состояния окна
Изменить позицию, размеры и порядок отображения дочерних, всплывающих окон и окон верхнего уровня можно с помощью функции:
BOOL SetWindowPos ( const CWnd* pWndInsertAfter , int x , int y , int nWidth , int nHeight , UINT nFlags ) ;
Функция возвращает ненулевое значение, если она успешно выполнена, и 0 в противном случае. Параметры функции имеют следующее назначение:
pWndInsertAfter |
указатель на окно, если окно является элементом управления, то NULL; |
|
x , y |
определяет новые координаты верхнего левого угла окна; |
|
nWidth , nHeight |
определяет новые значения ширины и высоты окна; |
|
nFlags |
определяет опции размера и позиции окна. Этот параметров может быть комби- |
|
SWP_NOSIZE |
нацией следующих констант: |
|
|
сохраняет текущие размеры окна (игнорирует установленные |
|
SWP_NOMOVE |
|
значения параметров cx и cy); |
|
сохраняет текущую позицию окна (игнорирует установленные значе- |
|
SWP_SHOWWINDOW |
ния параметров x и y); |
|
отображает окно; |
||
SWP_HIDEWINDOW |
скрывает окно; |
|
SWP_DRAWFRAME |
рисует рамку вокруг окна, определённую при его создании; |
|
SWP_FRAMECHANGED |
всегда посылает окну сообщение WM_NCCALCSIZE. Если флаг не |
|
|
|
установлен, посылает окну сообщение WM_NCCALCSIZE только в |
SWP_NOACTIVATE |
том случае, когда изменены размеры окна; |
|
не активизирует окно; |
||
SWP_NOCOPYBITS |
отказывается от содержимого клиентской области; |
|
SWP_NOOWNERZORDER |
не изменяет позицию окна в иерархии окон; |
|
SWP_NOREDRAW |
|
не перерисовывает изменения; |
SWP_NOSENDCHANGING |
отменяет отправку окну сообщения WM_WINDOWPOSCHANGING; |
|
SWP_NOZORDER |
|
сохраняет текущую иерархию окон (игнорирует установленные значе- |
|
|
ния параметра pWndInsertAfter). |
Выжол Ю.А. |
|
Программирование на Visual C++ |
Лекция 5 |
Методы класса диалога |
3 |
В приведённом ниже примере мы изменяем размеры текстового поля IDC_DATA, с которым связана переменная-член класса m_data:
int L = 120 , H = 20 ; |
// новые размеры текстового поля IDC_DATA |
int flag = SWP_SHOWWINDOW | SWP_NOMOVE ; |
// установка флагов |
// отображение текстового поля IDC_DATA с прежними координатами и новыми размерами c_data.SetWindowPos ( NULL , 10 , 50 , L , H , flag ) ;
Следующий пример демонстрирует отображение невидимого текстового поля IDC_DATA, с которым связана переменная-член класса m_data:
int flag = SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE ; // устанавливает флаги m_data.SetWindowPos ( NULL , 0 , 0 , 0 , 0 , flag ) ; // скрывает текстовое поле IDC_DATA
Отображение окна
Изменить стиль отображения окна можно с помощью функции ShowWindow ( ), прототип которой имеет вид:
BOOL ShowWindow ( int nCmdShow ) ;
Функция возвращает ненулевое значение, если окно было видимым. Если окно было невидимым – то возвращает ноль. Параметр функции может принимать одно из следующих значений:
SW_HIDE |
скрывает окно и активизирует другое окно; |
SW_SHOW |
активизирует окно и отображает его в текущей позиции с текущими разме- |
SW_SHOWMINIMIZED |
рами, указанными в параметре rcNormalPosition; |
активизирует окно и отображает его в виде значка; |
|
SW_SHOWMAXIMIZED |
активизирует и разворачивает окно; |
SW_SHOWNOACTIVATE |
отображает неактивное окно в его текущей позиции с текущими размерами, |
SW_MINIMIZE |
указанными в параметре rcNormalPosition; |
минимизирует окно и активизирует окно верхнего уровня; |
|
SW_SHOWMINIMIZED |
отображает окно в виде значка. Активное окно остаётся активным; |
SW_SHOWNA |
отображает окно в его текущем состоянии. Активное окно остаётся актив- |
SW_RESTORE |
ным; |
активизирует и восстанавливает окно; |
|
SW_SHOWNORMAL |
активизирует и восстанавливает окно. |
В следующем примере мы скрываем элемент управления IDC_DATA, с которым связана перемен-
ная-член класса m_data. |
|
m_data.ShowWindow ( SW_HIDE ) ; |
// скрывает элемент управления IDC_DATA |
Структура WINDOWPLACEMENT
Структура WINDOWPLACEMENT содержит информацию о позиции, размере и состоянии окна.
typedef struct tagWINDOWPLACEMENT
{
UINT length ; |
// длина структуры в байтах |
UINT flags ; |
// управляет методом восстановления окна |
UINT showCmd ; |
// определяет состояние окна |
POINT ptMinPosition ; |
// определяет позицию минимизированного окна |
POINT ptMaxPosition ; |
// определяет позицию развёрнутого окна |
RECT rcNormalPosition ; |
// определяет позицию и размеры восстановленного окна |
} WINDOWPLACEMENT ; |
|
Поля структуры имеют следующее назначение:
showCmd |
определяет состояние окна. Этот параметр может принимать те же значения что и па- |
flags |
раметр nCmdShow у функции ShowWindow ( ); |
определяет флажки, которые управляют позицией минимизированного окна и методом |
|
|
восстановления окна. Этот член может содержать один или оба из следующих флажков: |
WPF_SETMINPOSITION определяет, что окно будет свёрнуто в позицию с координатами, указанными в члене структуры ptMinPosition;
WPF_RESTORETOMAXIMIZED если флаг установлен, то окно после свёртывания будет развёрнуто, если флаг отсутствует, то окно после свёртывания будет восстановлено.
Выжол Ю.А. |
Программирование на Visual C++ |
Лекция 5 |
Методы класса диалога |
4 |
Получение информации о позиции, размере и стиле отображения окна
Функция GetWindowPlacement ( ) позволяет получить информацию о позиции, размере и стиле отображения окна:
BOOL GetWindowPlacement ( WINDOWPLACEMENT* lpwndpl ) const ;
Функция возвращает ненулевое значение, если операция успешно выполнена, и ноль в противном случае. После выполнения функции информация о состоянии окна будет передана в переменную типа WINDOWPLACEMENT, адрес которой передаётся функции в качестве параметра. Функция является константной, т.е. не изменяет состояния текущего объекта.
Изменение позиции, размера и стиля отображения окна
Изменить состояния окна позволяет функция SetWindowPlacement ( ) , прототип которой имеет вид:
BOOL SetWindowPlacement ( const WINDOWPLACEMENT* lpwndpl ) ;
Функция возвращает ненулевое значение, если операция успешно выполнена, и ноль в противном случае. В качестве параметра функция получает константный указатель на переменную типа WINDOWPLACEMENT. Функция не изменяет состояния переменной, адрес которой равен lpwndpl.
В приведённом ниже примере мы сдвигаем текущий диалог на 20 диалоговых единиц влево.
WINDOWPLACEMENT Pos ; |
// объявляет переменную типа WINDOWPLACEMENT |
GetWindowPlacement ( &Pos ) ; |
// копирует информации о состоянии окна в переменную Pos |
|
// изменяет информацию о позиции окна |
Pos.rcNormalPosition.left = Pos.rcNormalPosition.left – 20 ; |
|
Pos.rcNormalPosition.right = Pos.rcNormalPosition.right – 20 ; |
|
SetWindowPlacement ( &Pos ) ; |
// изменяет позицию окна |
Изменение доступа к окну
Изменить доступ к диалогу или элементу управления можно с помощью функции EnableWindow ( ), прототип которой имеет вид:
BOOL EnableWindow ( BOOL bEnable = TRUE ) ;
Функция возвращает ненулевое значение, если окно не имело доступа. Функция возвращает ноль, если окно имело доступ или произошла ошибка.
Параметр bEnable определяет, будет ли данное окно доступным. Если этот параметр равен TRUE, то окно будет доступным. Если этот параметр имеет значение FALSE, то окно будет заблокировано.
Если окно заблокировано, то оно не реагирует на щелчки мыши и ввод с клавиатуры. Если блокировка окна изменяется, то посылается родительскому окну сообщение WM_ENABLE. Если диалоговое окно заблокировано, то будут также заблокированы и все его дочерние окна и элементы управления. При создании окно по умолчанию имеет доступ.
Получение размеров окна. Функция GetWindowRect
Клиентской областью называется вся площадь диалогового окна или элемента управления за исключением его границы. Рисунок может располагаться во всей клиентской области. Поэтому при формировании рисунка необходимо знать её размеры. Для получения размеров клиентской области можно использовать функцию GetClientRect, которая определена в классе CWnd и у всех его потомков соответственно. Функция копирует координаты клиентской области в структуру, на которую указывает параметр.
void GetWindowRect ( LPRECT lpRect ) const ;
lpRect |
указатель на структуру типа RECT или объект типа CRect. После вызова функции поля |
|
left и top будут равны 0, а поля right и bottom будут содержать ширину и высоту окна в |
|
пикселях. |
Получение размеров клиентской области окна. Функция GetClientRect
Клиентской областью называется вся площадь диалогового окна или элемента управления за исключением его границы. Рисунок может располагаться во всей клиентской области. Поэтому при формировании рисунка необходимо знать её размеры. Для получения размеров клиентской области можно использовать функцию GetClientRect, которая определена в классе CWnd и у всех его потомков соответственно. Функция копирует координаты клиентской области в структуру, на которую указывает параметр.
void GetClientRect ( LPRECT lpRect ) const ;
Выжол Ю.А. |
Программирование на Visual C++ |