知识大全 Visual C++设计超强仿QQ自动伸缩窗口[2]
Posted 函数
篇首语:世界上三种东西最宝贵本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Visual C++设计超强仿QQ自动伸缩窗口[2]相关的知识,希望对你有一定的参考价值。
Visual C++设计超强仿QQ自动伸缩窗口[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
然后在构造函数初始化成员变量
m_isSizeChanged = FALSE;m_isSetTimer = FALSE;m_hsFinished = TRUE;m_hiding = FALSE;m_oldWndHeight = MINCY;m_taskBarHeight = ;m_edgeHeight = ;m_edgeWidth= ;m_hideMode = HM_NONE;
完成了一些初始的工作 那么就开始进入关键的函数实现了 首先是在OnCreate做些窗口的初始化和获得一些系统信息
代码一
int CQQHideWndDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) if (CDialog::OnCreate(lpCreateStruct) == )return ; // TODO: Add your specialized creation code here
//获得任务栏高度CWnd* p;p = this >FindWindow( Shell_TrayWnd NULL);if(p != NULL)CRect tRect;p >GetWindowRect(tRect);m_taskBarHeight = tRect Height();
//修改风格使得他不在任务栏显示ModifyStyleEx(WS_EX_APPWINDOW WS_EX_TOOLWINDOW);//去掉关闭按键(如果想画 个按键的话)//ModifyStyle(WS_SYSMENU NULL);
//获得边缘高度和宽度m_edgeHeight = GetSystemMetrics(SM_CYEDGE);m_edgeWidth = GetSystemMetrics(SM_CXFRAME);
return ;
接着如何知道鼠标进入或移出窗口呢?在前面我已经证明了WM_MOUSEMOVE和WM_MOUSELEAVE不符合我们的要求 于是我用了WM_ NCHITTEST这个消息 你可以看到我在这个消息响应函数中用了两个SetTimer 一个用于检测鼠标是否离开 一个用于伸缩过程 不管你喜欢不喜欢 要达到第 点和第 点 这个是必须的 考虑的效率问题 在不需要的时候关闭这些Timer就好了
代码二
UINT CQQHideWndDlg::OnNcHitTest(CPoint point) // TODO: Add your message handler code here and/or call defaultCString str;str Format( Mouse (%d %d) point x point y);GetDlgItem(IDC_CURSOR) >SetWindowText(str);if(m_hideMode != HM_NONE && !m_isSetTimer &&//防止鼠标超出屏幕右边时向右边收缩造成闪烁point x < GetSystemMetrics(SM_CXSCREEN) + INFALTE) //鼠标进入时 如果是从收缩状态到显示状态则开启TimerSetTimer( CM_ELAPSE NULL);m_isSetTimer = TRUE; m_hsFinished = FALSE;m_hiding = FALSE;SetTimer( HS_ELAPSE NULL); //开启显示过程return CDialog::OnNcHitTest(point);
然后在OnTimer中
代码三
void CQQHideWndDlg::OnTimer(UINT nIDEvent) // TODO: Add your message handler code here and/or call defaultif(nIDEvent == )POINT curPos;GetCursorPos(&curPos); CString str;str Format( Timer On(%d %d) curPos x curPos y);GetDlgItem(IDC_TIMER) >SetWindowText(str);
CRect tRect;//获取此时窗口大小GetWindowRect(tRect);//膨胀tRect 以达到鼠标离开窗口边沿一定距离才触发事件tRect InflateRect(INFALTE INFALTE);
if(!tRect PtInRect(curPos)) //如果鼠标离开了这个区域KillTimer( ); //关闭检测鼠标Timerm_isSetTimer = FALSE;GetDlgItem(IDC_TIMER) >SetWindowText( Timer Off );
m_hsFinished = FALSE; m_hiding = TRUE;SetTimer( HS_ELAPSE NULL); //开启收缩过程
if(nIDEvent == )if(m_hsFinished) //如果收缩或显示过程完毕则关闭Timer KillTimer( );elsem_hiding ? DoHide() : DoShow();CDialog::OnTimer(nIDEvent);
暂时不管OnTimer中的DoHide(); DoShow();
先来看看核心的函数之一的 FixMoving 该函数在OnMoving中被调用 FixMoving通过检测鼠标位置和窗口位置来决定窗口的收缩模式 并修正粘附边界时窗口的位置 从而达到像移动QQ时出现的效果
cha138/Article/program/net/201311/15311相关参考
知识大全 Visual C++设计超强仿QQ自动伸缩窗口[4]
VisualC++设计超强仿QQ自动伸缩窗口[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&
用VisualC++实现带阴影弹出窗口的技术 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一.
QQ尾巴病毒的VisualC++实现探讨 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
基于VisualC++的自动化客户端的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一概述
知识大全 为什么我QQ发完信息窗口会自动关闭 在哪模式里看不到原先有的那个发送完消息关闭窗口的设置了怎么办
为什么我QQ发完信息窗口会自动关闭在哪模式里看不到原先有的那个发送完消息关闭窗口的设置了怎么办? 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整
知识大全 小米手机qq消息来的时候不会自动弹出窗口,也不会指示灯提醒 不然就是过很久才会提醒
小米手机qq消息来的时候不会自动弹出窗口,也不会指示灯提醒不然就是过很久才会提醒这个一般都是设置消息通知的问题,具体的处理方法如下:1、打开手机,然后进入手机的设置。2、然后选择里面的通知和状态栏。3
我的VisualC++入门之路 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!N次失败次成功还学的不
VisualC++中OpenGL编程入门 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Open
VisualC++制作一个Sniffer实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Snif