一 观察
模仿前最重要的一步就是观察 经过半天对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.最后,您需要编写程序,使气缸在每次伸缩后停止,并等待您设定的时间间隔后再次伸缩,直到完成您设定的伸缩次数。
以上就是编写气缸伸缩几次程序的步骤,希望能够帮助您。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)