Visual C++设计超强仿QQ自动伸缩窗口[1]

Visual C++设计超强仿QQ自动伸缩窗口[1],第1张

一 观察

模仿前最重要的一步就是观察 经过半天对QQ的摆弄和摸索 总结出了以下一些特点

窗口开始粘附时 检测的是鼠标坐标与桌面边界的距离 特别地 粘附在下面的时候 检测的是与任务栏的距离

在向上移动窗口时 窗口边界永远不会超出桌面上面边界

窗口是个TopMost风格

当窗口粘附在上面 左边或右边并显示时 你把鼠标移动到最顶端 光标变成改变窗口大小的图标 而单单是把窗口的top坐标设置为 是不行的

粘附在下面的时候 当处于移动状态 那么窗口的底边是与任务栏顶边对齐的 但从隐藏到显示的时候 窗口的底端是与屏幕底边对齐的

隐藏后显露出来的那条线可能是一个Border 但肯定的是绝不包含Client区域

关于响应鼠标的进入与移出窗口 绝对不是WM_MOUSEMOVE WM_MOUSELEAVE 证明 你以及其慢的速度接触隐藏状态的QQ边界 你会发现几乎是 一触即发 你又以及其慢的速度移出显示状态的QQ 你会发现它的收缩反而不是 一触即发 的 而是离边缘 象素左右 而WM_MOUSEMOVE WM_MOUSELEAVE 只有在进入 移出Client区域才响应 明显和QQ不同 其实从第 点也可以知道

粘附在两边的时候 高度会调整为桌面上边界到任务栏下边界的距离

在 拖动时显示窗口内容 模式下(桌面属性-外观-效果) 粘附在两边的拖动出来时 如果收缩之前高度比收缩后小则回复原来高度 在非 拖动时显示窗口内容 模式下 光栅会回复原来高度 但释放左键时 高度却是收缩时调整后的高度 一开始我以为这是个BUG 但我编写时同样出现这个问题 发现这两种模式会影响WM_MOVING参数的意义

粘附在两边的时候当你设置任务栏自动隐藏 QQ窗口会自动调整高度充满屏幕高度

窗口显示或隐藏不是一瞬间的 这点在第 点提到的两种模式下 会有所不同

任务栏并不显示QQ窗口

二 编写代码

观察完毕 就开始编写了

首先新建一个基于对话框的MFC程序 命名为QQHideWnd 在对话框属性的styles页把border改为Resizing 你也可同时把Entended styles 的 tool window 钩上 对于这点我在程序了动态修改了

在QQHideWndDlg h头文件添加以下成员函数

protected

//修正移动时窗口的大小void FixMoving(UINT fwSideLPRECT pRect)//从收缩状态显示窗口void DoShow()//从显示状态收缩窗口void DoHide()//重载函数 只是为了方便调用 实际调用CWnd的SetWindowPos(…)BOOL SetWindowPos(const CWnd* pWndInsertAfter LPCRECT pCRectUINT nFlags = SWP_SHOWWINDOW)

继续添加成员变量

private::BOOL m_isSizeChanged//窗口大小是否改变了BOOL m_isSetTimer//是否设置了检测鼠标的TimerINTm_oldWndHeight//旧的窗口宽度INTm_taskBarHeight //任务栏高度INTm_edgeHeight//边缘高度INTm_edgeWidth//边缘宽度INTm_hideMode//隐藏模式BOOL m_hsFinished//隐藏或显示过程是否完成BOOL m_hiding//该参数只有在!m_hsFinished才有效//真:正在隐藏 假:正在显示

增加消息响应 需要注意的是有些消息你只有把右下角的 Filter for message设置为window才能看到

WM_ NCHITTESM_MOVINGWM_CREATEWM_TIMER

然后来到对应的cpp文件 在头部定义一些宏

//收缩模式#define HM_NONE //不收缩#define HM_TOP //向上收缩#define HM_BOTTOM //向下收缩#define HM_LEFT //向左收缩#define HM_RIGHT //向右收缩#define CM_ELAPSE //检测鼠标是否离开窗口的时间间隔#define HS_ELAPSE //伸缩过程每步的时间间隔#define HS_STEPS//伸缩过程分成多少步完成#define INTERVAL//触发粘附时鼠标与屏幕边界的最小间隔 单位为象素#define INFALTE//触发收缩时鼠标与窗口边界的最小间隔 单位为象素

lishixinzhi/Article/program/net/201311/15314

word连接线自动伸缩的方法:

1、先同时按住Ctrl+A组合键,同时选中想要改变的方框。

2、单击绘图工具栏中格式,再点击格式,对齐,顶端对齐。

3、单击绘图工具栏中格式选项,再选择,对齐,横向分布即可。

MicrosoftWord是微软公司的一个文字处理器应用程序。它最初是由RichardBrodie为了运行DOS的IBM计算机而在1983年编写的。随后的版本可运行于AppleMacintosh(1984年),SCOUNIX,和MicrosoftWindows(1989年),并成为了MicrosoftOffice的一部分。

您好,写气缸伸缩几次程序的步骤如下:

1.首先,您需要确定气缸的伸缩次数,并确定每次伸缩的时间间隔。

2.然后,您需要编写程序,使气缸按照您设定的次数和时间间隔进行伸缩。

3.接下来,您需要编写程序,使气缸在每次伸缩后停止,并等待您设定的时间间隔后再次伸缩。

4.最后,您需要编写程序,使气缸在每次伸缩后停止,并等待您设定的时间间隔后再次伸缩,直到完成您设定的伸缩次数。

以上就是编写气缸伸缩几次程序的步骤,希望能够帮助您。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11538865.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存