Вверх
Перехват событий клавиатуры
Считывание событий клавиатуры, подобно отслеживанию событий мыши.
Как и для мыши, для клавиатуры имеются сообщения событий, сигнализирующие
о том, что клавиша нажата или что она отпущена.
События клавиатуры перечислены в нижеследующей таблице :
WM_KEYDOWN | Клавиша нажата |
WM_KEYUP | Клавиша отпущена |
WM_SYSKEYDOWN | Нажата F10 или Alt в сочетании с другой клавишей |
WM_SYSKEYUP | Отпущена F10 или Alt в сочетании с другой клавишей |
void CMouseDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
char cChar;
HCURSOR hCursor = 0;
HCURSOR hPrevCursor = 0;
cChar = char(nChar);
if(cChar == 'A')
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
hPrevCursor = SetCursor(hCursor);
}
if(cChar == 'B')
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_IBEAM);
hPrevCursor = SetCursor(hCursor);
}
if(cChar == 'C')
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_WAIT);
hPrevCursor = SetCursor(hCursor);
}
if(hPrevCursor)
{
DestroyCursor(hPrevCursor);
}
if(cChar == 'X')
{
hCursor = AfxGetApp()->LoadStandardCursor(IDC_WAIT);
hPrevCursor = SetCursor(hCursor);
if(hPrevCursor)
DestroyCursor(hPrevCursor);
OnOK();
}
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CMouseDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
UINT nChar
,-указывает какая клавиша была нажата.В нем содержится код символа, который следует преобразовать в соответствующий символ в первой
строке программного кода. Преобразовав код символа в соответствующий символ,
можно непосредственно определить какая клавиша была нажата
UINT nRepCnt
, -указывает сколько раз была нажата клавиша.Обычно если
клавиша была нажата а затем отпущена,то его значение равно 1.
UINT nFlags
-комбинированный флаг. Он позволяет определить была ли
одновременно с клавишей нажата клавиша Alt или была ли нажата одна
из дополнительных клавиш. С помощью данного аргумента нельзя определить
была ли нажата клавиша Shift или Ctrl.
Как только вы определили что нажата одна из указанных вами клавиш, следует соответвтсующим образом изменить указатель мыши
if(cChar == 'A')
hPrevCursor = SetCursor(hCursor);
Процесс изменения формы указателя состоит из двух шагов.Сначала
указатель мыши следует загрузить в память. Для этого вызывается функция
LoadStandardCursor(), которая загружает в память один из стандартных
указателей мыши (указан в параметре) и Windows возвращает дескриптор
этого указателя.
После того как указатель мыши загружен в память,
его дескрипторр передается функции SetCursor(),
которая соответствующим образом меняет текущую форму указателя мыши.
Возвращаемым значением функции SetCursor() является дескриптор предыдущего указателя мыши.
Вызвав функцию DesytroyCursor(), предыдущий указатель мыши можно удалить.
Скомпилируйте и запустите программу.Форма курсора мыши будет меняться
по нажатию клавиши клавиатуры.
{
Вверх
Из предыдущего листинга вы видите что вместе с функцией LoadStandardCursor()
вызывается фукцния AfxGetApp()
Поскольку данная функция для вызова функции LoadStandardCursor()
использует указатель, можно предположить что она возвращает указатель
на некоторый класс.
Функция AfxGetApp() представляет собой глобальную
функцию, которая возвращает экземпляр класса текущего приложения.
Класс приложения является производным от класса CWinApp текущего
приложения.Для данного приложения это класс CMouseApp.Когда необходимо
воспользоваться средствами, имеющимися в классе CWinApp, или в
производном от него классе, можно воспользоваться функцией AfxGetApp()
и получить на него указатель.
AfxGetApp. - Эта функция возвращает указатель на объект приложения класса
CWinApp .Используйте эту функцию для успешного доступа к любой функциональной
возможности класса CWinApp
АВ:В этой программе использована функции класса CWinApp
Назад |
Вверх |
Вперед
Библиотека MFC Функция AfxGetApp()
hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
HCURSOR LoadStandardCursor(LPCTSTR lpszCursorName) const; // for IDC_ values
Содержание