热情软件屋

 

如何更改程序的默认光标


编号:QA002149
建立日期: 1999年12月2日 最后修改日期:1999年12月2日
所属类别:

pdiy:
    编程环境 WIN9X
    编程工具 VC6
    如何更改程序的默认光标,请问是否有和VB一样的属性?

回答:

    有三个方法:
    1、在CWnd::OnSetCursor()中调用API函数SetCursor()改变光标。
     BOOL CMyView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
     {
     if ( m_ChangeCursor )
     {
     ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
     return TRUE;
     }
    
     return CView::OnSetCursor(pWnd, nHitTest, message);
     }
    2、CWnd::PreCreateWindow()注册自己的窗口类,注册时指定光标。
     BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
     {
     cs.lpszClass = AfxRegisterWndClass(
     CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW, // use any window styles
     AfxGetApp()->LoadStandardCursor(IDC_WAIT),
     (HBRUSH) (COLOR_WINDOW + 1)); // background brush
    
     return CView::PreCreateWindow(cs)
     }
    3、某些操作,程序要显示标准的漏斗光标,这时调用CCmdTarget::BeginWaitCursor(),然后调用CmdTarget::EndWaitCursor()恢复光标。
     void CMyView::PerformLengthyOperation()
     {
     BeginWaitCursor(); // or AfxGetApp()->DoWaitCursor(1)
    
     //...
    
     EndWaitCursor(); // or AfxGetApp()->DoWaitCursor(-1)
     }
    
    为了避免用户移动鼠标而触发OnSetCursor,需要::
     BOOL CMyView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
     {
     if (m_ChangeCursor)
     {
     RestoreWaitCursor();
     return TRUE;
     }
    
     return CView::OnSetCursor(pWnd, nHitTest, message);
     }
    在这个例子中,在调用BeginWaitCursor()前设置 m_ChangeCursor为TRUE。然后在EndWaitCursor()后设置为FALSE。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio