【介面】VC 6 MFC讓視窗輕而易舉變漂亮
阿新 • • 發佈:2019-02-05
一、介面分析
主要是把資料放到合適的位置,並且獲取視窗的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訊息,做相應的處理。