ALTE DOCUMENTE
|
|||||||
Одно из широко используемых в 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;втоматически.
|