上两张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. R语言学习笔记:数据的可视化

    本文参考数据挖掘与R第二章节 读入数据 方法1,下载Data mining with r的配套包 install.packages('DMwR') 方法2,下载txt数据,并且读入数据.方法见上文. ...

  2. sc.exe管理系统服务

    sc.exe管理系统服务 下面介绍SC,SC QC,and SC QUERY sc.exe create HomerSatelliteDesktopGC binPath= "D:XXXXXX ...

  3. UVa 1599 (字典序最小的最短路) Ideal Path

    题意: 给出一个图(图中可能含平行边,可能含环),每条边有一个颜色标号.在从节点1到节点n的最短路的前提下,找到一条字典序最小的路径. 分析: 首先从节点n到节点1倒着BFS一次,算出每个节点到节点n ...

  4. UVa 221 (STL 离散化) Urban Elevations

    题意: 作图为n个建筑物的俯视图,右图为从南向北看的正视图,按从左往右的顺序输出可见建筑物的标号. 分析: 题中已经说了,要么x相同,要么x相差足够大,不会出现精度问题. 给这n个建筑物从左往右排序, ...

  5. PASCALmath库

    noi上是让用,noip让用么?貌似不让— — 反正是好东西.在FP中,Math库为我们提供了丰富的数学函数.以下介绍在OI中可能会用到的Math库中一些函数.过程. 使用方法:在程序头用Uses语句 ...

  6. 20款最优秀的JavaScript编辑器

    毫无疑问SublimeText,Notepad++,webstorm等,是市面上最主导的编辑器,但当然也有一些更多的JavaScript编辑器提供众多的特性和功能,方便和轻松自由的编码.本文整理了20 ...

  7. s​e​t​ ​x​a​c​t​_​a​b​o​r​t ​用​法

    默认行为 默认为SET XACT_ABORT OFF,没有事务行为. SET XACT_ABORT ON SET XACT_ABORT ON分为两种: 1.总体作为一个事务,整体提交或整体回滚,格式为 ...

  8. c语言编程风格

    关于c语言的编程风格,不同的书上有不同的推荐,不同的公司有不同的要求.这里,做了一下基本规范说明. 1.变量定义 在定义变量时,前缀使用变量的类型,之后使用表现变量用途的英文单词或单词缩写,且每个单词 ...

  9. linux shell if 参数

    shell 编程中使用到得if语句内判断参数 –b 当file存在并且是块文件时返回真 -c 当file存在并且是字符文件时返回真 -d 当pathname存在并且是一个目录时返回真 -e 当path ...

  10. 【转】FragmentTest学习笔记1

    原文网址:http://blog.csdn.net/hishentan/article/details/20734489 源码部分: BookContent.java package com.exam ...