Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC Лекции PDF / VC 05 Лек Методы класса диалогового окна.pdf
Скачиваний:
41
Добавлен:
15.02.2015
Размер:
341.38 Кб
Скачать

Лекция 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++