
很郁闷的可视化第一次作业。。。
总共两道题,第一道是响应键盘按键的,第二道是创意小球。原以为第一道是开胃菜,随便写写就交了;第二道才是主菜,颇费了点心思。不料,重头的确 实第一道题。。可能老师低估了同学们的创造性吧,严格按照死板教条规定的题目占的分数多,而创意的题目占的分数少。。唉,郁闷的说。
响应键盘信息,有几个按键比较郁闷:
1,ALT和F10:
这两个是系统键,不能用WM_KEYDOWN和WM_KEYUP来响应。要用WM_SYSKEYDOWN和WM_SYSKEYUP。为什么是系统键?因为这两个都能激活菜单!
2,print screen键:
这个比较生猛。用WM_***消息是搞不定的。
于是用了传说中的钩子,如下实现:
//声明全局变量
HHOOK m_hook;
//然后定义回调函数:
LRESULT CALLBACK keyFunc(int nCode, WPARAM wParam, LPARAM lParam)
{
LRESULT lResult = CallNextHookEx(m_hook, nCode, wParam, lParam);
if (nCode == HC_ACTION)
{
if (wParam == VK_SNAPSHOT)
{
SetDlgItemText(ghText, MAKEINTRESOURCE(IDC_STATIC), "我是Print Screen!");
}
return lResult;
}
//在WM_CREATE里面注册钩子
m_hook = SetWindowsHookEx(WH_KEYBOARD, keyFunc, GetModuleHandle(NULL),GetCurrentThreadId());
//在退出的时候销毁钩子
UnhookWindowsHookEx(m_hook);