Вы находитесь на странице: 1из 5

Лекция 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 сохраняет текущие размеры окна (игнорирует установленные
значения параметров cx и cy);
SWP_NOMOVE сохраняет текущую позицию окна (игнорирует установленные значе-
ния параметров x и y);
SWP_SHOWWINDOW отображает окно;
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 активизирует окно и отображает его в текущей позиции с текущими разме-
рами, указанными в параметре rcNormalPosition;
SW_SHOWMINIMIZED активизирует окно и отображает его в виде значка;
SW_SHOWMAXIMIZED активизирует и разворачивает окно;
SW_SHOWNOACTIVATE отображает неактивное окно в его текущей позиции с текущими размерами,
указанными в параметре rcNormalPosition;
SW_MINIMIZE минимизирует окно и активизирует окно верхнего уровня;
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 определяет состояние окна. Этот параметр может принимать те же значения что и па-
раметр nCmdShow у функции ShowWindow ( );
flags определяет флажки, которые управляют позицией минимизированного окна и методом
восстановления окна. Этот член может содержать один или оба из следующих флажков:
WPF_SETMINPOSITION определяет, что окно будет свёрнуто в позицию с координатами,
указанными в члене структуры ptMinPosition;
WPF_RESTORETOMAXIMIZED если флаг установлен, то окно после свёртывания будет
развёрнуто, если флаг отсутствует, то окно после свёртывания будет
восстановлено.

Выжол Ю.А. Программирование на Visual C++


Лекция 5 Методы класса диалога 4
Получение информации о позиции, размере и стиле отображения окна
Функция GetWindowPlacement ( ) позволяет получить информацию о позиции, размере и стиле ото-
бражения окна:
BOOL GetWindowPlacement ( WINDOWPLACEMENT* lpwndpl ) const ;
Функция возвращает ненулевое значение, если операция успешно выполнена, и ноль в противном
случае. После выполнения функции информация о состоянии окна будет передана в переменную типа
WINDOWPLACEMENT, адрес которой передаётся функции в качестве параметра. Функция является
константной, т.е. не изменяет состояния текущего объекта.

Изменение позиции, размера и стиля отображения окна


Изменить состояния окна позволяет функция SetWindowPlacement ( ) , прототип которой имеет вид:
BOOL SetWindowPlacement ( const WINDOWPLACEMENT* lpwndpl ) ;
Функция возвращает ненулевое значение, если операция успешно выполнена, и ноль в противном
случае. В качестве параметра функция получает константный указатель на переменную типа WINDOW-
PLACEMENT. Функция не изменяет состояния переменной, адрес которой равен 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++


Лекция 5 Методы класса диалога 5
lpRect указатель на структуру типа RECT или объект типа CRect. После вызова функции поля
left и top будут равны 0, а поля right и bottom будут содержать ширину и высоту окна в
пикселях.

Перемещение окна
Изменить положение и размеры окна можно с помощью двух перегруженных функций MoveWin-
dow ( ), прототипы которых имеет вид:
void MoveWindow ( int x , int y , int nWidth , int nHeight , BOOL bRepaint = TRUE ) ;
void MoveWindow ( LPCRECT lpRect , BOOL bRepaint = TRUE ) ;
x,y определяет новые координаты верхнего левого угла окна;
nWidth , nHeight определяет новые значения ширины и высоты окна;
lpRect указатель на прямоугольник, который определяет новое положение и размеры ок-
на;
bRepaint определяет, будет ли окно перерисовано. Если параметр равен TRUE, то роди-
тельское окно получает сообщение WM_PAINT;
Функция MoveWindow ( ) посылает родительскому окно сообщение WM_GETMINMAXINFO.

Проверка и обмен данными


Функция UpdateData ( ) осуществляет проверку данных и их обмен между элементами управления
диалогового окна и связанными с ними переменными-членами класса.
BOOL UpdateData ( BOOL bSaveAndValidate = TRUE ) ;
Возвращает ненулевое значение, если операция выполнена успешно. Если значение параметра
bSaveAndValidate равно TRUE, то возвращаемое ненулевое значение означает, что данные были ус-
пешно проверены.
Параметр bSaveAndValidate определяет направление обмена данными:
TRUE данные из элементов управления передаются в связанные с ними переменные-члены
класса (по умолчанию);
FALSE данные из переменных-членов класса передаются элементам управления.
При проверке данных функция UpdateData ( ) выполняет следующие действия:
проверяет соответствие типа данных, введенных в элемент управления, типу связанной с ним пе-
ременной категории Value;
если обнаружено несоответствие типов, то на экран выводится окно сообщений с соответствующим
предупреждением, а выполнение программы прерывается;
если переменная, связанная с элементом управления, имеет числовой тип и для неё установлен
диапазон возможных значений с помощью ClassWizard, то при выходе за границы диапазона на эк-
ран также выводится окно сообщений с соответствующим предупреждением;
Функция UpdateData ( ) автоматически вызывается при закрытии диалога с помощью кнопки OK.

Выжол Ю.А. Программирование на Visual C++

Вам также может понравиться