ALTE DOCUMENTE
|
||||||
Инициализация списка и выбор элемент 141p158b ов
Поскольку при создании список не содержит элемент 141p158b ов, его необходимо инициализировать при первом отображении содержащего его диалога. Это довольно просто, поскольку при активизации диалога его оконная функция получает сообщение WM INITDIALOG DialogFunc
case WM INITDIALOG // Инициализация списка
SendDlgItemMessage hdwnd ID LB LB ADDSTRING
0,(LPARAM)" ");
SendDlgltemMessage(hdwnd,ID_LB1,LB_ADDSTRING,
0,(LPARAM)" ");
SendDlgltemMessage(hdwnd,ID_LB1,LB_ADDSTRING,
0,(LPARAM)" ");
SendDlgltemMessage(hdwnd,ID_LB1,LB_ADDSTRING,
LPARAM)"Виноград");
return
Этот фрагмент 141p158b программы заносит в список элемент 141p158b ы Яблоко, Апельсин, Груша и Виноград. Каждый вызов функции SendDlgItemMessage SendDlgItemMessage LB ADDSTRING lParam LPARAM). В данном случае строки добавляются в список в том порядке, в котором передаются. В зависимости от типа списка добавляемые элемент 141p158b ы могут сортироваться в алфавитном порядке. Если количество включаемых в список элемент 141p158b ов превышает число элемент 141p158b ов, которые можно отобразить в списке, к окну списка автоматически добавляется линейка прокрутки.
Выбор элемент 141p158b ов списка. После инициализации список готов к работе с ним. Существует два способа эыбора элемент 141p158b ов в списке. Во-первых, это можно сделать двойным щелчком мыши на выбираемом элемент 141p158b е. В этом случае оконной функции диалога будет направлено сообщение WM COMMAND LOWORD wParam a HIWORD wParam LBN DBLCLK. Двойной щелчок мыши обычно означает, что программа должна обработать выбор сразу же. Во-вторых, пользователь может просто изменить выбранный элемент 141p158b списка, используя клавиатуру или мышь. В этом случае сообщение в программу не посылается, выбранный элемент 141p158b запоминается, так что программа может запросить у списка номер этого элемент 141p158b а. Оба подхода иллюстрируются в приведенном ниже примере.
Если выбран какой-нибудь элемент 141p158b списка, можно определить его номер, послав списку сообщение LB GETCURSEL. В ответ список возвратит номер выбранного элемент 141p158b а. Если никакой элемент 141p158b не выбран, список возвращает LB ERR
Чтобы продемонстрировать процедуру обработки выбора элемент 141p158b ов списка, добавьте во вложенный оператор switch DialogFunc следующий фрагмент 141p158b .
case ID LB1: // Обработка сообщения LBN DBLCLK
// Если это, конечно, LBN DBLCLK
if HIWORD wParam LBN DBLCLK
return
case IDD SELFRUIT // Нажата кнопка "Выбери фрукт"
// Windows
}
return msg.wParam;
// Следующая функция вызывается ОС Windows и получает
LRESULT CALLBACK WindowFunc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
break;
case WM_DESTROY: /* завершение программы */
PostQuitMessage(0);
break;
default: // Все сообщения, не обрабатываемые
// в данной функции, направляются
// на обработку по умолчанию
return DefWindowProc(hwnd, message,
wParam, lParam);
}
return 0;
}
BOOL CALLBACK DialogFunc(HWND hdwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
return 1;
case IDD_SELFRUIT: // " "
i=SendDlgItemMessage(hdwnd,ID_LB1,
LB_GETCURSEL,
0, 0L);
if( i > -1)
sprintf
(str,
"Индекс выбранного элемент 141p158b а %d",
i);
else
sprintf(str," ");
MessageBox(hdwnd,str," ",
MB_OK);
return 1;
}
case WM_INITDIALOG: //
SendDlgItemMessage(hdwnd, ID_LB1,
LB_ADDSTRING,
0, (LPARAM)" ");
SendDlgItemMessage(hdwnd, ID_LB1,
LB_ADDSTRING,
0, (LPARAM)" ");
SendDlgItemMessage(hdwnd, ID_LB1,
LB_ADDSTRING,
0, (LPARAM)" ");
SendDlgItemMessage(hdwnd, ID_LB1,
LB_ADDSTRING,
0, (LPARAM)" ");
return 1;
return 0;
}
|