国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

C++Builder中"異形"按鈕的實現(xiàn)

2019-11-17 05:20:25
字體:
供稿:網(wǎng)友

  “異形”按鈕非常有趣,就是按鈕的外形不是標準的長方形或正方形,而有一絲“叛逆”——“異形”嘛,是不是?怎樣才能實現(xiàn)“異形”按鈕呢?由于Window 95增加了對窗口區(qū)域概念的支持,使得窗口區(qū)域就是所定義的窗口看上去的外形,窗口區(qū)域作為窗口的實際邊界區(qū)域,這樣窗口區(qū)域不僅定義了窗口的可畫區(qū)域,而且定義了窗口下隱含區(qū)域和響應鼠標擊鍵事件的響應窗口區(qū)域。
   按鈕的各種外形是在運行時設置的而不是在設計時設置。設計時按鈕的外形仍然是長方形或正方形。
   按鈕外形的設計分成兩個步驟:
   第一步創(chuàng)建按鈕的外形,即定義窗口區(qū)域。使用API的區(qū)域創(chuàng)建函數(shù)就可達到目的。區(qū)域創(chuàng)建函數(shù)很多,主要有CreateEllipticRgn 、CreatePolygonRgn、 CreateRectRgn、 CreateRoundRectRgn,用于創(chuàng)建不同類型的區(qū)域顯示。假如需要一個復雜區(qū)域外形,那么可以分別使用不同的區(qū)域函數(shù)創(chuàng)建不同的區(qū)域,然后調(diào)用CombineRgn API函數(shù)把它們組合起來。所以說,不僅可以創(chuàng)建出圓形、三角形的按鈕,而且還可以創(chuàng)建出其它各種外形的按鈕。
   第二步將區(qū)域顯示應用到窗口上。一旦使用區(qū)域函數(shù)創(chuàng)建了一個新的區(qū)域顯示,就可以使用SetWindowsRgn函數(shù)將這個區(qū)域應用到窗口上。
   下面給出圓形、三角形按鈕實現(xiàn)的具體代碼。為了直觀顯示效果,將窗體的背景色設置為了黑色(Color設置為clBTnText),并將兩個按鈕的Cursor設置crCross。在窗體放置兩個Button按鈕,分別定義為RButton、TButton。實現(xiàn)窗口區(qū)域的最佳時機是在窗體首次創(chuàng)建時,所以將處理程序放在OnCreate事件中。
   void __fastcall TForm1::FormCreate(TObject *Sender)
   {
   //創(chuàng)建園形按鈕
   HRGN hRgnR = CreateEllipticRgn(0,0,RButton→
   Width,RButton→Height);
   SetWindowRgn(RButton→Handle,hRgnR,TRUE);
   //創(chuàng)建三角形按鈕
   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];
   上面的代碼在按鈕的邊界內(nèi)分別創(chuàng)建了一個園形區(qū)域和一個三角形區(qū)域,然后作為新的窗口區(qū)域把它賦給各自的按鈕。在創(chuàng)建園形按鈕時使用了橢圓形區(qū)域創(chuàng)建函數(shù),要使按鈕為園形在設計時該按鈕應設計為正方形。另外區(qū)域是以按鈕坐標的形式定義的,而不是用屏幕坐標。(0,0)點是按鈕的最左上角,而(寬,高)點是按鈕的最右下角。
   應該注重的是,一旦將區(qū)域句柄賦給按鈕,就不能再對區(qū)域句柄作任何操作。假如將區(qū)域句柄賦給按鈕后,修改或刪除這個句柄將導致程序崩潰,所以……千萬不要這樣做,否則,你的程序雖然花哨了一些,但卻是“拾了芝麻丟了西瓜”而因小失大!說到這里,我想,程序設計首先要注重“穩(wěn)定性”,至于其它的都次要。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 清涧县| 华蓥市| 呼和浩特市| 大丰市| 云阳县| 陆良县| 济阳县| 平乐县| 宝清县| 旺苍县| 桓台县| 余江县| 邻水| 万州区| 镇安县| 天峻县| 文化| 株洲县| 浏阳市| 台东市| 大石桥市| 木兰县| 石渠县| 沈阳市| 宁南县| 连南| 喀什市| 宿松县| 安吉县| 水富县| 蚌埠市| 涟水县| 灵宝市| 饶平县| 金塔县| 沾益县| 潼关县| 开鲁县| 子洲县| 延长县| 葵青区|