上两张Demo的图,方便朋友们选择是否继续看文章.

在子窗口的白色区域按下鼠标左键不放并移动鼠标可以拖拽子窗口跟随鼠标移动.

选择继续看下去的朋友不要担心,接下来就是正文了.

PART 1:Demo功能

呵呵呵,就是纯win32 API方式创建窗口和关联的子窗口,为计划中的小工具做准备吧,计划中要有一个稍复杂的配置界面,采用子窗口的显示和隐藏来切换配置窗口.

PART 2:技术难题

这部分不存在吧,都是win32的基础知识,创建主窗口和子窗口基本相同,都是定义窗口对象的属性和关联方法,属性即WNDCLASS,关联方法即消息处理的回调函数; 让子窗口跟随鼠标左键移动的关键在于理解win32的消息机制并勤快查找MSDN.

PART 3:知识积累

使用win32 API而非MFC的方式对windows的底层机制理解更清晰一些,多个窗口仍然是单线程处理,窗口创建以后循环从消息队列中获取消息并在解析后发给对应的窗口去处理,这里其实就是解析消息归属窗口后调用窗口对应的回调函数处理,整个流程中任何一个地方阻塞都会导致窗口无法响应.

在鼠标移动时候检测鼠标是否按下比想象中的要简单,MSDN查看WM_MOUSEMOVE即可,窗口过程中已经传递了鼠标左键状态.原本是打算用GetKeyStat去获取键盘和鼠标的虚键状态呢.

PART 4:找BUG心得

分享一个小心得吧,win32编程时候如果不明白错误详细,调用GetLastError获取错误信息,错误码+报错函数问度娘,度娘会热心帮忙的.

本次卡壳的地方是创建子窗口调用CreateWindow终返回NULL,GetLastError返回错误码1047,度娘咨询下错误码的意思:1.没有初始WNDCLASS对象的hInstance成员;2.注册的类名是乱码.关注CreateWindow的类名参数解决bug.

PART 5:主要思路

1.生成主窗口,基本是windows的标准创建窗口.

2.创建子窗口,子窗口的创建和主窗口没有明显的区别,注册WNDCLASS类,CreateWindow关联新注册的类和父窗口句柄.

3.子窗口的消息处理,在子窗口的关联方法中处理子窗口相对主窗口的偏移量,采用GetWindowRect分别获取父窗口和子窗口相对屏幕左上角的偏移量,之后计算子窗口相对父窗口左上角的偏移量;在WM_MOUSEMOVE消息中判断鼠标左键是否按下,如果鼠标位于子窗口上且按下鼠标左键移动鼠标,则获取鼠标的偏移并调用MoveWindow移动子窗口,制造一个子窗口跟随鼠标移动的现象.

免积分下载链接:http://download.csdn.net/detail/hd770c/6830919

