找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 453|回复: 1

[转帖]vc++的处理问题的常用方法二

[复制链接]
发表于 2009-10-31 01:04:15 | 显示全部楼层 |阅读模式 IP:江苏扬州
VC知识库 www.vckbase.com 如何在基于对话框的程序中动态设置鼠标指针 本文范例程序 本文旨在示范在对话框的按钮上(或其它控制上)使用单独的鼠标指针。Windows编程中有两种方法改变指针:一种是当应用的主窗口类注册时,为WNDCLASS结构提供一个全程光标指针(HCURSOR),另外一种方法是在程序中处理WM_SETCURSOR消息来设置鼠标光标。标准的MFC应用程序使用第一种方法自动在主窗口注册时将光标指针设置为一个箭头。如果要改变光标指针,则可以通过在主窗口或子窗口中重载消息WM_SETCURSOR的处理函数来重新设置鼠标指针。
// handle WM_SETCURSOR in button class BOOL CMyButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT msg) { ::SetCursor(m_hMyCursor); return TRUE; }
当用户将鼠标指针移到按钮上时,鼠标不被捕获,Windows发送一个WM_SETCURSOR消息到按钮。从上面OnSetCursor的代码中可以看到,它传递一个参数是窗口句柄(pWnd)- 即鼠标指针所指的窗口,这里指的是按钮本身;OnSetCursor传递的第二个参数是nHitTest,这是一个鼠标点击测试代码(Mouse Hit-Test Codes),它以HTXXX开头,用于WM_NCHITTEST消息;OnSetCursor传递的第三个参数是触发事件的鼠标消息的消息ID-例如,WM_MOUSEMOVE。WM_SETCURSOR是专门用来设置鼠标指针的消息,当设置了鼠标指针以后,应该让它返回TRUE以防止Windows再作缺省处理。 WM_SETCURSOR的处理机制是这样的,如果有父窗口的话,缺省的窗口过程首先发送WM_SETCURSOR消息到父窗口,如果父窗口处理WM_SETCURSOR消息(即返回TRUE),则Windows不再作任何多余的事情,处理完消息便结束。如果父窗口不处理WM_SETCURSOR消息(即返回FALSE),Windows让子窗口来处理WM_SETCURSOR,如果子窗口也不做任何处理(返回FALSE),Windows使用全程光标指针,如果没有全程光标指针,则使用箭头指针。
如果你在程序中要是使用动态光标指针,你必须决定是在子窗口处理WM_SETCURSOR消息还是在父窗口中处理WM_SETCURSOR消息。两种方法各有利弊,根据具体情况而定。一般总是让对象决定它们自己的行为属性-也就是说最好在子窗口中做处理。本文中的子窗口即按钮。这就要派生一个新的按钮类,新的按钮类有自己的消息映射及其消息处理过程。可以使用类向导来产生新的按钮类,但那样要做的事情太多。如果你已经有自己的按钮类,那当然是在自己的按钮类中处理WM_SETCURSOR消息。如果没有自己的按钮类而又想偷懒的话,那就在对话框中处理WM_SETCURSOR消息得啦,只是不要向面向对象专家说是我告诉你这么做的。 本文附带一个简单的基于对话框的程序,MyCursor,这个例子程序示范了两种方法来改变光标指针。如果将鼠标移到按钮上(“OK”键和“Cancel”键),光标指针变为蓝色手指,它是通过在对话框中处理OnSetCursor实现的(参见代码),另外,如果将鼠标指针移到带下划线的超链接上,光标指针又变为另外一个Windows中常常使用的手指。它是通过在窗口子类(CStaticLink)中实现的。CStaticLink是一个通用的可重用类,在VC知识库的范例程序中经常用到,其中CStaticLink::OnSetCursor的大多数代码处理是从win32hlp.exe可执行程序中吸取手型指针,它们与本文有关光标设置的内容关系不大,我没有全部列出来,如果你对细节感兴趣,可以从本文的开始处下载范例程序......
最后祝大家编程愉快!
发表于 2009-10-31 01:04:17 | 显示全部楼层 IP:江苏扬州
VC++,我还没学过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 13:24 , Processed in 0.228567 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表