java错误光标的闪烁怎么设置_如何在改变鼠标光标时不闪烁

微软知识库有一篇文章Q131991描述了三种方法来改变基于MFC应用的鼠标光标。其中一种方法是重载CWnd::PreCreateWindow()函数注册自己的要改变鼠标指针的窗口类。这个方法对于要始终使用一个鼠标光标的应用程序很适合。

如果在应用程序中要动态改变鼠标光标,微软知识库的这篇文章建议重载CWnd::OnSetCursor()来实现。但是这种方法有一个缺点,就是当设置鼠标光标及还原时都会出现令人讨厌的光标闪烁。

如果应用程序中要使用几个不同的鼠标光标,为了不发生任何光标闪烁,本文介绍一种方法:首先按照微软知识库文章所说重载PreCreateWindow函数,但是不要指定要使用的鼠标光标,而是使用NULL。这样就防止了Windows或MFC针对鼠标指针做任何操作。

BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)

{

// 创建自己的窗口类,窗口不设置光标,以便根据需要进行设置

if (cs.lpszClass == NULL)

cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS);

return CScrollView::PreCreateWindow(cs);

}

因为窗口类没有任何事先指定好的的鼠标指针,所以以上代码有效地派出了光标的闪烁。(注意这段代码创建的窗口类也没有背景刷,所以窗口的背景色需要自己画。为此要向函数AfxRegisterWndClass()传递第三个参数作为背景刷。)

光标的闪烁是消除了,但同时光标也没了!不用担心。在处理鼠标事件OnMouseMove时设置光标是很容易的事情。实践证明,如果要在应用窗口中改变鼠标指针,在OnMouseMove事件处理模块中设置光标是最方

便的。

void CMyView::OnMouseMove(UINT nFlags, CPoint point)

{

// 设置光标表示当前的操作

if (m_nOperation == OPERATION_1)

::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));

else if (m_nOperation == OPERATION_2)

::SetCursor(AfxGetApp()->LoadStandardCursor( ??? ));

else // 普通光标指针

::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));

}

尽管要做一点额外的工作,但它实现了应用中不同的鼠标指针变化,同时消除了闪烁。

from: http://www.vckbase.com/vckbase/vckbase9/vc/nonctrls/system_30/0930003.htm

posted on 2006-09-29 11:18 weidagang2046 阅读(2464) 评论(0)  编辑  收藏 所属分类: Windows

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值