请教一个光标问题!

zhongxd 2003-04-16 05:37:56
我的程序中在视图中各种操作对应不同的光标,视图有滚动条,当光标移动到箭头的时候,我希望他变成箭头光标,大家告诉我在什么地方添加
::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
语句比较合适,谢谢!
...全文
87 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongxd 2003-04-17
  • 打赏
  • 举报
回复
to zhdleo(叮东)
只有鼠标点下之后才会进入滚动处理函数的,我将鼠标移动到滚动条上的时候光标不会改变的。
我现在用了一个赖皮的方法处理这个问题的,我在视图的OnMouseMove()函数中判断鼠标是否移动出了RECT rc={0,0,m_wScreen-2,m_hScreen-2},(m_wScreen 视图得宽度, m_hScreen视图的高度)一移出这个范围马上换光标。这样做在鼠标移动比较缓慢的时候解决了问题,移动比较快的时候问题还在,所以不行,得找别的方法

难道一定要自己弄一个滚动条,然后才能处理好光标问题么?
zhdleo 2003-04-17
  • 打赏
  • 举报
回复
在你处理滚动的函数的一开始调用你自己定义的函数OnSetCursor

在那个函数里再去响应::SetCursor!
zhongxd 2003-04-17
  • 打赏
  • 举报
回复
哪个地方有大量的光标资源呀?谢谢!
feiniaoliang 2003-04-17
  • 打赏
  • 举报
回复
原来是这样!看来第一感觉往往都不对呀!!!呵呵~~

再帮你想想!!!!!
zhongxd 2003-04-17
  • 打赏
  • 举报
回复
我可能没有讲清楚,我是希望鼠标移动到视图滚动条上的时候鼠标变成箭头。
在视图中,鼠标移动到滚动条上的时候,不会进入视图OnMouseMove()函数的
也不会进入视图的OnSetCursor函数
也不会进入CMainFrame 的OnSetCursor()函数和OnMouseMove()函数
可能是被滚动条强行的把消息截走了,而那个滚动条是系统的滚动条,不是我自己生成的!
zhdleo 2003-04-16
  • 打赏
  • 举报
回复
分开出来,不论有多少种光标都先定义并在初始化中取得。
ex:
//define
HCURSOR m_hButtonCursor; //定义成类的一个成员变量


// load button cursor
m_hButtonCursor = AfxGetApp()->LoadCursor(IDC_MYHAND);
//in Dialog::OnInitDialog()
//向上面这句,你要加几个都可以!
//无非是m_hButtonCursor_1 m_hButtonCursor_2 ..........

然后在响应的函数中判断一个是否在其上,或是在其上的是什么。
比如
BOOL CMyDialog::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT msg)
{
CString sClassName;
::GetClassName(pWnd->GetSafeHwnd(),sClassName.GetBuffer(80),80);
if (sClassName=="Button" && m_hButtonCursor) {
::SetCursor(m_hButtonCursor);
//像这样,判断在按钮控件上都设置。
//你也可以具体的取得每个控件的名字来具体区分
//只要保证if 中的判断成立,而且符合你的要求就行
return TRUE;
}
return CDialog::OnSetCursor(pWnd, nHitTest, msg);
}
-------------------------------------------------------
over
feiniaoliang 2003-04-16
  • 打赏
  • 举报
回复
OnMouseMove()中,第一感觉!!!

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