- •Лекции 4- 5
- •Элементы
- •Основные стандартные
- •Создание
- •Кнопки – класс “button”
- •BS_LEFTTEXT
- •Кнопки могут находиться в двух состояниях: нажатом и отжатом. Для управления этими состояниями
- •Кнопки стилей BS_3STATE, BS_CHECKBOX, BS_RADIOBUTTON не перерисовываются при их переключении. Для выполнения этого
- •Статический элемент
- •SS_BLACKFRAME
- •Редактор текста –
- •ES_AUTOHSCROLL
- •Сообщения для редактора текста
- •Младшее слово wParam – идентификатор.
- •Пример
- •Функции StrToInt и IntToStr() для перевода строки в целое число и обратно.
- •LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
- •case WM_COMMAND:
- •Пример работы программы
- •Списки строк –
- •Список со стиле LBS_NOTIFY посылает в окно сообщение MW_COMMAND. При этом младшее слово
- •Сообщения для списка строк
- •Сообщения для списка строк
- •Пример
- •int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) {
- •//Функция InitApp
- •LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
- •case WM_COMMAND:
- •// Когда главное окно приложения получает фокус ввода, отдаем фокус списку case WM_SETFOCUS:
- •http://www.frolov-lib.ru/books/bsp/v12/ch2_5.htm
- •Комбинированный
- •Сообщения от комбинированного списка
- •Сообщения для комбинированного списка
- •Сообщения для комбинированного списка
- •Пример
- •int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
- •BOOL InitApp(HINSTANCE hInstance)
- •LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
- •case WM_COMMAND:
- •case WM_SETFOCUS:
- •http://www.frolov-lib.ru/books/bsp/v12/ch2_6.htm
- •Следующая
//Функция InitApp
//Выполняет регистрацию класса окна
//=====================================
BOOL InitApp(HINSTANCE hInstance)
{
ATOM aWndClass; // атом для кода возврата
WNDCLASS wc; // структура для регистрации // класса окна
memset(&wc, 0, sizeof(wc));
wc.style = 0;
wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0;
wc.cbWndExtra = 0; wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszMenuName = (LPSTR)NULL;
wc.lpszClassName = (LPSTR)szClassName;
// Регистрация класса aWndClass = RegisterClass(&wc);
return (aWndClass != 0);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HWND hListBox; |
// Идентификатор органа управления "listbox" |
static HWND hButton; |
// Идентификатор кнопки |
switch (msg) |
|
{ |
|
case WM_CREATE:
{// Создаем список
hListBox = CreateWindow("listbox", NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_WANTKEYBOARDINPUT, 30, 30, 200, 100, hwnd, (HMENU) ID_LIST, hInst, NULL);
SendMessage(hListBox, WM_SETREDRAW, FALSE, 0L); |
// Отменяем режим перерисовки |
списка |
|
// Добавляем в список несколько строк
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Зеленый"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Красный"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Розовый"); SendMessage(hListBox, LB_ADDSTRING, 0,(LPARAM)(LPSTR)"Пурпурный"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Синий"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Желтый"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Фиолетовый"); SendMessage(hListBox, LB_ADDSTRING, 0,(LPARAM)(LPSTR)"Черный"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Белый");
SendMessage(hListBox, WM_SETREDRAW, TRUE, 0L); // Включаем режим перерисовки списка InvalidateRect(hListBox, NULL, TRUE); // Перерисовываем список
// Создаем кнопку
hButton = CreateWindow("button", "OK", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 250, 30, 50, 20, hwnd, (HMENU) ID_BUTTON, hInst, NULL);
case WM_COMMAND:
{
if(wParam == ID_LIST) // Обработка извещения списка об ошибке
{
if(HIWORD(lParam) == (unsigned)LBN_ERRSPACE)
{
MessageBox(hwnd, "Мало памяти", szWindowTitle, MB_OK);
}
}
else if(wParam == ID_BUTTON) // Сообщение от кнопки
{
int uSelectedItem; char Buffer[256];
// Определяем номер выделенной строки, получаем текст строки //и выводим этот текст в окно
uSelectedItem = (int)SendMessage(hListBox, LB_GETCURSEL, 0, 0L);
if(uSelectedItem != LB_ERR)
{
SendMessage(hListBox, LB_GETTEXT, uSelectedItem, (LPARAM)Buffer); MessageBox(hwnd, (LPSTR)Buffer, szWindowTitle, MB_OK);
}
}
return 0;
}
// Когда главное окно приложения получает фокус ввода, отдаем фокус списку case WM_SETFOCUS:
{
SetFocus(hListBox); return 0;
}
case WM_PAINT:
{
HDC hdc; PAINTSTRUCT ps;
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 30, 10,"Выберите цвет и нажмите кнопку 'OK'", 35); EndPaint(hwnd, &ps);
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0); return 0;
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
http://www.frolov-lib.ru/books/bsp/v12/ch2_5.htm
Комбинированный |
|
список – класс |
|
Стили комбинированного списка |
|
CBS_AUTOHSCROLL “combobox”Автоматическая свертка текста по горизонтали в окне |
|
|
редактирования |
CBS_DISABLENOSCROLL |
Вертикальную полосу просмотра отображать в неактивном |
|
состоянии даже если в списке помещаются все строки |
CBS_DROPDOWN |
Список остается невидимым до тех пор, пока пользователь |
|
не нажмет пиктограмму, предназначенную для отображения |
|
списка |
CBS_DROPDOWNLIST |
Запрещает редактирование текста в однострочном |
|
текстовом редакторе |
CBS_LOWERCASE |
Преобразовывать все символы в строчные |
CBS_UPPERCASE |
Преобразовывать все символы в прописные |
CBS_SIMPLE |
Создается список, который всегда и расположен под окном |
|
однострочного редактора, содержащего выделенную в |
|
списке строку |
CBS_SORT |
Автоматически сортирует строки введенные в окно списка |
Сообщения от комбинированного списка |
|
|
|
CBN_CLOSEUP |
Список исчез (стал невидимым) |
|
|
CBN_DBLCLK |
Двойной щелчок мыши по строке списка CBS_SIMPLE |
|
|
CBN_DROPDOWN |
Список стал видимым |
|
|
CBN_EDITCHANGE |
Пользователь изменил содержимое окна редактирования и |
|
изменения отображены |
|
|
CBN_EDITUPDATE |
Пользователь изменил содержимое окна редактирования |
|
|
CBN_ERRSPACE |
Ошибка выделения дополнительной памяти |
|
|
CBN_KILLFOCUS |
Список теряет фокус управления |
|
|
CBN_SELENDCANCEL |
Пользователь отменил выбор в списке |
|
|
CBN_SELENDOK |
Пользователь выбрал строку в списке |
|
|
CBN_SEKCHANGE |
Изменился номер выбранной строки |
|
|
CBN_SETFOCUS |
Список получает фокус ввода |
|
|
Сообщения для комбинированного списка
CB_ADDSTRING, 0, |
Добавить строку lpszStr. Возвращает номер строки или |
lParam = lpszStr |
код ошибки |
|
|
CB_DELETESTRING, |
Удалить строку с номером nIndex. Возвращает |
wParam = nIndex, 0L |
количество оставшихся строк в списке или код ошибки. |
|
|
CB_DIR, wParam = uAttr, |
Заполнить список именами файлов с атрибутом uAttr – и |
lParam = lpszFileSpec |
шаблона lpszFileSpec и каталогов в текущем каталоге |
|
|
CB_FINDSTRING, |
Начиная со строки с номером nStart искать строку с |
wParam = nStart, |
префиксом lpszStr. Возвращает номер найденной строки |
lParam = lpszStr |
или код ошибке |
|
|
CB_GETCOUNT, 0, 0L |
Определить количество строк в списке. Возвращает |
|
количество или код ошибки |
|
|
CB_GETCURSEL, 0, 0L |
Определить номер выделенной строки. Возвращает |
|
номер или код ошибке. |
|
|
CB_GETDROPPEDSTATE, |
Определить, находится ли список в видимом или |
0, 0L |
невидимом состоянии. Возвращает TRUE – если виден, |
|
FALSE – если нет. |
|
|
Сообщения для комбинированного списка
CB_GETLBTEXT, |
Копировать текст строки с номером nIndex в буфер |
wParam = nIndex, |
lpBuff. Возвращает длину строки или код ошибки |
lParam = lpBuff |
|
|
|
CB_INSERTSTRING, |
Вставка строки lpBuff в список под номером nIndex. |
wParam = nIndex, |
Возвращает номер позиции или код ошибки |
lParam = lpBuff |
|
|
|
CB_LIMITEXT, |
Определить cCmax как максимально допустимое |
wParam = cCmax, 0L |
количество символов в окне редактирования. |
|
|
CB_RESETCONTENT, 0, 0L |
Удалить все строки из списка |
|
|
CB_SELECTSTRING, |
Начиная со строки с номером nIndex найти и выделить |
wParam = nIndex, |
строку с префиксом lpBuff. Возвращает номер найденной |
lParam = lpBuff |
строки или код ошибки |
|
|
CB_SETCURSEL, |
Выделить строку с номером nIndex. Возвращает код |
wParam = nIndex, 0L |
ошибки. |
|
|
CB_SHOWDROPDOWN, |
Переключение списка в отображаемое или |
wParam = (BOOL)fExt, 0L |
неотображаемое состояние. fExt = TRUE – отображать, |
|
FALSE – не отображать |
|
|
Пример
Программа создает и заполняет combobox, а также кнопку «ОК», при нажатии на которую в центре экрана выводится MessageBox с сообщением, соответствующим содержанию выбранной строки.
#include <windows.h> #define ID_CBB 10000 #define ID_BUTTON 20000 BOOL InitApp(HINSTANCE);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); char const szClassName[] = "ComboBoxAppClass";
char const szWindowTitle[] = "ComboBox Demo"; HINSTANCE hInst;