CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

我这个LoadCursor为何不听话

楼主diablon(波罗)2002-03-13 15:33:32 在 VC/MFC / 基础类 提问

我用LoadCursor和SetCursor,设置在客户区矩形四个部分分为四种光标,  
  可是奇怪的是,它并不听话。  
  我是在MouseMove中调用的,根本鼠标处于不同位置点装载不同的光标形状。  
  左右倒是很正常,可上下光标就不听话,从上到下时光标保持不变,还是向  
  上的箭头,或从下到上时,保持向下的箭头。  
  我在判断语句里增加了一条MessageBox,来测试是否计算错误,可发现没有错误,  
  确实在相应的区域里执行了相应的LoadCursor语句,可就是不能正常地用LoadCursor,究竟是什么原因呢? 问题点数:40、回复次数:10Top

1 楼kaden()回复于 2002-03-13 17:21:53 得分 5

相应WM_SETCURSOR消息,在这里面设置光标.  
  否则请你在PreCreateWindow中修改Window的Class,将窗口的光标设为NULLTop

2 楼chen_jun_fen(穷的只能抽白粉)回复于 2002-03-13 17:44:42 得分 5

在OnSetCursor()中写上对应的代码,Top

3 楼diablon(波罗)回复于 2002-03-13 20:54:52 得分 0

是在OnSetCursor里写代码,可是那些参数是怎么设置的呢,  
  比如想在(200,200)至(400,400)之间采用我指定的光标,我该  
  怎么做呢?Top

4 楼diablon(波罗)回复于 2002-03-13 20:56:02 得分 0

是在OnSetCursor里写代码,可是那些参数是怎么设置的呢,  
  比如想在(200,200)至(400,400)之间采用我指定的光标,我该  
  怎么做呢?Top

5 楼gstan(潇逍岚风)回复于 2002-03-13 22:00:10 得分 5

老兄,LoadCursor和SetCursor确实不灵,我也曾经遇到过这样的问题.  
   
  你必须用全局函数.即       ::LoadCursor(),::SetCursor(),参数与LoadCursor和SetCursor有点区别,自己查一查msdn吧!  
   
  至于你说在不同的位置显示不同的光标,我没有做过,不过我印象中记得好象OnSetCursor好象有一个参数表示位置,但愿是这样,记不清了......  
   
  如果不是这样,你只有通过GetClientRect获得控件或者视图的大小,然后再想办法得到鼠标的位置判断......比较烦琐.  
   
  写了这么多,但愿对你有帮助.  
   
   
  Top

6 楼diablon(波罗)回复于 2002-03-14 10:34:52 得分 0

void   CMonitorDialog::OnMouseMove(UINT   nFlags,   CPoint   point)    
  {  
  HCURSOR   newIcon;  
  CRect   rect;  
  GetClientRect(&rect);  
  int   x,y;  
  x=point.x;  
  y=point.y;  
                    if(y<200)  
                          {  
                              newIcon=::LoadCursor(AfxGetInstanceHandle(),  
                                                  MAKEINTRESOURCE(IDC_MOVEUP));  
  ::SetCursor(newIcon);  
          }  
                          if(y>=200)  
                          {  
                              newIcon=::LoadCursor(AfxGetInstanceHandle(),  
                                                  MAKEINTRESOURCE(IDC_MOVEDOWN));  
  ::SetCursor(newIcon);  
          }  
   
  CDialog::OnMouseMove(nFlags,   point);  
  }  
   
  我就简化成这样做,结果也不行,经常是进去的时候全屏都是上箭头,而下  
  一次进去时全屏都是下箭头,真搞不懂啊  
  Top

7 楼diablon(波罗)回复于 2002-03-14 11:43:09 得分 0

void   CMonitorDialog::OnMouseMove(UINT   nFlags,   CPoint   point)    
  {    
  HCURSOR   newIcon;    
  CRect   rect;    
  GetClientRect(&rect);    
  int   x,y;    
  x=point.x;    
  y=point.y;    
  if(y<200)    
  {    
  newIcon=::LoadCursor(AfxGetInstanceHandle(),    
  MAKEINTRESOURCE(IDC_MOVEUP));    
  ::SetCursor(newIcon);    
  }    
  if(y>=200)    
  {    
  newIcon=::LoadCursor(AfxGetInstanceHandle(),    
  MAKEINTRESOURCE(IDC_MOVEDOWN));    
  ::SetCursor(newIcon);    
  }    
   
  CDialog::OnMouseMove(nFlags,   point);    
  }    
   
  我就简化成这样做,结果也不行,经常是进去的时候全屏都是上箭头,而下    
  一次进去时全屏都是下箭头,真搞不懂啊    
  Top

8 楼kaden()回复于 2002-03-14 12:51:38 得分 5

当然会出现这种情况,  
  应为MouseMove消息也是断断续续发出的,  
  很有可能由于你鼠标移动的快,让你>200的条件形同虚设,根本进不来,  
  最好是在OnSetCursor中动态判断鼠标位置Top

9 楼diablon(波罗)回复于 2002-03-15 17:15:23 得分 0

原来如此,你说的有道理,那请问OnSetCursor的几个参数是怎么设置的呢?  
  我看过但没懂Top

10 楼dongang(donggang)回复于 2002-03-15 17:47:06 得分 20

BOOL   CCursorTestView::OnSetCursor(CWnd*   pWnd,   UINT   nHitTest,   UINT   message)    
  {  
  //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
  POINT   point;  
  GetCursorPos(&point);  
   
  CRect   rect;  
  GetClientRect(rect);  
   
  ScreenToClient(&point);  
   
  if   (point.y   <   rect.Height()/2)  
  {  
  if   (point.x   <   rect.Width()/2)  
  {  
  ::SetCursor(AfxGetApp()->LoadCursor(IDC_UPLEFT));  
  }  
  else  
  {  
  ::SetCursor(AfxGetApp()->LoadCursor(IDC_UPRIGHT));  
  }  
  }  
  else  
  {  
  if   (point.x   <   rect.Width()/2)  
  {  
  ::SetCursor(AfxGetApp()->LoadCursor(IDC_DOWNLEFT));  
  }  
  else  
  {  
  ::SetCursor(AfxGetApp()->LoadCursor(IDC_DOWNRIGHT));  
  }  
  }  
   
  return   CView::OnSetCursor(pWnd,   nHitTest,   message);  
  }  
   
  void   CCursorTestView::OnMouseMove(UINT   nFlags,   CPoint   point)    
  {  
  //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
  this->OnSetCursor(this,   HTCLIENT,   WM_SETCURSOR);  
  CView::OnMouseMove(nFlags,   point);  
  }  
  Top

相关问题

  • 程序不听话!
  • 猫儿猫儿不听话
  • 为什么datetimepicke不听话?
  • 我的游标不听话!!!!
  • 我的鼠标不听话怎办?
  • 想控制,好难!--不听话的输入法!
  • 我的cursor不听话,大家帮我教教它。
  • 各位大虾,快救救我吧!我的WIN2000不听话了!
  • 我家弟弟runmin老是不听话怎么办
  • 突然鼠标不听话,乱动是什么病毒?

关键词

  • idc
  • 鼠标
  • 代码
  • loadcursor
  • onsetcursor
  • newicon
  • setcursor
  • 光标
  • 不听话
  • 箭头

得分解答快速导航

  • 帖主:diablon
  • kaden
  • chen_jun_fen
  • gstan
  • kaden
  • dongang

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo