[推薦] C++ Builder 中圓形、三角形按鈕的實現 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
C Builder 中圓形、三角形按鈕的實現中國大陸合肥電子工程學院計算中心 李 強 資料來源: http://www2.ccw.com.cn/tips/9909/092103_03.asp ---- 由於Window 95增加了對窗口區域概念的支持,使得窗口區域就是所定義的窗口看上去的形狀,窗口區域作為窗口的實際邊界區域,這樣窗口區域不僅定義了窗口的可畫區域,而且定義了窗口下隱含區域和響應鼠標擊鍵事件的響應窗口區域。 ---- 按鈕的各種形狀是在運行時設置的而不是在設計時設置。設計時按鈕的形狀仍然是長方形或正方形。 ---- 按鈕形狀的設計分成兩個步驟。 ---- 第一步創建按鈕的外形,即定義窗口區域。使用API的區域創建函數就可達到目的。區域創建函數很多,主要有CreateEllipticRgn 、CreatePolygonRgn、 CreateRectRgn、 CreateRoundRectRgn,用於創建不同類型的區域顯示。如果需要一個復雜區域形狀,那麼可以分別使用不同的區域函數創建不同的區域,然後調用CombineRgn API函數把它們組合起來。所以說,不僅可以創建出園形、三角形的按鈕,而且還可以創建出其它各種形狀的按鈕。 ---- 第二步將區域顯示應用到窗口上。一旦使用區域函數創建了一個新的區域顯示,就可以使用SetWindowsRgn函數將這個區域應用到窗口上。 ---- 下面給出園形、三角形按鈕實現的具體代碼。為了直觀顯示效果,將窗體的背景色設置為了黑色(Color設置為clBtnText),並將兩個按鈕的Cursor設置crCross。在窗體放置兩個Button按鈕,分別定義為RButton、TButton。實現窗口區域的最佳時機是在窗體首次創建時,所以將處理程序放在OnCreate事件中。void __fastcall TForm1::FormCreate(TObject *Sender) { //創建園形按鈕 HRGN hRgnR = CreateEllipticRgn(0,0,RButton-> Width,RButton->Height); SetWindowRgn(RButton->Handle,hRgnR,TRUE); //創建三角形按鈕 TrPoint[0].x=TButton->Width/2; TrPoint[0].y=0; TrPoint[1].x=0; TrPoint[1].y=TButton->Height; TrPoint[2].x=TButton->Width; TrPoint[2].y=TButton->Height; HRGN hRgnT = CreatePolygonRgn(TrPoint,3,ALTERNATE); SetWindowRgn(TButton->Handle,hRgnT,TRUE); }其中TrPoint在Unit.h頭文件中定義如下: private: // User declarations POINT TrPoint[3]; ---- 上面的代碼在按鈕的邊界內分別創建了一個園形區域和一個三角形區域,然後作為新的窗口區域把它賦給各自的按鈕。在創建園形按鈕時使用了橢園形區域創建函數,要使按鈕為園形在設計時該按鈕應設計為正方形。另外區域是以按鈕坐標的形式定義的,而不是用屏幕坐標。(0,0)點是按鈕的最左上角,而(寬,高)點是按鈕的最右下角。 ---- 應該注意的是,一旦將區域句柄賦給按鈕,就不能再對區域句柄作任何操作。如果將區域句柄賦給按鈕後,修改或刪除這個句柄將導致程序崩潰。 ---- ---- 光標只在園形和三角形區域內變為crCross形狀。為了使按鈕美觀可以使用BitBtn或SpeedButton按鈕,在按鈕上附上位圖。有關API區域函數的使用請參看Win32SDK.hlp幫助文件。 ________________________________________________________________________ 時間就是金錢---[ 發問前請先找找舊文章] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |