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

首頁 > 學院 > 開發設計 > 正文

C++ 中園形三角形按鈕的實現

2019-11-17 05:10:44
字體:
來源:轉載
供稿:網友

  由于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幫助文件。 更多文章 更多內容請看C/C++技術專題專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河北省| 双流县| 达拉特旗| 综艺| 南乐县| 高唐县| 台山市| 静乐县| 乐亭县| 太仆寺旗| 无锡市| 荆州市| 邓州市| 双峰县| 全南县| 绥芬河市| 本溪市| 公安县| 富平县| 出国| 菏泽市| 蓬溪县| 桂东县| 邻水| 永嘉县| 宣汉县| 临武县| 江阴市| 平凉市| 宿迁市| 浦县| 旺苍县| 临泉县| 宁都县| 海城市| 镇远县| 长子县| 湘阴县| 工布江达县| 樟树市| 马山县|