VisualC++設(shè)計超強仿QQ自動伸縮窗口(4)

字號:

代碼六
    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 達(dá)到取消抽屜效果//更好的辦法是添加個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的處理和定義了與之相關(guān)的宏,這些主要是控制窗口在調(diào)整大小時不能超過最小的寬度和高度,與QQ的自動伸縮無關(guān),所以不在這里提及了。
    三、結(jié)束語
    雖然還不能算是完美的模仿,但效果已經(jīng)非常非常的接近了。也許有人會奇怪為什么要用Tool Window風(fēng)格,這是因為,這樣在任務(wù)欄中不會顯示窗口。從QQ的標(biāo)題欄高度也可以判斷出他也是這種風(fēng)格,但這樣一來就不能擁有最小化、化按鍵了。實際上QQ的化、最小化和關(guān)閉按鍵都是用DC畫上去的。如何在Caption上增加按鍵,外國一些開源網(wǎng)站有源代碼,我下載并看了一下,發(fā)現(xiàn)里面有個知識點很有趣,那就是更改消息路由,有興趣的可以去下載來學(xué)習(xí)一下。
    QQ的成功很大部分在于他的界面比較人性化(用了MSN后深有感受),而這些界面實現(xiàn)起來原理也許很簡單,難的是觀察東西心要細(xì)、設(shè)計東西心要密、開發(fā)東西心要異。
    -