国产黄色免费网站,人人干人人干人人干,免费大黄网站在线看,国产情侣一区二区三区,99精品国产福利免费一区二区,国产亚洲成归v人片在线观看,伊人88

2023信創(chuàng)獨角獸企業(yè)100強
全世界各行各業(yè)聯(lián)合起來,internet一定要實現(xiàn)!

C++ 中園形三角形按鈕的實現(xiàn)

2004-02-14 eNet&Ciweek

  由于Window 95增加了對窗口區(qū)域概念的支持,使得窗口區(qū)域就是所定義的窗口看上去的形狀,窗口區(qū)域作為窗口的實際邊界區(qū)域,這樣窗口區(qū)域不僅定義了窗口的可畫區(qū)域,而且定義了窗口下隱含區(qū)域和響應(yīng)鼠標擊鍵事件的響應(yīng)窗口區(qū)域?! ?

  ---- 按鈕的各種形狀是在運行時設(shè)置的而不是在設(shè)計時設(shè)置。設(shè)計時按鈕的形狀仍然是長方形或正方形。   

  ---- 按鈕形狀的設(shè)計分成兩個步驟。   

  ---- 第一步創(chuàng)建按鈕的外形,即定義窗口區(qū)域。使用API的區(qū)域創(chuàng)建函數(shù)就可達到目的。區(qū)域創(chuàng)建函數(shù)很多,主要有CreateEllipticRgn 、CreatePolygonRgn、 CreateRectRgn、 CreateRoundRectRgn,用于創(chuàng)建不同類型的區(qū)域顯示。如果需要一個復(fù)雜區(qū)域形狀,那么可以分別使用不同的區(qū)域函數(shù)創(chuàng)建不同的區(qū)域,然后調(diào)用CombineRgn API函數(shù)把它們組合起來。所以說,不僅可以創(chuàng)建出園形、三角形的按鈕,而且還可以創(chuàng)建出其它各種形狀的按鈕?! ?

  ---- 第二步將區(qū)域顯示應(yīng)用到窗口上。一旦使用區(qū)域函數(shù)創(chuàng)建了一個新的區(qū)域顯示,就可以使用SetWindowsRgn函數(shù)將這個區(qū)域應(yīng)用到窗口上。

  ---- 下面給出園形、三角形按鈕實現(xiàn)的具體代碼。為了直觀顯示效果,將窗體的背景色設(shè)置為了黑色(Color設(shè)置為clBtnText),并將兩個按鈕的Cursor設(shè)置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ù),要使按鈕為園形在設(shè)計時該按鈕應(yīng)設(shè)計為正方形。另外區(qū)域是以按鈕坐標的形式定義的,而不是用屏幕坐標。(0,0)點是按鈕的最左上角,而(寬,高)點是按鈕的最右下角。   

  ---- 應(yīng)該注意的是,一旦將區(qū)域句柄賦給按鈕,就不能再對區(qū)域句柄作任何操作。如果將區(qū)域句柄賦給按鈕后,修改或刪除這個句柄將導(dǎo)致程序崩潰?! ?

  ---- 光標只在園形和三角形區(qū)域內(nèi)變?yōu)閏rCross形狀。為了使按鈕美觀可以使用BitBtn或SpeedButton按鈕,在按鈕上附上位圖。有關(guān)API區(qū)域函數(shù)的使用請參看Win32SDK.hlp幫助文件。

相關(guān)頻道: eNews

您對本文或本站有任何意見,請在下方提交,謝謝!

投稿信箱:tougao@enet16.com