Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
L_2.docx
Скачиваний:
2
Добавлен:
16.11.2019
Размер:
208.13 Кб
Скачать
  1. Фокус ввода.

//При создании окна необходимо указать WS_TABSTOP. Клавиша TAB перемещает пользователя в следующее управление, определенное стилем WS_TABSTOP.

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{ hWnd = CreateWindow(szWindowClass, L"111", WS_OVERLAPPEDWINDOW|WS_TABSTOP,

10, 10, 600, 200, NULL, NULL, hInst, NULL);

hWnd2 = CreateWindow(L"20", L"222", WS_OVERLAPPEDWINDOW|WS_TABSTOP,

10, 220, 600, 200, NULL, NULL, hInstance, NULL);

hWnd3 = CreateWindow(L"30", L"333", WS_OVERLAPPEDWINDOW|WS_TABSTOP,

10, 430, 600, 200, NULL, NULL, hInstance, NULL);}

//оконная процедура первого окна

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{ case WM_KEYDOWN:

switch(wParam)

{case VK_TAB: //обработчик клавиши TAB

SetActiveWindow(hWnd3); //делает окно активным

SetFocus(hWnd3); //устанавливает в данное окно фокус ввода

if ((!SetFocus(hWnd3)) & (!SetActiveWindow(hWnd3))) TextOut(hdc, 0, 0, L"Error", 2);

break;

}break;}

//оконная процедура второго окна

RESULT CALLBACK WndProc2(HWND hWnd2, UINT message, WPARAM wParam, LPARAM lParam)

{ case WM_KEYDOWN:

switch(wParam)

{case VK_TAB: //обработчик клавиши TAB

SetActiveWindow(hWnd); //делает окно активным

SetFocus(hWnd); //устанавливает в данное окно фокус ввода

if ((!SetFocus(hWnd)) & (!SetActiveWindow(hWnd))) TextOut(hdc, 0, 0, L"Error", 2);

break;

}break;}

//оконная процедура третьего окна

LRESULT CALLBACK WndProc3(HWND hWnd3, UINT message, WPARAM wParam, LPARAM lParam)

{case VK_TAB: //обработчик клавиши TAB

SetActiveWindow(hWnd2); //делает окно активным

SetFocus(hWnd2); //устанавливает в данное окно фокус ввода

if ((!SetFocus(hWnd2)) & (!SetActiveWindow(hWnd2))) TextOut(hdc, 0, 0, L"Error", 2);

break;

}break;}

  1. Захват и освобождение окном мыши.

LRESULT CALLBACK WndProc3(HWND hWnd3, UINT message, WPARAM wParam, LPARAM lParam)

{ case WM_KEYDOWN:

switch(wParam)

{case VK_UP: // если нажата стрелка вверх, то

SetCapture(hWnd3); // после вызова этой функции все сообщения мыши посылаются в оконную процедуру окна №3.

InvalidateRect(hWnd3, NULL, TRUE); //заставляет Windows поместить сообщение WM_PAINT в очередь сообщений оконной процедуры №3.

UpdateWindow(hWnd3); // для перерисовки окна сразу после его изменения.

TextOut(hdc, 0, 20, L"Область окна захвачена.", 23);

break;

case VK_DOWN: // обрабатывает сообщение нажатия стрелки вниз.

ReleaseCapture();// возвращает обработку мыши в нормальный режим.

InvalidateRect(hWnd3, NULL, TRUE);

UpdateWindow(hWnd3);

TextOut(hdc, 0, 20, L"Область окна освобождена.", 25);

break;

break;}

  1. Обработка сообщений от мыши.

// В данной работе иллюстрация работы мыши производится в окне №3.

LRESULT CALLBACK WndProc3(HWND hWnd3, UINT message, WPARAM wParam, LPARAM lParam)

{case WM_LBUTTONDOWN: // если нажата левая кнопка мыши то окно изменяет свое положение.

b=SetWindowPos(hWnd, NULL, 100, 30, 600, 200, NULL);

b2=SetWindowPos(hWnd2, NULL, 250, 250, 600, 200, NULL);

b3=SetWindowPos(hWnd3, NULL, 350, 460, 600, 200, NULL);

break;}

  1. Координаты x, y.

// В данной работе иллюстрация работы мыши производится в окне №3.

LRESULT CALLBACK WndProc3(HWND hWnd3, UINT message, WPARAM wParam, LPARAM lParam)

{case WM_MOUSEMOVE: //генерация сообщения на движение мыши

TextOut(hdc, 0, 0, L"Координаты мыши: ", 17);

x=LOWORD(lParam);

y=HIWORD(lParam);

coord=wsprintf(buf,L"%d, %d", x, y);

TextOut(hdc, 130, 0, buf, coord);

break;}

  1. Курсор мыши. Управление курсором.

// В данной работе иллюстрация работы мыши производится в окне №3.

LRESULT CALLBACK WndProc3(HWND hWnd3, UINT message, WPARAM wParam, LPARAM lParam)

{case WM_KEYDOWN:

switch(wParam)

{case VK_LEFT: //если нажата стрелка влево, то курсор виден.

ShowCursor(TRUE);

break;

case VK_RIGHT: //если нажата стрелка вправо, то курсор исчезает.

ShowCursor(FALSE);

break;}

break;}

  1. Сообщения мыши в клиентской и не клиентской области окна.

// В данной функции обрабатывается сообщение WM_NCMOUSEMOVE,,которое говорит о том что мышь в не клиентской области.

LRESULT CALLBACK WndProc3(HWND hWnd3, UINT message, WPARAM wParam, LPARAM lParam)

{case WM_NCMOUSEMOVE:

TextOut(hdc, 0, 60, L"Мышь в неклиентской области", 27);

break;}

  1. Установка и снятие таймера.

//В данной функции устанавливается таймер для 1-го окна. По истечении 3 секундпоявится окно "111".

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{SetTimer(hWnd, sec1, 3000, NULL);}

//В данной оконной процедуре находится обработчик для таймера. В этой же процедуре «убивается» таймер.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{ case WM_TIMER: //генерирует сообщения от таймера.

ShowWindow(hWnd, a);

UpdateWindow(hWnd);

KillTimer(hWnd,sec1); //останавливает поток сообщений WM_TIMER даже во время обработки сообщений.

break;}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]