浅谈在应用CRectTracker类的程序中响应WM_LBUTTONUP消息

本文配套源码

CRectTracker类也有人称之为“橡皮筋”类。我们可以通过Windows自带的画图板来了解这个类的作用:用“选定”功能在画图区随意选中一块儿区域,此时会出现一个由虚线和八个调整标记点组成的矩形选框,我们可通过鼠标点中矩形选框的中心移动其位置,并且能利用调整标记 点来改变其大小……这个矩形选框其实就是一个“橡皮筋选框”。

CRectTracker类的使用并不是什么新鲜的话题,然而在应用这个类的过程中,我却发现了一个小问题:我创建了一个对话框程序,希望利用CRectTracker类在对话框上画出一个“橡皮筋选框 ”,为了使鼠标按下并拖动鼠标的同时出现虚线的选择框,我在程序中加入了以下代码:

void CCRectTracker_DemoDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
  // TODO: Add your message handler code here and/or call default
  //当鼠标左键按 下时
  CRectTracker temp;
  temp.TrackRubberBand(this,point,TRUE);
   temp.m_rect.NormalizeRect();

  CDialog::OnLButtonDown(nFlags, point);
}

这段代码确实实现了我所期望的效果。但在程序的另一个地方:

void CCRectTracker_DemoDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
  // TODO: Add your message handler code here and/or call default
  //当鼠标左键松开时
   MessageBox("鼠标左键松开","松开",NULL);

   CDialog::OnLButtonUp(nFlags, point);
}

OnLButtonUp()事件丝毫不理睬我鼠标的动 作——MessageBox()并没有执行。仔细一想:TrackRubberBand()是以鼠标左键的松开作为结 束标志的,当WM_LBUTTONUP消息发出后,TrackRubberBand()在OnLButtonUp()事件响应前就截获了该消 息,所以OnLButtonUp()事件就无法正常响应了……想到这里,脑海中也就浮现了一个解决 这个小问题的办法,那就是:在TrackRubberBand()后,向程序自身发送一个自己构造的WM_LBUTTONUP消 息。于是将OnLButtonDown()中的代码改写成为以下形式:

void CCRectTracker_DemoDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
  // TODO: Add your message handler code here and/or call default
  //当鼠标左键按下时
   CRectTracker temp;
  temp.TrackRubberBand(this,point,TRUE);
   temp.m_rect.NormalizeRect();
  //自己构造的WM_LBUTTONUP消息
  this- >SendMessage(WM_LBUTTONUP,NULL,NULL);
  CDialog::OnLButtonDown(nFlags, point);
}

时间: 2024-08-02 18:30:13

浅谈在应用CRectTracker类的程序中响应WM_LBUTTONUP消息的相关文章

浅谈使用MVC模式进行JavaScript程序开发_javascript技巧

随着前台开发日益受到重视,客户端代码比重日益增加的今天,如何在javascript开发里应用MVC模式,这个问题似乎会一直被提到,所以偶在这里粗略的谈一下自己的看法吧. MVC模式的基本理念,是通过把一个application封装成model, view和controller三个部分达到降低耦合,简化开发的目的.这么说很空洞,大家可以实际看个例子: <select id="selAnimal"> <option value="cat">cat

浅谈四点提高wordpress博客程序的运行效率的方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 不知不觉之中,我的网站已经经过了几年的风风雨雨,但是随着时间的沉淀,网站的运行效率越来越让我压抑,这篇文章,就说一下三点提高wordpress博客程序的运行效率的方法,希望对于每一位想要提高wordpress博客程序的朋友有所帮助而来,且听笔者慢慢说来. 一:保持wordpress主题的代码精简性 关于wordpress主题的代码的精简型的话

浅谈struts和依赖注入在项目中的应用

