Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Программирование для карманных компьютеров - Владимир Волков

Программирование для карманных компьютеров - Владимир Волков

Читать онлайн Программирование для карманных компьютеров - Владимир Волков

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 49 50 51 52 53 54 55 56 57 ... 102
Перейти на страницу:

break;

//Окончание добавленного кода

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;

Это идентификаторы всех элементов, которые будут созданы на форме.

4. В начале функции WndProc, там, где объявляются локальные переменные, допишите объявление еще нескольких переменных, как показано в листинге 4.19.

Листинг 4.19

int i;

wchar_t *mstr[]={L" Elly", L" Totoshka", L" Strashila", L" Bastinda", L" Gingema", L" Elly",

L" Totoshka", L" Strashila", L" Bastinda", L" Gingema", L" Elly", L" Totoshka",

L" Strashila", L" Bastinda", L" Gingema"};

wchar_t tmp[128];

5. В этой же функции, в начале блока, помеченного комментарием Parse the menu selections, нужно разместить код, приведенный в листинге 4.20. Листинг 4.20

switch (wmId)

{

//Начало нашего кода:

case 200:

if(wmEvent == CBN_SELCHANGE)

{

SendMessage (g_hwndComB, CB_SETCURSEL, SendMessage (g_hwndComB,

CB_GETCURSEL, 0, 0), 0);

SendMessage (g_hwndComB, WM_COPY, 0, 0);

SendMessage (g_hwndMlnEd, WM_PASTE, 0, 0);

SendMessage (g_hwndMlnEd, EM_REPLACESEL, 0, (LPARAM)(LPCSTR)L"rn");

}

break;

case 201:

if (wmEvent == LBN_DBLCLK)

{

1 ... 49 50 51 52 53 54 55 56 57 ... 102
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Программирование для карманных компьютеров - Владимир Волков.
Комментарии