WIN32进阶必备:跟随鼠标移动的子窗口
上两张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进阶必备:跟随鼠标移动的子窗口的更多相关文章
- win32进阶必备:多线程同步之互斥锁
应用多线程互斥锁之前首先简单过一下C程序可能用到的3个创建线程函数: CreateThread,windows系统提供的唯一创建线程API,_beginthread和_beginthreadex都在内 ...
- windows 编程 —— 子窗口 与 子窗口控件
目录: 子窗口与主窗口的交互 子窗口控件 按钮类别 button 滚动条类别 scrollbar 静态类别 static 编辑框类别 edit 清单方块 listbox 子窗口与主窗口的交互 创建窗 ...
- js进阶 12-3 如何实现元素跟随鼠标移动
js进阶 12-3 如何实现元素跟随鼠标移动 一.总结 一句话总结:获取鼠标位置,将鼠标位置设置为元素偏移即可. 1.用什么事件获取鼠标位置? 用mousemove可以获取鼠标移动的时候的位置 $(d ...
- win32进阶之路:程序托盘图标+右键弹出菜单
开场白 本次介绍两个非常棒且实用的技巧:程序托盘图标和右键弹出菜单,效果如下图. 程序托盘图标用了迅雷的图标,右键点击时候会弹出三个选项的菜单. 程序托盘图标设置 我会用尽可能清晰明了的步骤介绍方式 ...
- html5跟随鼠标炫酷网站引导页动画特效
html5跟随鼠标炫酷网站引导页动画特效一款非常不错的引导页,文字效果渐变,鼠标跟随出绚丽的条纹.html5炫酷网站引导页,鼠标跟随出特效. 体验效果:http://hovertree.com/tex ...
- JS打造的跟随鼠标移动的酷炫拓扑图案
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【翻译】使用CSS3和jQuery制作跟随鼠标方位的Hover特效
今天我们来学习如何通过CSS3的特性和jQuery来创建一个感知鼠标滑动方向的hover效果.当鼠标滑进的时候,遮罩层会从上次鼠标滑出的方向滑入,当鼠标滑出的时候,遮罩层会跟随鼠标,从鼠标滑出的方向滑 ...
- canvas实现跟随鼠标旋转的箭头
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...
- Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现
Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在网络上浏览有关Edge相关问题的时 ...
随机推荐
- 安装Ubuntu双系统系列——更换源
Ubuntu 有一个非常有用的命令 apt-get,它可以帮助你下载软件,还可以安装,下载并安装的命令是 apt-get install. 那Ubuntu默认是从哪里下载软件呢,这可以查看文件/etc ...
- 液晶常用接口“LVDS、TTL、RSDS、TMDS”技术原理介绍
液晶常用接口“LVDS.TTL.RSDS.TMDS”技术原理介绍 1:Lvds Low-Voltage Differential Signaling 低压差分信号 1994年由美国国家半导体公司提出之 ...
- Android-xUtils框架介绍(一)
Android基于快速开发的一个框架——xUtils,它是在aFinal基础上进行重构和扩展的框架,相比aFinal有很大的改善.同时,如果如果你的应用是基于网络的,那么只要处理得当,它会让你彻底的摆 ...
- Android 内存管理(二)
很多开发者都是从j2me或j2ee上过来的,对于内存的使用和理解并不是很到位,Android开发网本次给大家一些架构上的指导,防止出现豆腐渣工 程的出现.Android作为以Java语言为主的智能平台 ...
- C语言中的malloc和free
最近在研究php自定义函数的实现,其中php自定义函数在传递参数时,是放到人为的一个栈中,这个跟写C程序时,参数入栈的这个栈还不一样,其中延伸到了 malloc 以及free 有人说在free(p)后 ...
- .woff 文件404,配置到web.config
<staticContent> <remove fileExtension=".woff" /> <mimeMap fil ...
- bzoj3142
百度空间发公式太累,给个比较详细的解题链接吧http://www.cnblogs.com/jianglangcaijin/archive/2013/08/13/3254314.html注意M(k-1) ...
- bzoj1056: [HAOI2008]排名系统 && 1862: [Zjoi2006]GameZ游戏排名系统
hash 加上 平衡树(名次树). 这道题麻烦的地方就在于输入的是一个名字,所以需要hash. 这个hash用的是向后探查避免冲突,如果用类似前向星的方式避免冲突,比较难写,容易挂掉,但也速度快些. ...
- 通过移动的Mas接口发送短信
1. 首先,需要移动公司提供的用户名.密码.服务ID.接口Url等信息. 2. 将短信信息整理成XML格式的字符串,再转为byte数组,通过POST的方式,将短信发往Mas接口.需要引用"M ...
- 分享10个Js的小型库,效果真的很棒
1.$fx()简介:$fx()是一个轻量级的动画库,一些复杂的动画,可以由多个简单的动画效果进行组合,但是提供的是混淆压缩过的代码,对于研究动画源码的朋友可能特别不爽API:http://fx.ine ...