我喜欢struts,喜欢ibatis,喜欢spring,但我却喜欢.net,这实在是件很矛盾的事情..net很好用,但在做项目的过程,总觉得缺少了点什么,对了,是框架.在java的世界里,有着许多成熟优秀的框架,但.net的框架,可选择的实在很少.在盼星星盼月亮的漫长过程里,终于盼到了Asp.net MVC,恕我不才,看来看去,都觉得这Asp.net MVC用起来实在是麻烦.我还是喜欢使用struts,尽管我很烦恼那些配置文件,但配置文件确实给我们带来了很多的好处.能轻松的扩展,轻易的修改.不过

Core Data浅谈系列之十 : 关于数据模型中实体的属性

之前写了<Core Data浅谈系列汇总>,今天稍微回顾了下,做些补充. 在这个系列的第一篇<基础结构>中(2013年1月份的文章,时间过得好快啊!),有简单带过Entity的Attribute: 数据类型.布尔值统一用NSNumber来表示: 字符串类型用NSString表示: 时间类型用NSDate表示: 二进制数据类型用NSData表示: 非标准类型用Transformable来表示: 而Attribute还有其自身的Properties,比如Transient表示不用持久化

浅谈Windows系统下C语言编程中Glib库的使用_C 语言

在这个C的变成世界里,有许多实用的库,其中最有名的且最通用(跨多个平台的实现包括Windows,要知道很多实用的编程库都不提供Windows的实现)就是GLib这个库,其中就有实现线程的部分. glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性. glib是Gtk +库和Gnome的基础.glib可以在多个平台下使用,比如Linux.Unix.Windows等.glib为许多标准的.常用的C语言结构提供了相应的替代物. 如果在程序中要使用到glib库中的函数,则应该包

浅谈今后源码类网站应该如何运营

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 如今A5论坛中有多家源码论坛在进行激烈的竞争,如何在这种竞争中脱颖而出是最令我头痛的问题,这个项目是我在两个月之前开始着手策划,其实源码类的网站在很早以前却实非常赚钱,比如说我们熟知的搜虎论坛,终生VIP会员要600元,但是却卖得非常好,源码比别网站其实都是半斤八两,但是这就是品牌效益.现在源码类网站如雨后春笋一般,越来越不赚钱了. 然而我现

浅谈十大php建站程序

中介交易 SEO诊断 淘宝客 云主机 技术大厅 做网站的时候选择程序很关键,如果选错了程序,网站发展起来后向更换是不太好的;如果没有程序人员的协助,某些程序甚至无法进行转换. 我觉得选择程序主要的因素很多:程序的功能.程序的执行效率.程序的开发团队力量和后续开发力度.根据不建设不同的网站,我们有不同的选择.今天我们作为中国第一大linux php虚拟主机提供商给大家介绍下主流的PHP程序. 如果要建设一个地方门户,Php168, phpcms和康盛公司的supsite是不错的选择,这三家都是目前

浅谈如何提高设计类网站的用户体验度

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 对于网站的用户体验问题,站长们乐此不彼的在津津乐道的谈论着究竟如何才能提高用户体验,让访客转变为自己的顾客,这是每个网站的最终目标所向,但却并不是每个网站都能够实现的,至于原因为何,是多种多样的,下面A5 SEO诊断优化小组就接触到的VI设计类网站来谈一下怎么才能提高网站的用户体验度. 速度是第一保障 对于网站页面的速度是站长们一再强调的问题

浅谈淘宝客单页程序选择及内链优化

OK,昨天写了篇<淘宝客分析优质关键词经验揭秘>http://www.admin5.com/article/20110508/339590.shtml 教大家如何分析优质关键词,有了关键词,今天就要做站了,对于单品来说网上目前主流的还是单页程序,何为单页程序?有的朋友可能不是太清楚,绝对的单页就是只有一个单页面,我们这里说的单页不是只有一个页面,而是说用首页去竞争关键词,只把权重集中到首页上,这就是所谓的单页程序. 大家都知道,对于网站而言,首页权重大于目录大于内页,所以一些词别人用目录做,我