Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Обработка нажатая клавиш

Rusa




Одно из широко используемых в Windows сообщений порождается  414v218e 087;ри нажатии клавиши. Это сообщение называется WM_CHAR WM_CHAR

сообщений WM_CHAR wParam содержит ASCII-код нажатой клавиши. LOWORD(lParam)

HIWORD(lParam)

Битовая карта lParam

Устанавливается в 1, если дополнительно нажата клавиша [Alt]

в 1, если нажата клавиша функциональной или допол­нительной части клавиатуры

Код клавиши (scan-код)

В данном случае для нас важно только значение wParam, поскольку оно содержит собственно вводимый символ. Однако заметьте, насколько подробную информацию о состоянии системы предоставляет Windows. Естественно, Вы можете использо­вать ту часть этой информации, которая Вас интересует.



WM_CHAR switch

char str[80] = ""; // Буфер для строки вывода

LRESULT CALLBACK WindowFunc (HWND hwnd,

UINT message,

WPARAM wParam,

LPARAM lParam)

return 0;

}

Вас может удивить тот факт, что для такой простой задачи, как отображение введенного символа, требуется  414v218e 090;ак много операторов. Объясняется  414v218e 101;то тем, что для вывода на экран Windows должен установить связь между Вашей программой и экраном. Такая связь устанавливается  414v218e 087;утем создания и получения в программе контекста устройства (Device Context, DC),что происходит при вызове функции GetDC(). В данный момент не важно, что представляет собой контекст устройства, - это будет рассматриваться  414v218e 074; следующем разделе. Однако программа может вывести что-либо на экран только получив контекст устройства, а по окончании процесса вывода программа должна этот контекст освободить, вызвав ReleaseDC(). Одновре­менно в Windows может существовать конечное множество контекстов устройств, так что если программа не освобождает DC, у Windows вскоре не останется  414v218e 089;вободных ресурсов для предоставления DC и очередной вызов GetDC() NULL

Функции API GetDC() ReleaseDC()

HDC GetDCfHWND hwnd);

int ReleaseDC(HWND hwnd, HDC hdc);

GetDC() возвращает контекст устройства, ассоциированный с окном, дескриптор которого задается  414v218e 087;араметром hwnd HDC

ReleaseDC() hwnd задает дескриптор окна, ассоциированного с освобождаемым DC, a hdc - дескриптор освобожденного DC.

Функция API, выводящая символы на экран, называется TextOut()



BOOL TextOut(HDC hdc, int x, int

LPSTR lpstr, int nlength);

TextOut() lpstr, начиная с точки, координаты которой задаются  414v218e 087;араметрами (по умолчанию эти координаты задаются в пикселах). Длина выводимой строки задается  414v218e 087;араметром nlength TextOut()

WM_CHAR символ, введенный пользователем, преобразуется  414v218e 074; строку длиной в один символ при помощи функции sprintf() TextOut()

str

Левый верхний угол рабочей области окна имеет координаты [0,0]. Коор­динаты окна всегда задаются  414v218e 086;тносительно начала рабочей области, а не экрана, поэтому вводимые символы всегда будут отображаться  414v218e 074; верхнем левом углу рабочей области окна независимо от его положения на экране.

TextOut() заключается  414v218e 074; необходимости стереть ранее выведенный символ. Поскольку Windows использует графический режим дисплея и символы шрифта могут иметь различный размер, вывод очередного символа на экран не обязательно приведет к полному стиранию предыдущего символа. Например, если Вы выведете символ i w w TextOut()

Следует отметить, что никакие функции Windows API не позволяют вывод за границами окна. При попытке пересечь границы окна выводимое изображение будет автоматически усекаться.

TextOut() для вывода единственного символа не является  414v218e 101;ффективным использованием этой функции. Однако в Windows отсутствует функция вывода одного символа. Впоследствии Вы увидите, что для большинства операций взаимодействия с пользователем используются  414v218e 076;иалоги, меню, инструментальные панели и т.п. Поэтому Windows предусматривает всего несколько функций для вывода текста в рабочую область окна.



WM_CHAR

#include <Windows.h>

#include <String.h>

#include <Stdio.h>

LRESULT CALLBACK WindowFunc(HWND, UINT,

WPARAM, LPARAM) ;

char szWinName[]=" "; //

char str[80]=""; // Буфер для строки вывода

int WINAPI WinMain(HINSTANCE hThisInst,

HINSTANCE hPrevInst,

LPSTR lpszArgs,

int nWinMode)

return msg.wParam;

}

// Следующая функция вызывается  414v218e 086;перационной

// системой Windows и получает в качестве

LRESULT CALLBACK WindowFunc(HWND hwnd,

UINT message,

WPARAM wParam,

LPARAM lParam)

return 0;

}

Приведенная программа перед выводом строки на экран получает контекст устройства. Контекст устройства освобождается  414v218e 087;осле того, как вывод на экран закончен. Сейчас самое время объяснить, что представляет собой контекст устройства.

TextOut() и другие функции вывода требуют в качестве параметра дескриптор контекста устройства, это правило выпол­няется  414v218e 072;втоматически.




Document Info


Accesari: 1438
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )