日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

MFC中GDI之CPen(画笔)

發布時間:2024/8/26 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 MFC中GDI之CPen(画笔) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CPen 畫筆

由CGdiObject類派生,用于修飾線條的顏色、寬度和線型(實線、虛線、點劃線等)。

CPen(int nPenStyle, int nWidth, COLORREF crColor) 在構造函數中創建一個畫筆
BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor) 根據指定數值創建一個畫筆
BOOL CreatePenIndirect(LPLOGPEN lpLogPen) 根據LOGPEN結構體創建一個畫筆
static CPen* FromHandle(HPEN hPen) 將HPEN句柄轉化為CPen對象
operator HPEN() const 從CPen對象中獲取HPEN句柄
int GetLogPen(LOGPEN* pLogPen) 獲取畫筆的顏色、粗度等屬性信息
/* Pen Styles */
#define PS_SOLID            0       /* 實線     */
#define PS_DASH             1       /* -------  */
#define PS_DOT              2       /* .......  */
#define PS_DASHDOT          3       /* _._._._  */
#define PS_DASHDOTDOT       4       /* _.._.._  */
#define PS_NULL             5       /* 無邊框    */


/* Logical Pen */
typedef struct tagLOGPEN
  {
    UINT        lopnStyle;
    POINT       lopnWidth;
    COLORREF    lopnColor;
  } LOGPEN, *PLOGPEN;

例子:

void CtestDialogDlg::OnPaint()
{
    // CPaintDC 是標準客戶區繪畫。刷新不消失。CPaintDC中封裝了BeginPaint(),EndPaint()
    // 而CClientDC 是臨時客戶區繪圖,刷新會消失。封裝了GetDC(),ReleaseDC()
    CPaintDC dc(this); // device context for painting

    //默認畫筆是黑色實線,寬度為1
    dc.MoveTo(20, 20);
    dc.LineTo(120, 20);

    //通過一個構造函數創建一個畫筆
    CPen p1(PS_SOLID, 5, RGB(255, 0, 0));
    CPen* pOldPen = dc.SelectObject(&p1);
    dc.MoveTo(20, 30);
    dc.LineTo(120, 30);

    //通過CreatePen 創建一個畫筆
    CPen p2;
    p2.CreatePen(PS_DASHDOT, 1, RGB(0, 0, 255));//注意,虛線、點線等,只有在寬度為1時,才有效
    dc.SelectObject(&p2);
    dc.MoveTo(20, 40);
    dc.LineTo(120, 40);

    //通過默認畫筆畫一個矩形
    dc.SelectObject(pOldPen);
    dc.Rectangle(140, 20, 240, 100);
    dc.RoundRect(250, 20, 350, 100, 20, 20);

    //畫一個虛線邊框的矩形
    dc.SelectObject(&p2);
    dc.Rectangle(20, 50, 110, 100);
    //畫一個無邊框的矩形
    CPen p3(PS_NULL, 1, RGB(0, 0, 0));
    dc.SelectObject(&p3);
    dc.Rectangle(20, 110, 120, 200);
    //等價的無邊框的填充方法
    dc.FillSolidRect(140, 110, 100, 90, RGB(255, 255, 255));

    /*    
    調用FillSolidRect時,以前用SetBkColor設置的背景色,被設置為clr指定的顏色。
    就是說你的背景色已經變成了FillSolidRect設置的顏色了。
    也許正常是看不出來的。
    但當以再用畫筆畫PS_DOT類的線時,
    你會發現你虛線原來的空白地方變成了FillSolidRect設置的顏色了。
    用FillSolidRect時一定要注意。
    可以用CDC::FillRect()
    CBrush brush;
    brush.CreateSolidBrush(RGB(0,100,255));
    dc.FillRect(&rect,&brush);
    */
    dc.SelectObject(&p2);//選擇虛線,FillSolidRect的顏色會是虛線的斷的顏色
    dc.FillSolidRect(20, 210, 100, 20, RGB(255, 0, 0));
    dc.MoveTo(20, 240);
    dc.LineTo(120, 240);

    //選擇回原來的畫筆
    dc.SelectObject(pOldPen);
}

View Code

結果:

常記溪亭日暮,沉醉不知歸路。興盡晚回舟,誤入藕花深處。爭渡,爭渡,驚起一灘鷗鷺。

昨夜雨疏風驟,濃睡不消殘酒。試問卷簾人,卻道海棠依舊。知否?知否?應是綠肥紅瘦。

總結

以上是生活随笔為你收集整理的MFC中GDI之CPen(画笔)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。