1. 程式人生 > >【介面】VC 6 MFC讓視窗輕而易舉變漂亮

【介面】VC 6 MFC讓視窗輕而易舉變漂亮

一、介面分析

         主要是把資料放到合適的位置,並且獲取視窗的pDC,用pDC—>StretchBlt()函式顯示圖片,這裡面建立了一個相容的dc,先把資料選擇到這裡面,再用StrtchBlt()拷貝相容dc。

         最後是一個一個數據塊進行顯示。

二、互動分析

         DLG對話方塊中,響應WM_NCMOUSEMOVE訊息、WM_NCLBUTTONDOWN訊息

//WM_NCMOUSEMOVE訊息
OnNcMouseMove(nHitTest, point);
{  
  CRect tempIni,tempMin,tempMax,tempClose,ClientRect;//分別是初始化按鈕、最小化按鈕、最大化按鈕、關閉按鈕、客戶區
   temMin.CopyRect()//拷貝進temMin中
    GetWindowRect(ClientRect);
    if(tempMin.PtInRect(point)))//滑鼠在最小化按鈕移動時,則繪製另外一幅
}
//處理WM_NCLBUTTONDOWN訊息
OnNcLButtonDown(nHitTest, point)
{  
     switch(m_ButtonState)//在MouseMove訊息時有記錄,
     {
        case bsClose: //關閉視窗
         case bsIni:   //還原視窗到初始大小和位置
         case bsMin:   //最小化
         case bsMax:   //最大化
         case bsRes:   //還原
                         //以上都是呼叫MoveWindow()、SetWindowPos()、ShowWindow()之類的
     }

}

三、資料分析

StretchBlt(HDC hdcDest, int x , int y , int width , int height)
//x座標,--->   y座標,向下, 寬度 , 高度
CRect(int l,int t,int r,int b); //具體含義是left , top , right , bottom
tempMin.CopyRect(CRect(m_MinRect.left+ ClientRect.left,//一般為m_MinRect
ClientRect.top+m_MinRect.top,//一般為m_MinRect.top
m_MinRect.right+m_MinRect.left+ ClientRect.left,//一般為m_MinRect.left(左)+m_MinRect.right(此為寬)+0
m_MinRect.bottom+m_MinRect.top+ClientRect.top)//同上
);

四、總結

       主要是在非客戶區,mousemove訊息判斷是否在上面,在上面的,就載入過另外一幅圖片,當然移開的時候,沒有做處理,這是一個沒做好的地方。

       還有就是響應NCLeftButtonDown訊息,做相應的處理。