Загрузил Анатолий Матусевич

Лабораторная работа 8

реклама
Учреждение «Университет «Туран»
Факультет «Академия кино и телевидения»
Специальность «Вычислительная техника
и программное обеспечение»
Лабораторная работа 8
По дисциплине:
«Системное программирование»
Выполнил: студент группы ВТПО 20-1
Матусевич А.С.
3 – Заполнить выпадающий список используя клавишу F2, заскринить.
4 – Удалить элемент выпадающего списка используя клавишу F8, заскринить.
Заполнил список (f2 or enter)
Удалил элемент списка (f8 или delete)
#include <Windows.h>
LRESULT CALLBACK winproc(HWND, UINT, WPARAM, LPARAM);
WNDCLASSEXW ws; //струкутра для регистрации класса окон
const wchar_t* wn = L"class1"; //имя класса
MSG msg; //для сообщения
HWND hwnd, hb[2]; //для дескрипторов элементов окна
HINSTANCE h;
int flag, i;
wchar_t ss[100];
int CALLBACK WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
)
{
h = hInstance;
ws.cbSize = sizeof(WNDCLASSEXW); ws.cbClsExtra = 0;
ws.cbWndExtra = 0; ws.hIcon = LoadIcon(NULL, IDI_APPLICATION);
ws.hCursor = LoadCursor(NULL, IDC_ARROW);
ws.hbrBackground = CreateSolidBrush(RGB(0, 80, 80));
ws.hIcon = NULL; ws.hInstance = hInstance;
ws.lpszClassName = wn; ws.lpszMenuName = NULL;
ws.lpfnWndProc = (WNDPROC)winproc; ws.style = CS_VREDRAW | CS_HREDRAW;
//зарегистрировать класс окна
if (RegisterClassExW(&ws) == 0) {
MessageBoxExW(0, L"Ошибка регистрации!", L"Сообщение", 0, 0);
return 0;
};
//создать окно
hwnd = CreateWindowExW(0, wn,
L"Окно с ComboBox", WS_OVERLAPPEDWINDOW,
10, 10, 400, 300, NULL, NULL, hInstance, NULL);
//сделать окно видимым
ShowWindow(hwnd, nCmdShow);
//обновить содержимое
UpdateWindow(hwnd);
//цикл обработки сообщений
while (GetMessage(&msg, NULL, NULL, NULL)) {
if (msg.message == WM_KEYDOWN) {
winproc(msg.hwnd, msg.message, msg.wParam, msg.lParam);
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//выход из программы
return (int)msg.wParam;
}
//функция окна
LRESULT CALLBACK winproc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
int ind;
switch (uMsg) {
case WM_KEYDOWN:
//обработка нажатия клавиши tab
if (wParam == 9) {
if (i == 2)i = 0; else i++;
SetFocus(hb[i]);
}
//проверяем фокус и код клавиши
if ((flag == 1 && wParam == 0x71) || (flag == 1 && wParam == 0x0D)) { //f2 - добавляем к
списку
SendMessageW(hb[0], WM_GETTEXT, 50, (LPARAM)ss);
SendMessageW(hb[0], CB_ADDSTRING, 0, (LPARAM)(LPSTR)ss);
}
if ((flag == 1 && wParam == 0x77) || (flag == 1 && wParam == 0x2E)) { //f8 - удаляем из
списка
//получить индекс элемента
ind = (int)SendMessageW(hb[0], CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
if (ind != -1) {
//удалить элемент
SendMessageW(hb[0], CB_DELETESTRING, ind, 0);
}
}
break;
case WM_CREATE:
//выпадающий список
i = 1;
hb[0] = CreateWindowExW(0, L"ComboBox", L" ",
WS_CHILD | WS_VISIBLE | CBS_DROPDOWN | WS_OVERLAPPED |
CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | WS_VSCROLL,
10, 10, 150, 300, hWnd, 0, h, NULL);
//кнопка
hb[1] = CreateWindowExW(0, L"button", L"Выход",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 200, 10, 80, 30, hWnd, 0, h, NULL);
break;
case WM_COMMAND:
//события выпадающего списка
if (lParam == (int)hb[0]) {
if (HIWORD(wParam) == CBN_SETFOCUS) {
//получил фокус
flag = 1;
}
if (HIWORD(wParam) == CBN_KILLFOCUS) {
//потерял фокус
flag = 0;
}
}
//события кнопки
if (lParam == (int)hb[1]) {
if ((HIWORD(wParam) == BN_CLICKED)) {
DestroyWindow(hWnd);//закрыть приложение
}
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
};
Скачать