我們使用過很多的軟件, 給我們留下印象很深的是那些界面漂亮且迷人的軟件, 國外的軟件象QickTime,國產的象金山詞霸等,它們的軟件界面設計風格都有獨特之處。本人跟據自已的經驗和大家探討一下軟件的漂亮界面實現的原理並提供DEMO程序。
一、漂亮界面實現的原理
用圖象元素自繪窗口標題樣欄,邊框,系統按鈕(最大化、最小化、關閉按鈕)還有按窗口中的控件。圖象當然是美工畫的,但要你教美工怎麼去畫,是不是不能理解? ,呆會我會告訴你你如何去教美工畫.請先仔細看下圖。
明白了吧,被紅線抱括的部分都是要畫的圖象。畫得好不好會直接影響你的軟件界面。
二、原理說玩了,來說一下實現的基本知識
1、VC軟件繪圖技術:
CBitmap* pBitmap = new CBitmap;
BITMAP BmpInfo;
CBitmap* pOldBitmap;
CDC* pDisplayMemDC=new CDC;
pDisplayMemDC->CreateCompatibleDC(pDC);
pBitmap->LoadBitmap(IDB_TITLE_LEFT);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pBitmap->GetBitmap(&BmpInfo);
// x,y為繪圖位置 ,必要時此語句要有For(..;..;..)控制
pDC->BitBlt(x,y, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
pDisplayMemDC->SelectObject(pOldBitmap);
pBitmap->DeleteObject();
ReleaseDC(pDisplayMemDC);//記得執行以下的語句
delete pDisplayMemDC;
delete pBitmap;
2、坐標的概念:點、窗口坐標和屏幕坐標及轉換,很重要!如不清楚請先復習相關知識。
下圖是我寫在一個界面,就是基於上述原理實現的:
下面介紹軟件如何實現的:
①、重載對話框的消息函數:
void OnNcLButtonDown(UINT nHitTest, CPoint point);
//單擊標題欄時是響應 void OnNcMouseMove(UINT nHitTest, CPoint point);
//Mous 在標題移動時響應 LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
②、添加關鍵成員函數為:BOOL DrawTitleBar(CDC *pDC)
③、添加完消息涵數後,在.cpp中實現它們的代碼(點擊查看代碼附件):
好了運行你的序程,即可出現漂亮的界面。說明在設計對話框時最好只選上Title Bars,其它不要.消息函數要手動添加。只本程序是在VC++6.0 +WinXP環境下完成的。
經過實踐證明,僅僅畫一個窗口很容易,多窗口程序軟件實現統一風格很難。如若有機會的話,我會和大家繼續探討如何將設計好的漂亮窗口子類化,讓程序所有的窗口有統一風格,美化窗口的其它控件並可自動隨窗口改變而調整大小。我想那才是我們大家關心的。對不?