Создание
и связывание переменных с полями диалога
Для обмена
данными с окнами редактирования следует в классе диалога CPolyDlg создать переменные.
Это удобно делать с помощью мастера Studio.Net Add Member Variable.
- В окне редактора откройте
форму диалога IDD_POLYCOLOR, поставьте фокус в поле IDC_RED и, вызвав контекстное
меню, дайте команду Variable.
- В окне мастера включите
флажок Control Variable, переключатель Control-Value поставьте в положение
Value, а в других окнах задайте следующие опции:
- Control ID: IDC_PEN.
- Access: public.
- Variable Type: UINT.
- Variable Name: m_nPen.
- Нажмите кнопку Finish.
В результате
работы мастера в классе CPolyDlg должна появиться новая переменная m_nPen типа
UINT, которая будет хранить толщину пера текущего полигона и обмениваться числовым
значением с полем IDC_PEN диалога. Обмен происходит при вызове функции:
DDX_Text(pDX,
IDC_PEN, m_nPen);
который происходит
в теле функции DoDataExchange. Указанная строка программы была автоматически
вставлена мастером Member Variable wizard.
Примечание
Здесь я вынужден просить
прощения у читателя за неполную информацию, так как моя бета-версия Studio.Net
не позволяет автоматизировать процесс создания переменных и связывания их
с элементами управления диалога в той степени, в которой это должно быть.
Я уверен, что в той версии, с которой будете иметь дело вы, этот процесс будет
более эффективным. А сейчас вынужден закрывать и вновь открывать мастер для
каждой новой переменной. Мне ничего не остается, кроме как посоветовать повторить
вышеописанный процесс для создания еще трех переменных (m_nRed, m_nGreen,
m_nBlue) того же типа UINT, но связанных с другими окнами.
Для синхронизации
положений ползунков со значениями в окнах редактирования необходимо создать
еще четыре переменные (m_cColor, m_cRed, m_cGreen и m_cBiue), связанные с теми
же окнами IDC_COLOR, IDC_RED, IDC_GREEN и IDC_BLUE. На сей раз переключатель
Control-Value должен быть установлен в положение Control, а в поле Variable
Type должен быть указан или выбран наш новый класс CClrEdit. Используя ту же
технику, создайте три переменные (m_rSlider, m_gSlider и m_bSlider) типа Control
и свяжите их с тремя ползунками. При этом в поле Variable Type: должен быть
выбран класс CSliderCtrl.
Ограничения
на числовые значения, вводимые пользователем в окна редактирования, реализуются
с помощью функций динамической проверки данных. Это функции типа DDV_ (Dynamic
Data Validation), которые, так же как и функции DDX_, создаются с помощью мастера
Member Variable Wizard. Однако эту часть работы в бета-версии Studio.Net приходится
делать вручную. Вам придется самостоятельно найти справку по использованию мастера
для автоматизации создания функций проверки данных. Тема в указателе справочной
системы обозначена как Dialog Data Exchange and Validation. Важной особенностью
использования функций типа DDV_ является то, что для каждого элемента управления
вызовы DDV_ -функций должны непосредственно следовать за вызовами оох_-функций.
Нам надо задать ограничения на значения цвета (0-255) и значение толщины пера
(0-100). В конечном счете функция DoDataExchange должна приобрести вид:
void
CPolyDlg::DoDataExchange(CDataExchange*
pDX)
{
//======
Связывание Control-переменных с ползунками
DDX_Control(pDX,
IDC_BSLIDER, m_bSlider);
DDX_Control(pDX,
IDCJ3SLIDER, m_gSlider);
DDX_Control(pDX,
IDC_RSLIDER, m_rSlider);
//====
Связывание Control-переменных с нестандартными
//====
окнами редактирования
DDX_Control(pDX,
IDC_COLOR, m_cColor) ;
DDX_Control(pDX,
IDC_BLUE, m_cBlue);
DDX_Control(pDX,
IDC_GREEN, m_cGreen);
DDX_Control
(pDX, IDC_RED, m_cRed) ;
//====
Связывание Value-переменных с нестандартными
//====
окнами редактирования и проверка данных
DDX_Text(pDX,
IDC_BLUE, m_nBlue);
DDV_MinMaxUInt(pDX,
m_nBlue, 0, 255);
DDX_Text
(pDX, IDC_GREEN, m_nGreen);
DDV_MinMaxUInt(pDX,
m_nGreen, 0, 255);
DDX_Text(pDX,
IDC_RED, m_nRed) ;
DDV_MinMaxUInt(pDX,
m_nRed, 0, 255);
DDX_Text(pDX,
IDC_PEN, m_nPen);
DDV_MinMaxUInt(pDX,
m_nPen, 1, 100);
//====
Вызов родительской версии функции обмена CDialog::DoDataExchange(pDX);
}