知识大全 Visual C++设计超强仿QQ自动伸缩窗口[3]

Posted

篇首语:黑暗带来恐惧。知识可以点亮你,驱逐恐惧。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Visual C++设计超强仿QQ自动伸缩窗口[3]相关的知识,希望对你有一定的参考价值。

Visual C++设计超强仿QQ自动伸缩窗口[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  代码四

void CQQHideWndDlg::FixMoving(UINT fwSide LPRECT pRect)POINT curPos;GetCursorPos(&curPos);INT screenHeight = GetSystemMetrics(SM_CYSCREEN);INT screenWidth = GetSystemMetrics(SM_CXSCREEN);INT height = pRect >bottom pRect >top;INT width = pRect >right pRect >left;

if (curPos y <= INTERVAL) //粘附在上边pRect >bottom = height m_edgeHeight;pRect >top = m_edgeHeight;m_hideMode = HM_TOP;else if(curPos y >= (screenHeight INTERVAL m_taskBarHeight)) //粘附在下边pRect >top = screenHeight m_taskBarHeight height;pRect >bottom = screenHeight m_taskBarHeight;m_hideMode = HM_BOTTOM;else if (curPos x < INTERVAL) //粘附在左边 if(!m_isSizeChanged)CRect tRect;GetWindowRect(tRect);m_oldWndHeight = tRect Height(); pRect >right = width;pRect >left = ;pRect >top = m_edgeHeight;pRect >bottom = screenHeight m_taskBarHeight;m_isSizeChanged = TRUE;m_hideMode = HM_LEFT;else if(curPos x >= (screenWidth INTERVAL)) //粘附在右边if(!m_isSizeChanged)CRect tRect;GetWindowRect(tRect);m_oldWndHeight = tRect Height(); pRect >left = screenWidth width;pRect >right = screenWidth;pRect >top = m_edgeHeight;pRect >bottom = screenHeight m_taskBarHeight;m_isSizeChanged = TRUE;m_hideMode = HM_RIGHT;else //不粘附if(m_isSizeChanged) //如果收缩到两边 则拖出来后会变回原来大小//在 拖动不显示窗口内容下 只有光栅变回原来大小pRect >bottom = pRect >top + m_oldWndHeight;m_isSizeChanged = FALSE;if(m_isSetTimer) //如果Timer开启了 则关闭之if(KillTimer( ) == )m_isSetTimer = FALSE;m_hideMode = HM_NONE;GetDlgItem(IDC_TIMER) >SetWindowText( Timer off );

  收缩模式和位置决定后 剩下的工作就由最后两个核心函数完成了 实现收缩的DoHide() 实现伸展的DoShow() 在这两个过程中m_hsFinished m_hiding 这两个变量起到很重要的控制作用 由于伸缩过程没完成时 hsFinished始终为FALSE 所以Timer 不会关闭 于是在OnTimer中会重复调用这两个函数之一 在这两个函数体内 窗口位置有规律地递减或递增就可以达到QQ的 抽屉 效果了 有趣的是即使伸缩过程还没完成 你也可以在这个过程中改变m_hiding这个值来决定他是伸还是缩 正如QQ一样 你可以把Timer 的事件间隔调大一点 然后在窗口伸缩时 鼠标来回地进出窗口就会很容易看到这样有趣的效果(还没缩进去又被拉了出来 或者还没拉出来又缩进去了)

  代码五

void CQQHideWndDlg::DoHide()if(m_hideMode == HM_NONE)return;

CRect tRect;GetWindowRect(tRect);

INT height = tRect Height();INT width = tRect Width();

INT steps = ;

switch(m_hideMode)case HM_TOP:steps = height/HS_STEPS;tRect bottom = steps;if(tRect bottom <= m_edgeWidth) //你可以把下面一句替换上面的 +=| =steps 达到取消抽屉效果//更好的办法是添加个BOOL值来控制 其他case同样 tRect bottom = m_edgeWidth;m_hsFinished = TRUE; //完成隐藏过程tRect top = tRect bottom height; break;case HM_BOTTOM:steps = height/HS_STEPS;tRect top += steps;if(tRect top >= (GetSystemMetrics(SM_CYSCREEN) m_edgeWidth))tRect top = GetSystemMetrics(SM_CYSCREEN) m_edgeWidth;m_hsFinished = TRUE;tRect bottom = tRect top + height;break;case HM_LEFT:steps = width/HS_STEPS;tRect right = steps;if(tRect right <= m_edgeWidth)tRect right = m_edgeWidth;m_hsFinished = TRUE;tRect left = tRect right width;tRect top = m_edgeHeight;tRect bottom = GetSystemMetrics(SM_CYSCREEN) m_taskBarHeight;break;case HM_RIGHT:steps = width/HS_STEPS;tRect left += steps;if(tRect left >= (GetSystemMetrics(SM_CXSCREEN) m_edgeWidth))tRect left = GetSystemMetrics(SM_CXSCREEN) m_edgeWidth;m_hsFinished = TRUE; tRect right = tRect left + width;tRect top = m_edgeHeight;tRect bottom = GetSystemMetrics(SM_CYSCREEN) m_taskBarHeight;break;default:break;

SetWindowPos(&wndTopMost tRect);

cha138/Article/program/net/201311/15313

相关参考

知识大全 Visual C++设计超强仿QQ自动伸缩窗口[4]

VisualC++设计超强仿QQ自动伸缩窗口[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&

知识大全 Visual C++设计超强仿QQ自动伸缩窗口[2]

VisualC++设计超强仿QQ自动伸缩窗口[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&

知识大全 用Visual C++实现带阴影弹出窗口的技术

用VisualC++实现带阴影弹出窗口的技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一.

知识大全 QQ尾巴病毒的Visual C++实现探讨

QQ尾巴病毒的VisualC++实现探讨  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 基于Visual C++ 的自动化客户端的实现

基于VisualC++的自动化客户端的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一概述

知识大全 为什么我QQ发完信息窗口会自动关闭 在哪模式里看不到原先有的那个发送完消息关闭窗口的设置了怎么办

为什么我QQ发完信息窗口会自动关闭在哪模式里看不到原先有的那个发送完消息关闭窗口的设置了怎么办?  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整

知识大全 小米手机qq消息来的时候不会自动弹出窗口,也不会指示灯提醒 不然就是过很久才会提醒

小米手机qq消息来的时候不会自动弹出窗口,也不会指示灯提醒不然就是过很久才会提醒这个一般都是设置消息通知的问题,具体的处理方法如下:1、打开手机,然后进入手机的设置。2、然后选择里面的通知和状态栏。3

知识大全 我的Visual C++入门之路

我的VisualC++入门之路  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!N次失败次成功还学的不

知识大全 Visual C++中OpenGL编程入门

VisualC++中OpenGL编程入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Open

知识大全 Visual C++制作一个Sniffer实例

VisualC++制作一个Sniffer实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Snif