熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

Visual C++設計超強仿QQ自動伸縮窗口[4]

2013-11-13 11:10:22  來源: .NET編程 
    代碼六

void CQQHideWndDlg::DoShow()
{
if(m_hideMode == HM_NONE)
return;

CRect tRect;
GetWindowRect(tRect);
INT height = tRectHeight();
INT width = tRectWidth();

INT steps = ;

switch(m_hideMode)
{
case HM_TOP:
steps = height/HS_STEPS;
tRecttop += steps;
if(tRecttop >= m_edgeHeight)
{ //你可以把下面一句替換上面的 +=|=steps 達到取消抽屜效果
//更好的辦法是添加個BOOL值來控制其他case同樣
tRecttop = m_edgeHeight;
m_hsFinished = TRUE; //完成顯示過程
}
tRectbottom = tRecttop + height;
break;
case HM_BOTTOM:
steps = height/HS_STEPS;
tRecttop = steps;
if(tRecttop <= (GetSystemMetrics(SM_CYSCREEN) height))
{
tRecttop = GetSystemMetrics(SM_CYSCREEN) height;
m_hsFinished = TRUE;
}
tRectbottom = tRecttop + height;
break;
case HM_LEFT:
steps = width/HS_STEPS;
tRectright += steps;
if(tRectright >= width)
{
tRectright = width;
m_hsFinished = TRUE;
}
tRectleft = tRectright width;
tRecttop = m_edgeHeight;
tRectbottom = GetSystemMetrics(SM_CYSCREEN) m_taskBarHeight;
break;
case HM_RIGHT:
steps = width/HS_STEPS;
tRectleft = steps;
if(tRectleft <= (GetSystemMetrics(SM_CXSCREEN) width))
{
tRectleft = GetSystemMetrics(SM_CXSCREEN) width;
m_hsFinished = TRUE;
}
tRectright = tRectleft + width;
tRecttop = m_edgeHeight;
tRectbottom = GetSystemMetrics(SM_CYSCREEN) m_taskBarHeight;
break;
default:
break;
}

SetWindowPos(&wndTopMosttRect);
}

BOOL CQQHideWndDlg::SetWindowPos(const CWnd* pWndInsertAfter

LPCRECT pCRect UINT nFlags)
{
return CDialog::SetWindowPos(pWndInsertAfterpCRect>left pCRect>top
pCRect>right pCRect>left pCRect>bottom pCRect>top nFlags);
}

  到此程序終於完成了在我的源代碼中還有對WM_SIZING的處理和定義了與之相關的宏這些主要是控制窗口在調整大小時不能超過最小的寬度和高度與QQ的自動伸縮無關所以不在這裡提及了

  結束語

  雖然還不能算是完美的模仿但效果已經非常非常的接近了也許有人會奇怪為什麼要用Tool Window風格這是因為這樣在任務欄中不會顯示窗口從QQ的標題欄高度也可以判斷出他也是這種風格但這樣一來就不能擁有最小化最大化按鍵了實際上QQ的最大化最小化和關閉按鍵都是用DC畫上去的如何在Caption上增加按鍵外國一些開源網站有源代碼我下載並看了一下發現裡面有個知識點很有趣那就是更改消息路由有興趣的可以去下載來學習一下

  QQ的成功很大部分在於他的界面比較人性化(用了MSN後深有感受)而這些界面實現起來原理也許很簡單難的是觀察東西心要細設計東西心要密開發東西心要異

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/net/201311/15312.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.