问题1
/////////////////////////////
主消息处理函数有部分代码:
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
省略...
case VK_ESCAPE:
hook=SetWindowsHookEx(WH_KEYBOARD,peopleshow,NULL,GetCurrentThreadId());
break;
省略...
}消息钩子函数:
LRESULT CALLBACK peopleshow(int nCode,WPARAM wParam,LPARAM lParam)
{
if (wParam==VK_RETURN&&(lParam>>30)&1)
{
//
}
else if(wParam==VK_ESCAPE&&(lParam>>30)&1)
{
//
}
return CallNextHookEx(hook,nCode,wParam,lParam);
}
/////////////////////////////////////////////////////
当你按下'Esc'键,消息处理函数接受该消息并建立消息钩子.
然后建立的消息钩子也接受到 按下'Esc'键的消息 .我不想让消息钩子接受到这个消息.或者消息钩子能识别该消息是否(经消息处理函数的处理过).
怎么办?问题二
消息钩子有如下代码:
LRESULT CALLBACK peopleshow(int nCode,WPARAM wParam,LPARAM lParam)
{ if (wParam==VK_RETURN&&(lParam>>30)&1)
{
ShowWindow(game::object,SW_HIDE);//隐藏一个己建立的listbox
DestroyWindow(game::object);//销毁listbox
SetTextColor(hdc,RGB(0,255,0));
TextOut(hdc,10,300,"f",1);
}
}
///////////////////////////////////////
第一次按下'Enter',它并不显示"f",第二次按下时才显示.
但把ShowWindow(game::object,SW_HIDE)和DestroyWindow(game::object)这两行删除
则第一次按下'Enter',显示了'f'.为什么?
/////////////////////////////
主消息处理函数有部分代码:
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
省略...
case VK_ESCAPE:
hook=SetWindowsHookEx(WH_KEYBOARD,peopleshow,NULL,GetCurrentThreadId());
break;
省略...
}消息钩子函数:
LRESULT CALLBACK peopleshow(int nCode,WPARAM wParam,LPARAM lParam)
{
if (wParam==VK_RETURN&&(lParam>>30)&1)
{
//
}
else if(wParam==VK_ESCAPE&&(lParam>>30)&1)
{
//
}
return CallNextHookEx(hook,nCode,wParam,lParam);
}
/////////////////////////////////////////////////////
当你按下'Esc'键,消息处理函数接受该消息并建立消息钩子.
然后建立的消息钩子也接受到 按下'Esc'键的消息 .我不想让消息钩子接受到这个消息.或者消息钩子能识别该消息是否(经消息处理函数的处理过).
怎么办?问题二
消息钩子有如下代码:
LRESULT CALLBACK peopleshow(int nCode,WPARAM wParam,LPARAM lParam)
{ if (wParam==VK_RETURN&&(lParam>>30)&1)
{
ShowWindow(game::object,SW_HIDE);//隐藏一个己建立的listbox
DestroyWindow(game::object);//销毁listbox
SetTextColor(hdc,RGB(0,255,0));
TextOut(hdc,10,300,"f",1);
}
}
///////////////////////////////////////
第一次按下'Enter',它并不显示"f",第二次按下时才显示.
但把ShowWindow(game::object,SW_HIDE)和DestroyWindow(game::object)这两行删除
则第一次按下'Enter',显示了'f'.为什么?
2.不清楚诶,代码要多帖点
消息钩子一样接受到这个消息啊。
2、ShowWindow、DestroyWindow引起了窗口刷新,把你显示的字刷掉了。
(是不是失去焦点或者其它什么引起的刷新??!
因为,在用createwindow创建时,也会引起刷新,但加上一句set_focus(game::object);
就不会刷新窗口.)第一个问题 有没有更好的解决方法。
还会有影响呢???
1、响应WM_KEYUP消息来加载钩子不好吗?
第一个问题 我的WM_KEYUP有别的用,
或在消息钩子设一变量记录该消息次数,
这样感觉也不太好吧。