鼠标经过客户区会发出WM_PAINT消息吗?在WM_PAINT的处理过程中插入Beep函数,当鼠标在客户区内移动时仍可听到声音。

解决方案 »

  1.   

    不会响,你们怎么听到的?你的鼠标移动是不是也加Beep了
      

  2.   

    不会,除非你有activewindow的动作,如果只是鼠标划过是不会重绘的。
      

  3.   

    对于鼠标覆盖的客户区部分,Windows不会发出WM_PAINT消息,而是记住被覆盖的部分,然后自己重绘,因为鼠标覆盖的范围本来就很小,并且它也会不停的在客户区移动,如果每移动一下都给客户区发WM_PAINT消息,想象程序的性能会将到什么样。
      

  4.   

    WM_PAINT的响应函数是CWnd::OnPaint ,看看MSDN对这个函数的解释当Windows或应用程序请求重画应用程序窗口的一部分时,框架调用这个成员函数。WM_PAINT在调用UpdateWindow或RedrawWindow成员函数时发出。当设置了RDW_INTERNALPAINT标志并调用RedrawWindow成员函数时,窗口可能会接收到内部重画消息。 在这种情况下,窗口可能没有更新区域。应用程序必须调用GetUpdateRect成员函数以确定窗口是否具有更新区域。如果GetUpdateRect返回0,则应用程序不应调用BeginPaint和EndPaint成员函数。 应用程序负责检查是否需要内部重画或更新,这可通过查看每条WM_PAINT消息的内部数据结构来完成,因为一条WM_PAINT可能是由于一个无效区域或由于使用RDW_INTERNALPAINT标志调用了RedrawWindow成员函数而引起的。 Windows只发送一次内部WM_PAINT消息。在通过UpdateWindow成员函数向窗口发送了内部WM_PAINT消息以后,将不会再向窗口发送其它WM_PAINT消息,直到再次使用RDW_INTERNALPAINT标志调用了RedrawWindow成员函数。