问题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'.为什么?

解决方案 »

  1.   

    1.不处理可以直接return 1;
    2.不清楚诶,代码要多帖点
      

  2.   

    return 1;不行啊。
    消息钩子一样接受到这个消息啊。
      

  3.   

    1、可以在钩子中设置一个标志变量,跳过第1次VK_ESCAPE;或者WndProc中判断WM_KEYUP消息来加载钩子。
    2、ShowWindow、DestroyWindow引起了窗口刷新,把你显示的字刷掉了。
      

  4.   

    第二个问题 有没有什么的解决办法。不让它刷新。
    (是不是失去焦点或者其它什么引起的刷新??!
    因为,在用createwindow创建时,也会引起刷新,但加上一句set_focus(game::object);
    就不会刷新窗口.)第一个问题 有没有更好的解决方法。
      

  5.   

    ShowWindow、DestroyWindow引起了窗口刷新,但TextOut(hdc,10,300,"f",1)是在它们之后,刷新已经过了,怎么
    还会有影响呢???
      

  6.   

    2、你可以试试调用UpdateWindow,让其立即刷新,然后再TextOut。
    1、响应WM_KEYUP消息来加载钩子不好吗?
      

  7.   

    窗口刷新是向消息队列中Post消息,不是立即执行,当窗口响应刷新的有关消息时,TextOut已经执行完了。
      

  8.   

    第二个问题 调用UpdateWindow解决刷新的问题
    第一个问题 我的WM_KEYUP有别的用,
               或在消息钩子设一变量记录该消息次数,
               这样感觉也不太好吧。