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_;}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 = 0;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(1) == 1)m_isSetTimer = FALSE;}m_hideMode = HM_NONE;GetDlgItem(IDC_TIMER)->SetWindowText("Timer off");}}
收缩模式和位置决定后,剩下的工作就由最后两个核心函数完成了:实现收缩的DoHide(),实现伸展的DoShow()。在这两个过程中m_hsFinished,m_hiding 这两个变量起到很重要的控制作用。由于伸缩过程没完成时,hsFinished始终为FALSE,所以Timer 2 不会关闭,于是在OnTimer中会重复调用这两个函数之一,在这两个函数体内,窗口位置有规律地递减或递增就可以达到QQ的“抽屉”效果了,有趣的是即使伸缩过程还没完成,你也可以在这个过程中改变m_hiding这个值来决定他是伸还是缩,正如QQ一样。你可以把Timer 2 的事件间隔调大一点,然后在窗口伸缩时,鼠标来回地进出窗口就会很容易看到这样有趣的效果(还没缩进去又被拉了出来,或者还没拉出来又缩进去了)。
【VisualC++设计超强仿QQ自动伸缩窗口(3)】相关文章:
Vb中控件的自动排列03-23
广西壮族自治区财政厅会计继续教育报名登录入口:https://czt.gxzf.gov.cn/kjgl/03-23
运动主题团日活动策划03-23
2023年广东梅州中考成绩查询时间及查分入口[7月7日起]03-23
2024年江苏中级导游等级考试准考证打印时间及入口(11月18日9:00起)03-23
盐阜大众报报业集团(盐城)公开招聘《东方生活报》编辑记者的公告 2月25日到3月3日报名03-23
新学期英语作文【精选3篇】03-23
2020年高级会计师《高级会计实务》知识点:社会融资方式03-23
英语口语话题:开立账户03-23
计算机应用技术英语简历范文大全03-23
党员四风问题自查材料03-23
