1. 程式人生 > >winForm圓角矩形及C++builderForm圓角設計

winForm圓角矩形及C++builderForm圓角設計

   就現在來說,使用C++builder開發windows程式設計的人數逐漸變少,由於公司堅持使用這個IDE工具,我也只好使用他。最近看見公司客戶端登入介面感覺十分不爽,準備重做,決定參考qq介面,做出圓角矩形的,於是乎就在論壇裡面找啊找,功夫不負有心人,我終於總結出一套在C++builder這個IDE平臺上執行的程式碼。
   廢話不說,先看效果。![這裡寫圖片描述](https://img-blog.csdn.net/20170807155038987?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvam9obmxhb3hpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
   如果此圖是大家想要的效果,那麼往下看。本篇文章我們會實現Form和Panel的圓角設計。
   第一步:設定Form屬性BordStyle為None;
   第二步:在FormCreate的事件中放入如下程式碼;
   void __fastcall TForm1::FormCreat(TObject*Sender)       
   {
        HRGN  hr;
        hr = CreateRoundRectRgn(0,0,Width, Height ,20,20);
        SetWindowRgn(this->Handle,hr,true);
   }
   上面的程式碼並不能保證圓角矩形部分有邊框,如果需要邊框,還需要在FormPaint中加入如下程式碼:
   void __fastcall TForm1::FormPaint(TObject *Sender)
    {

        HDC DC;
        HPEN Pen,OldPen;
        HBRUSH OldBrush;

        DC = GetWindowDC(this->Handle);
        Pen = CreatePen(PS_SOLID, 1, clGray);
        OldPen = (HPEN)SelectObject(DC, Pen); //載入自定義的畫筆,儲存原畫筆
        OldBrush =(HBRUSH)SelectObject(DC, GetStockObject(NULL_BRUSH));//載入空畫刷,儲存原畫刷

        RoundRect(DC, 0, 0, Width -2, Height -2,21,21); //畫邊框
        SelectObject(DC,OldBrush);//載入原畫刷
        SelectObject(DC,OldPen); // 載入原畫筆

        DeleteObject(Pen);
        ReleaseDC(Handle, DC);
    }
    至此,form部分設定圓角矩形已經完成,接下來是Panel部分。
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        HRGN  hr;
        hr = CreateRoundRectRgn(0,0, Panel1->Width, Panel1->Height ,4,4);
        SetWindowRgn(Panel1->Handle,hr,true);
        //Panel1->Color = clRed;
    }
    好了,小弟需要分享的思路到此已經完成。