在
vc下有時需要製作個性化的視窗介面,用介面庫又比較繁瑣,而且有些介面庫還必須收費才能使用,這裡我提供乙個簡單且有效的製作個性化介面的方法。
由嚮導生成乙個基於對話方塊的應用程式框架,把對話方塊模板的
border
屬性改為
none
,也就是沒有邊框和標題欄。從
cdialog
派生乙個類,命名為
ccustomdlg
。首先我們要建立不規則視窗的介面,要用到以下函式,
int setwindowrgn( hrgn hrgn, bool bredraw );
這個函式用來設定應用程式視窗的視窗區域,在本文的例子中我們使用
createroundrectrgn
建立乙個圓角矩形區域,然後再呼叫
setwindowrgn
設定視窗區域。
createroundrectrgn
的原型如下:
bool createroundrectrgn( int x1, int y1, int x2, int y2, int x3, int y3 );
具體**如下:
bool ccustomdlgdlg::oninitdialog()
因為對話方塊已經設定了
none border
屬性,所以
getclientrect(&rectframe)
得到的就為對話方塊模板整個視窗大小,然後再建立圓角矩形,注意建立圓角矩形的時候要注意第三,第四個引數都要加
1(後面會講原因)。
接下來,對映
wm_erasebkgnd
訊息來改變背景
,需手工加入
on_wm_erasebkgnd()
,同時不要忘了在標頭檔案中加入
afx_msg bool onerasebkgnd(cdc *pdc);
編輯處理函式:
bool ccustomdlgdlg::onerasebkgnd(cdc *pdc)
pdc->roundrect(&rect, cpoint(30, 30));
預設是用黑筆畫矩形,到這裡應該知道上面的第三,第四個引數為什麼要加
1了,因為預設黑筆的寬度就為
1個畫素單位,
roundrect
實際畫出的矩形的長度和寬度都多
1,大家可能會想,為什麼不用
rectframe.left減1
,和rectframe.top減1
這種方法呢?它也會使長度和寬度都多
1啊,問題在於
rectframe.left, rectframe.top都為0
,減1就都為-1,用
createroundrectrgn
建立區域時值又會變為
0,這樣長度和寬度還是沒有增加。
再接下來,加入一
cbrush
型別的成員變數
m_brbrush
,在建構函式中加入
m_brbrush.createsolidbrush(rgb(239,243,255));
用classwizard
對映wm_ctlcolor訊息,
並編輯**。作用是改變對話方塊中控制項的顏色以使對話方塊背景相符
,不過不能用此法改變按鈕的顏色,按鈕用自繪來改變顏色,這方面內容本文就不介紹了,網上有很多此類文章。
hbrush ccustomdlgdlg::onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor)
// todo: return a different brush if the default is not desired
return hbr; }
接著,對映
wm_nchittest
訊息,需手工加入,
on_wm_nchittest()
,同時不要忘了在標頭檔案加入
afx_msg uint onnchittest(cpoint point);
編輯處理函式:
uint ccustomdlgdlg::onnchittest(cpoint point)
這樣之後就可以用滑鼠拖動對話方塊了。
相信通過本文的講解之後,大家可以做出自己需要的個性化介面了。有問題可以聯絡我哦
,email:
製作GRUB個性化引導介面
安裝imagemagick,修改時要用到 yum install imagemagick要求它的解析度是640 480 因為grub只支援這個解析度的 將格式轉成xpm 因為grub只支援這個格式的 並且該xpm的色深必須是14,此要求用乙個命令就可以完成 我們先要原先的備份 gzip 9 spla...
VC定製個性化的MessageBox解決方法
相信學過vc的人都知道messagebox 函式的用法 int messagebox hwnd hwnd,handle to owner window lpctstr lptext,text in message box lpctstr lpcaption,message box title uin...
完全定製個性化linux安裝介面
最近定製了乙個ubuntu的安裝介面,感覺比較有意思,寫上來,有興趣的朋友可以實踐一下.先介紹一下grub和isolinux,以及一些開機引導程式.1 bios basic input output system,一般的情況下是歸結於firmware這一類的.這裡是為了連線通順,就簡單的說一下bio...