我是在重载的CMyStatic类中使用的LButtonDown(),LButtonUp(),MouseMove()这几个函数,测试发现鼠标单击时没有响应??在视图里面这几个函数是可以响应的,所以我怀疑是不是这里出了问题呢?谢谢void CMyStatic::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
m_mousedownx=point.x;
    m_mousedowny=point.y;
Invalidate();//加上
CStatic::OnLButtonDown(nFlags, point);
}void CMyStatic::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
m_mousemovex=point.x;
    m_mousemovey=point.y;
m_addx=m_mousemovex-m_mousedownx;
m_addy=m_mousemovey-m_mousedowny;
Invalidate();//加上
CStatic::OnMouseMove(nFlags, point);
}OnPaint()里的程序:
dc.StretchBlt(0  ,0 ,rect.Width()-m_addx,rect.Height()-m_addy,&MemDC,0,0,rect.Width(),rect.Height() ,SRCCOPY);

解决方案 »

  1.   

    在MyStatic.cpp和MyStatic.h里按下ctrl+H
    把所有的CStatic替换成CWnd
    这应该是比较简单的-_-||
    我常这么干:P
      

  2.   

    ...ON_WM_LBUTTONDOWN()
    ON_WM_MOUSEMOVE()
    有么?
      

  3.   


    BEGIN_MESSAGE_MAP(CMyStatic, CWnd)
    //{{AFX_MSG_MAP(CMyStatic)
    ON_WM_PAINT()
    ON_WM_ERASEBKGND()
    ON_WM_LBUTTONDOWN()
    ON_WM_MOUSEMOVE()
    ON_WM_LBUTTONUP()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
      

  4.   

    打断点也进不来吗?
    那有可能是鼠标消息被其他窗口截获了,传不到这里...
    或者是被主窗口PreTranslateMessage截获...
    程序中还有其它窗口吗?
      

  5.   

    可能就是你说的这种情况。我把我做的情况说一下吧,我是建的一个单文档窗口,然后重载了CStatic类-->CMyStatic,然后在视图上面并排放了8个基于这个类的控件,然后在这些控件上面绘图,现在我想在某一个控件上面当鼠标拖动的时候绘制的图像能够随着放大或缩小。
    在视图中我还用到了一个鼠标双击的命令,当鼠标双击击某一个控件时使得该控件能够放大,放大之后能够查看图像
      

  6.   

    我又尝试了一下,如果把鼠标双击也挪到CMyStatic类里就不能响应了,看来真的是鼠标消息被其他窗口截获了
      

  7.   


    光看这段代码就知道即使楼主的程序能画出图像,只要鼠标在移动,CPU占用率肯定100%
      

  8.   

    可以考虑在OnMouseMove里直接用CClientDC画,不过要和先前画的做异或,才能把原来画的擦掉,这样就不用Invalidate了
      

  9.   

    不要从CStatic控件继承,这个控件不会响应任何鼠标与键盘消息,当你的鼠标在控件移动时,控件会捕获WM_NCHITTEST,然后控件处理这个消息,并以HTTRANSPORT值返回,Windows处理这个返回值时,会把它提交给控件下层的窗体,例如对话框来处理这个消息,父窗体默认处理WM_NCHITTEST的结果生成了父窗体的WM_MOUSEMOVE消息.
      

  10.   

    那怎么办?确实是不响应鼠标的mousemove,buttondown,buttonup.我把画图留在了CMyStatic类里,把buttondown放到了视图里面,但是这么做,图形很容易出了控件的边界,我很苦恼啊!
      

  11.   

    你定义一个自我绘制的按钮,利用DRAWITEMSTRUCT结构的rcItem来得到按钮的更新区域,成员hdc是设备句柄,它用于绘制图案,重载按钮的DrawItem函数来对按钮进行绘制。确保按钮风格中含BS_OWNERDRAW.只要不对选择和聚焦状态进行处理,就可以实现预期目的。