WIN32进阶必备:跟随鼠标移动的子窗口的更多相关文章

  1. win32进阶必备:多线程同步之互斥锁

    应用多线程互斥锁之前首先简单过一下C程序可能用到的3个创建线程函数: CreateThread,windows系统提供的唯一创建线程API,_beginthread和_beginthreadex都在内 ...

  2. windows 编程 —— 子窗口 与 子窗口控件

    目录: 子窗口与主窗口的交互 子窗口控件 按钮类别 button 滚动条类别 scrollbar 静态类别  static 编辑框类别 edit 清单方块 listbox 子窗口与主窗口的交互 创建窗 ...

  3. js进阶 12-3 如何实现元素跟随鼠标移动

    js进阶 12-3 如何实现元素跟随鼠标移动 一.总结 一句话总结:获取鼠标位置,将鼠标位置设置为元素偏移即可. 1.用什么事件获取鼠标位置? 用mousemove可以获取鼠标移动的时候的位置 $(d ...

  4. win32进阶之路:程序托盘图标+右键弹出菜单

     开场白 本次介绍两个非常棒且实用的技巧:程序托盘图标和右键弹出菜单,效果如下图. 程序托盘图标用了迅雷的图标,右键点击时候会弹出三个选项的菜单. 程序托盘图标设置 我会用尽可能清晰明了的步骤介绍方式 ...

  5. html5跟随鼠标炫酷网站引导页动画特效

    html5跟随鼠标炫酷网站引导页动画特效一款非常不错的引导页,文字效果渐变,鼠标跟随出绚丽的条纹.html5炫酷网站引导页,鼠标跟随出特效. 体验效果:http://hovertree.com/tex ...

  6. JS打造的跟随鼠标移动的酷炫拓扑图案

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 【翻译】使用CSS3和jQuery制作跟随鼠标方位的Hover特效

    今天我们来学习如何通过CSS3的特性和jQuery来创建一个感知鼠标滑动方向的hover效果.当鼠标滑进的时候,遮罩层会从上次鼠标滑出的方向滑入,当鼠标滑出的时候,遮罩层会跟随鼠标,从鼠标滑出的方向滑 ...

  8. canvas实现跟随鼠标旋转的箭头

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...

  9. Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现

    Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在网络上浏览有关Edge相关问题的时 ...

随机推荐

  1. 转:数据包经由路由转发时源、目的IP地址及MAC地址变化情况

    数据包经由路由转发时源.目的IP地址及MAC地址变化情况.  IP数据包经由路由转发的时候源ip,目的ip,源MAC,目的mac是否发生改变,如何改变?   A—–(B1-B2)—–(C1-C2)—— ...

  2. sqlmap批量扫描burpsuite请求日志记录

    sqlmap可以批量扫描包含有request的日志文件,而request日志文件可以通过burpsuite来获取, 因此通过sqlmap结合burpsuite工具,可以更加高效的对应用程序是否存在SQ ...

  3. DataTable ,XML和JSON相互转化

    网上搜集的,保留下来了,有需要的拿去!private string DataTable2Xml(DataTable dt) { StringBuilder xmlBuilder = new Strin ...

  4. 《 UNIX网络编程》源码的使用

    学习编程这东西,看代码,改代码,运行代码这样才能学到实际东西!本书说在www.unpbook.com可以获取源码,不过打不开!所以google unpv13e.tar.gz 并在网络上找到了:源码:h ...

  5. 中断服务程序不用interrupt关键字也可实现中断,该关键字是否必须?

    2013-06-20 11:13:35 中断服务程序不用interrupt关键字也可实现中断,该关键字是否必须? 使用tools->pin connect,将INT5与pin.txt关联,模拟外 ...

  6. 在XML里的XSD和DTD以及standalone的使用2----具体使用详解

    如何定义XSD并在XML中使用XSD 同时XSD可以对XML中的格式进行约束,当约束失败时给出提示. 下面以下使用VS2010为平台进行演示. 1.新建一个项目,然后在项目中添加xml架构文件(.xs ...

  7. XmlDocument类

    XmlDocument类是.NET框架的DOC解析器.XmlDocument将XML视为树状结构,它装载XML文档,并在内存中构建该文档的树状结构.下面来看下XmlDocument提供了哪些功能. 一 ...

  8. 函数buf_LRU_free_from_unzip_LRU_list

    /******************************************************************//** Try to free an uncompressed ...

  9. sencha touch tabsidebar 源码扩展

    先上图看效果 没错,这是一个sencha touch 项目,而这里的右边推出效果(下文叫做tabsiderbar),使用插件tabsiderbar来扩展的. 插件js下载地址:http://www.m ...

  10. BZOJ2893: 征服王

    题解: 裸的上下界最小流是有问题的.因为在添加了附加源之后求出来的流,因为s,t以及其它点地位都是平等的.如果有一个流经过了s和t,那么总可以认为这个流是从s出发到t的满足题意的流. 既然可能存在s到 ...