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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

MFC中GDI之CPen(画笔)

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

CPen 畫筆

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

CPen(int nPenStyle, int nWidth, COLORREF crColor) 在構(gòu)造函數(shù)中創(chuàng)建一個(gè)畫筆
BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor) 根據(jù)指定數(shù)值創(chuàng)建一個(gè)畫筆
BOOL CreatePenIndirect(LPLOGPEN lpLogPen) 根據(jù)LOGPEN結(jié)構(gòu)體創(chuàng)建一個(gè)畫筆
static CPen* FromHandle(HPEN hPen) 將HPEN句柄轉(zhuǎn)化為CPen對象
operator HPEN() const 從CPen對象中獲取HPEN句柄
int GetLogPen(LOGPEN* pLogPen) 獲取畫筆的顏色、粗度等屬性信息
/* Pen Styles */
#define PS_SOLID            0       /* 實(shí)線     */
#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 是標(biāo)準(zhǔn)客戶區(qū)繪畫。刷新不消失。CPaintDC中封裝了BeginPaint(),EndPaint()
    // 而CClientDC 是臨時(shí)客戶區(qū)繪圖,刷新會(huì)消失。封裝了GetDC(),ReleaseDC()
    CPaintDC dc(this); // device context for painting

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

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

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

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

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

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

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

View Code

結(jié)果:

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

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。