case IDM_HELP_ABOUT:
DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDOK:
SendMessage(hWnd, WM_ACTIVATE, MAKEWPARAM(WA_INACTIVE,0), (LPARAM)hWnd);
SendMessage (hWnd, WM_CLOSE, 0, 0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
11. Теперь этот код следует детально рассмотреть. Ветка case 200 перехватывает сообщение от первой кнопки в левом столбце и в качестве реакции посылает команду установки текста WM_SETTEXT этой же кнопке (gJiwndBl).
12. Ветка case 207 перехватывает сообщение от первой кнопки в правом столбце и посылает первой кнопке в левом столбце команду присвоить другое значение тексту.
13. Ветка case 208 перехватывает сообщение от второй кнопки в правом столбце и выводит окно сообщения с заданным текстом и заголовком.
Окна сообщений
Все окна сообщений выводятся на экран при помощи функции MessageBox. Эта функция несколько раз использовалась в примерах, и не нуждается в детальном рассмотрении. Оговорить надо лишь последний параметр, в котором передается константа, определяющая тип сообщения. Возможные значения приведены в следующем списке.
? МВ_0К – системная кнопка OK в правом углу сообщения.
? MBOKCANCEL – кнопки OK и Cancel.
? MBABORTRETRYIGNORE – кнопки Abort, Retry и Ignore.
? MBYESNOCANCEL – кнопки Yes, No и Cancel.
? MB_YESN0 – кнопки Yes и No.
? MB_RETRYCANCEL – кнопки Retry и Cancel.
Константы, определяющие рисунок на сообщении, приведены отдельно.
? MB_ICONHAND – красный круг с восклицательным знаком.
? MB_ICONQUESTION – белый круг с вопросительным знаком.
? MB_ICONEXCLAMATION – желтый треугольник с восклицательным знаком.
? MBICONASTERISK – белый круг с буквой I.
Эти два типа констант могут быть использованы в объединении. Например, если нужно вывести сообщение с тремя кнопками и рисунком вопросительного знака, то в качестве последнего параметра следует использовать следующую конструкцию:
MB_YESNOCANCEL | MB_ICONQUESTION
Функция MessageBox возвращает значение типа int, которое соответствует номеру кнопки, которая была нажата. Например, если были отображены кнопки Yes, No и Cancel, а пользователь нажал кнопку No, то будет возвращено значение 2. Пример реакции на нажатие кнопки приведен в рассматриваемом упражнении.
Упражнение 4.3 (продолжение)
14. Изменить код реакции на нажатие кнопки с идентификатором 208, как показано в листинге 4.17.
Листинг 4.17.
case 208:
msgResult = MessageBox (hWnd, L" Это тело сообщения!",
L" А это заголовок", MB_OKCANCEL|MB_ICONQUESTION);
if (msgResult==1)
SendMessage (g_hwndB1, WM_SETTEXT, 0, (LPARAM)(LPSTR)L" Да!!!");
if(msgResult==2)
SendMessage (g_hwndB1, WM_SETTEXT, 0, (LPARAM)(LPSTR)L" Нет!!!");
break;
15. В начале функции WndProc нужно объявить целочисленную переменную msgResult.
16. Запустить проект. При нажатии второй кнопки в правом столбце будет выведено сообщение с кнопками OK и Cancel, и вопросительным знаком. Щелчок на кнопке OK выведет на кнопку 200 надпись Да!!! а кнопка Cancel приведет к появлению надписи Нет!!!.
17. Теперь нужно узнать, как можно получить значение состояния радиокнопки или флажка. Для этого нужно добавить объявление еще одной переменной в начало функции WndProc.
wchar_t *szStr;
18. Изменить объявление переменной хэндлера и добавить переменную, которая будет хранить идентификатор еще одной кнопки.
HWNDg_hwndB1, g_hwndB2;
19. Изменить код обработки щелчка на кнопке 207, как показано в листинге 4.18. Листинг 4.18
case 207:
msgResult=SendMessage (g_hwndB2, BM_GETCHECK, 0, 0);
switch (msgResult)
{
case 0: szStr = L" UnChecked";
break;
case 1: szStr = L" Checked";
break;
case 2: szStr = L" GrayChecked";
break;
}
SendMessage (g_hwndB1, WM_SETTEXT, 0, (LPARAM)(LPSTR)szStr);
break;
20. Функция SendMessage может возвращать полезные сведения, когда это поведение диктуется соответственным типом сообщения. В данном случае флажку было послано сообщение BM_GETCHECK. Это сообщение интерпретируется как запрос о его состоянии, и соответствующий компонент вернул ответ в виде целого числа.
21. Запустить проект. При нажатии правой кнопки, в левую кнопку записывается текущее состояние кнопки AutoCheck3State.
EDIT, LISTBOX и COMBOBOX
Эти компоненты объединены в одном разделе потому, что орган управления ComboBox, объединяет в себе функциональность двух других, являясь комбинацией органов управления Edit и ListBox. Функциональность этих компонентов рассматривается в новом упражнении.
Упражнение 4.4
1. Создать новый проект (File ? New ? Projects ? WCE Pocket PC 2002 Application) и назвать его CombEdLi. На следующем шаге мастера нужно выбрать тип приложения A typical «Hello Word» application, после чего нажать кнопку Finish.
2. Сразу же закомментировать вызов функций LoadString и DrawText, как это было сделано в предыдущем упражнении.
3. В начале файла объявить в разделе Global Variables несколько переменных:
HWNDg_hwndComB, g_hwndLnEd, g_hwndPass, g_hwndList, g_hwndMlnEd; HWNDg_hwndBtn1, g_hwndBtn2, g_hwndBtn3;
Это идентификаторы всех элементов, которые будут созданы на форме.
Читать дальше
Конец ознакомительного отрывка
Купить книгу