else
{
CheckDlgButton(hDlg.IDC_RADI03.BST_CHECKED): //EnableWindow(GetDlgItem(hDlg.HEIGHT).TRUE):
}
break;

case IDOK: //Ввод значений параметров перед закрытием диалога. UpdateData(hDlg): DestroyWindow(hDlg): return TRUE:

case IDCANCEL: // Выход без изменения параметров. RestoreParamO: UpdateImage(hDlg); return FALSE;

}

//Сюда процесс вычислений попадает при любых операциях в диалоговом окне

UpdateData(hDlg);

Updatelmage(hDlg); //Параметры обновляются

//Если эти два оператора закомментировать, возникнет синхронный режим работы break; }

return FALSE; }

Программа обеспечивает асинхронный режим обновления параметров. Изменение любого поля сразу же, без закрытия диалога, влечет за собой изменение соответствующего параметра. При нажатии кнопки Отказ диалоговое окно не закрывается сразу. В этом случае лишь восстанавливаются значения параметров, установленные до вызова диалога, позволяя пробовать другой вариант настройки.

При запуске данного проекта можно увидеть, что параметры обновляются слишком часто, по каждому сообщению WM_COMMAND. Окно класса edit посылает это сообщение не только при завершении ввода числа. При помощи этого сообщения диалоговой процедуре передаются извещения EN_SETFOCUS и EN_KILLFOCUS о получении и потере окном фокуса ввода, извещения EN_CHANGE и ENJJPDATE после ввода каждого нового символа и извещение EN_MAXTEXT, говорящее о том, что ввод строки прекращен.

Извещение EN_MAXTEXT может посылаться после нажатия клавиши Enter (при условии, что в свойствах поля редактирования взведены флаги стиля ES_MULTILINE и WANTRETURN) и после заполнения символами всего поля ввода (при условии, что не взведен флаг стиля ES_AUT0HSCR0LL).

Подобное поведение поля ввода приведет к тому, что колесо или высота текстовой области будет изменяться при вводе каждой новой цифры. Лучше вызывать обновление данных только при нажатии клавиши Enter или потере фокуса управляющим элементом, как это показано в листинге 8.8.

Применение переключателей Листинг 8.8

case WM_COMMAND: switch(LOWORD(wParam)) {
char s[80]:

⇐ Предыдущая| |Следующая ⇒