我在一个dialog里面放了一张位图,
该位图控件我是继承CStatic而来的,class BmpIcon : public CStatic
我想让鼠标移到该位图上时改变形状,不知该怎么办.我觉得该位图控件也是一个窗口,都是由cwnd继承来的,
所以我试着在precreatewindow()里面加上下面这条语句,
cs.lpszClass=AfxRegisterWndClass(CS_DBLCLKS,::LoadCursor(NULL, DC_CROSS));
结果没有什么效果.

解决方案 »

  1.   

    响应消息WM_SETCURSOR消息吧,在里面使用SetCursor
      

  2.   

    HCURSOR SetCursor(
      HCURSOR hCursor   // handle to cursor
    );
     
     看msdn
      

  3.   

    重载类的WM_NCHITTEST,改变鼠标
    在父窗口的WM_MOUSEMOVE和WM_PAINT里向子窗口发送WM_NCHITTEST消息
      

  4.   

    我觉得你的程序有问题
    cs.lpszClass=AfxRegisterWndClass(CS_DBLCLKS,::LoadCursor(NULL, DC_CROSS));是不能改变鼠标形状的
    应该是cs.hCursor= ::LoadCursor(NULL, DC_CROSS) 吧
      

  5.   

    caitou123(自向红尘取烦恼) 的方法应是最方便的。
      

  6.   

    to yaotang(baobao):cs 是CREATESTRUCTW数据类型,没有hCursor项
    typedef struct tagCREATESTRUCTW {
       LPVOID    lpCreateParams;
       HANDLE    hInstance;
       HMENU     hMenu;
       HWND      hwndParent;
       int       cy;
       int       cx;
       int       y;
       int       x;
       LONG      style;
       LPCSTR    lpszName;
       LPCSTR    lpszClass;
       DWORD     dwExStyle;
    } CREATESTRUCTW, *PCREATESTRUCTW, *LPCREATESTRUCTW;to  luopeng(天之翼):
    我在onsetcursor()里面用SetCursor(LoadCursor(NULL, IDC_CROSS));
    也没有效果
      

  7.   

    在WM_SETCURSOR消息中设置鼠标BOOL CAboutDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
    {
        // TODO: Add your message handler code here and/or call default

        POINT point;
        GetCursorPos(&point);  //取得当前鼠标位置
        //假设资源中这个图标的ID是IDC_IMAGE
        CWnd *pCtrl = this->GetDlgItem(IDC_IMAGE);  
        RECT rect;
        pCtrl->GetWindowRect(&rect);  //取得控件矩形坐标    if( point.x >= rect.left && point.x <= rect.right &&
            point.y >= rect.top && point.y <= rect.bottom)
        {
            //m_hCurNoDrop是在构造函数中用LoadCursor装入
            SetCursor(m_hCurNoDrop);  
            return true;
        }
        return CDialog::OnSetCursor(pWnd, nHitTest, message);
    }
      

  8.   

    HCURSOR SetCursor(
      HCURSOR hCursor   // handle to cursor
    );
    只要在你想的地方调用该函数就可以完成你的要求
      

  9.   

    谢谢HowUCan(老牛)的高招,果然是一试就灵.
    不过我还想问一下,改变鼠标是不是一定要在父窗口里完成.
    能不能让控件自己来设置自己的鼠标.
      

  10.   

    其实说直接点就是这个问题,
    SetCursor(LoadCursor(NULL, IDC_CROSS));
    放在父窗口里执行就没有问题,放在我的BmpIcon类(见第一篇)里就没有效果.
      

  11.   

    SetClassLong( m_hWnd, GCL_HCURSOR, ...);   
    设置鼠标。