void CQQHideWndDlg::DoShow(){if(m_hideMode == HM_NONE)return;CRect tRect;GetWindowRect(tRect);INT height = tRect.Height();INT width = tRect.Width();INT steps = 0;switch(m_hideMode){case HM_:steps = height/HS_STEPS;tRect.top += steps;if(tRect.top >= -m_edgeHeight){ //你可以把下面一句替换上面的 ...+=|-=steps 达到取消抽屉效果//更好的办法是添加个BOOL值来控制,其他case同样.tRect.top = -m_edgeHeight;m_hsFinished = TRUE; //完成显示过程}tRect.bottom = tRect.top + height;break;case HM_BOTTOM:steps = height/HS_STEPS;tRect.top -= steps;if(tRect.top <= (GetSystemMetrics(SM_CYSCREEN) - height)){tRect.top = GetSystemMetrics(SM_CYSCREEN) - height;m_hsFinished = TRUE;}tRect.bottom = tRect.top + height;break;case HM_LEFT:steps = width/HS_STEPS;tRect.right += steps;if(tRect.right >= width){tRect.right = width;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) - width)){tRect.left = GetSystemMetrics(SM_CXSCREEN) - width;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);}BOOL CQQHideWndDlg::SetWindowPos(const CWnd* pWndInsertAfter, LPCRECT pCRect, UINT nFlags){return CDialog::SetWindowPos(pWndInsertAfter,pCRect->left, pCRect->top,pCRect->right - pCRect->left, pCRect->bottom - pCRect->top, nFlags);}
到此,程序终于完成了。在我的源代码中还有对WM_SIZING的处理和定义了与之相关的宏,这些主要是控制窗口在调整大小时不能超过最小的宽度和高度,与QQ的自动伸缩无关,所以不在这里提及了。
三、结束语
虽然还不能算是完美的模仿,但效果已经非常非常的接近了。也许有人会奇怪为什么要用Tool Window风格,这是因为,这样在任务栏中不会显示窗口。从QQ的标题栏高度也可以判断出他也是这种风格,但这样一来就不能拥有最小化、化按键了。实际上QQ的化、最小化和关闭按键都是用DC画上去的。如何在Caption上增加按键,外国一些开源网站有源代码,我下载并看了一下,发现里面有个知识点很有趣,那就是更改消息路由,有兴趣的可以去下载来学习一下。
QQ的成功很大部分在于他的界面比较人性化(用了MSN后深有感受),而这些界面实现起来原理也许很简单,难的是观察东西心要细、设计东西心要密、开发东西心要异。
-
【VisualC++设计超强仿QQ自动伸缩窗口(4)】相关文章:
Vb中控件的自动排列03-23
广西壮族自治区财政厅会计继续教育报名登录入口:https://czt.gxzf.gov.cn/kjgl/03-23
07年4月北师大“中国古代文学史(一)”串讲(5)03-23
运动主题团日活动策划03-23
2023年广东梅州中考成绩查询时间及查分入口[7月7日起]03-23
2024年江苏中级导游等级考试准考证打印时间及入口(11月18日9:00起)03-23
2020年高级会计师《高级会计实务》知识点:社会融资方式03-23
英语口语话题:开立账户03-23
计算机应用技术英语简历范文大全03-23
党员四风问题自查材料03-23
高一叙事作文:雨伞下的触动_800字03-23
