如何创建 几何画笔

创建几何画笔时出现“需要的资源无法得到”警告对话框。

原因: 创建几何画笔时候总是出现“需要的资源无法得到”的警告信息,发现原因是,设置了PS_USERSTYLE,  并且没有设置CPen( intnPenStyle, intnWidth, const LOGBRUSH*pLogBrush, intnStyleCount = 0, const DWORD*lpStyle = NULL );
的后两个参数。 或者, 没有设置PS_USERSTYLE, 而设置了上述函数的后两个参数。

创建方形画笔的一个示例:

  1. DWORD penFlags=PS_GEOMETRIC | PS_ENDCAP_SQUARE | PS_JOIN_BEVEL;  
  2. LOGBRUSH lb;  
  3. lb.lbStyle=BS_SOLID;  
  4. lb.lbColor=RGB(100, 200, 200);  
  5. lb.lbHatch=HS_VERTICAL;  
  6. CPen tmpPen(penFlags, 20, &lb);  
       DWORD penFlags=PS_GEOMETRIC | PS_ENDCAP_SQUARE | PS_JOIN_BEVEL;
        LOGBRUSH lb;
        lb.lbStyle=BS_SOLID;
        lb.lbColor=RGB(100, 200, 200);
        lb.lbHatch=HS_VERTICAL;
        CPen tmpPen(penFlags, 20, &lb);


方形画笔与圆形画笔的不同:

  1. // 设置逻辑画刷  
  2. LOGBRUSH logBrush;  
  3. logBrush.lbStyle = BS_SOLID;  
  4. logBrush.lbColor = RGB(10, 20, 100);  
  5. logBrush.lbHatch = HS_CROSS;  
  6. int x1 = 100, y = 100, x2 = 400;      
  7. int i = 0;  
  8. // 使用方形画笔绘制各种样式的直线  
  9. for (i = 0; i < 5; ++i)  
  10. {  
  11.     CPen pen(i | PS_GEOMETRIC | PS_ENDCAP_SQUARE | PS_JOIN_BEVEL, 20, &logBrush);         
  12.     pDC->SelectObject(&pen);  
  13.     pDC->MoveTo(x1, y + i * 40);  
  14.     pDC->LineTo(x2, y + i * 40);  
  15.     pen.DeleteObject();  
  16. }  
  17.   
  18. x1 = 500, x2 = 800;  
  19. // 使用圆形画笔创建各种样式的直线  
  20. for (i = 0; i < 5; ++i)  
  21. {  
  22.     CPen pen(i | PS_GEOMETRIC | PS_ENDCAP_ROUND | PS_JOIN_BEVEL, 20, &logBrush);          
  23.     pDC->SelectObject(&pen);  
  24.     pDC->MoveTo(x1, y + i * 40);  
  25.     pDC->LineTo(x2, y + i * 40);  
  26.     pen.DeleteObject();  
  27. }  
   // 设置逻辑画刷
    LOGBRUSH logBrush;
    logBrush.lbStyle = BS_SOLID;
    logBrush.lbColor = RGB(10, 20, 100);
    logBrush.lbHatch = HS_CROSS;
    int x1 = 100, y = 100, x2 = 400;    
    int i = 0;
    // 使用方形画笔绘制各种样式的直线
    for (i = 0; i < 5; ++i)
    {
        CPen pen(i | PS_GEOMETRIC | PS_ENDCAP_SQUARE | PS_JOIN_BEVEL, 20, &logBrush);       
        pDC->SelectObject(&pen);
        pDC->MoveTo(x1, y + i * 40);
        pDC->LineTo(x2, y + i * 40);
        pen.DeleteObject();
    }

    x1 = 500, x2 = 800;
    // 使用圆形画笔创建各种样式的直线
    for (i = 0; i < 5; ++i)
    {
        CPen pen(i | PS_GEOMETRIC | PS_ENDCAP_ROUND | PS_JOIN_BEVEL, 20, &logBrush);        
        pDC->SelectObject(&pen);
        pDC->MoveTo(x1, y + i * 40);
        pDC->LineTo(x2, y + i * 40);
        pen.DeleteObject();
    }



运行结果:

创建几何画笔时出现“需要的资源无法得到”警告对话框。

原因: 创建几何画笔时候总是出现“需要的资源无法得到”的警告信息,发现原因是,设置了PS_USERSTYLE,  并且没有设置CPen( intnPenStyle, intnWidth, const LOGBRUSH*pLogBrush, intnStyleCount = 0, const DWORD*lpStyle = NULL );
的后两个参数。 或者, 没有设置PS_USERSTYLE, 而设置了上述函数的后两个参数。

创建方形画笔的一个示例:

  1. DWORD penFlags=PS_GEOMETRIC | PS_ENDCAP_SQUARE | PS_JOIN_BEVEL;  
  2. LOGBRUSH lb;  
  3. lb.lbStyle=BS_SOLID;  
  4. lb.lbColor=RGB(100, 200, 200);  
  5. lb.lbHatch=HS_VERTICAL;  
  6. CPen tmpPen(penFlags, 20, &lb);  
       DWORD penFlags=PS_GEOMETRIC | PS_ENDCAP_SQUARE | PS_JOIN_BEVEL;
        LOGBRUSH lb;
        lb.lbStyle=BS_SOLID;
        lb.lbColor=RGB(100, 200, 200);
        lb.lbHatch=HS_VERTICAL;
        CPen tmpPen(penFlags, 20, &lb);


方形画笔与圆形画笔的不同:

  1. // 设置逻辑画刷  
  2. LOGBRUSH logBrush;  
  3. logBrush.lbStyle = BS_SOLID;  
  4. logBrush.lbColor = RGB(10, 20, 100);  
  5. logBrush.lbHatch = HS_CROSS;  
  6. int x1 = 100, y = 100, x2 = 400;      
  7. int i = 0;  
  8. // 使用方形画笔绘制各种样式的直线  
  9. for (i = 0; i < 5; ++i)  
  10. {  
  11.     CPen pen(i | PS_GEOMETRIC | PS_ENDCAP_SQUARE | PS_JOIN_BEVEL, 20, &logBrush);         
  12.     pDC->SelectObject(&pen);  
  13.     pDC->MoveTo(x1, y + i * 40);  
  14.     pDC->LineTo(x2, y + i * 40);  
  15.     pen.DeleteObject();  
  16. }  
  17.   
  18. x1 = 500, x2 = 800;  
  19. // 使用圆形画笔创建各种样式的直线  
  20. for (i = 0; i < 5; ++i)  
  21. {  
  22.     CPen pen(i | PS_GEOMETRIC | PS_ENDCAP_ROUND | PS_JOIN_BEVEL, 20, &logBrush);          
  23.     pDC->SelectObject(&pen);  
  24.     pDC->MoveTo(x1, y + i * 40);  
  25.     pDC->LineTo(x2, y + i * 40);  
  26.     pen.DeleteObject();  
  27. }  
   // 设置逻辑画刷
    LOGBRUSH logBrush;
    logBrush.lbStyle = BS_SOLID;
    logBrush.lbColor = RGB(10, 20, 100);
    logBrush.lbHatch = HS_CROSS;
    int x1 = 100, y = 100, x2 = 400;    
    int i = 0;
    // 使用方形画笔绘制各种样式的直线
    for (i = 0; i < 5; ++i)
    {
        CPen pen(i | PS_GEOMETRIC | PS_ENDCAP_SQUARE | PS_JOIN_BEVEL, 20, &logBrush);       
        pDC->SelectObject(&pen);
        pDC->MoveTo(x1, y + i * 40);
        pDC->LineTo(x2, y + i * 40);
        pen.DeleteObject();
    }

    x1 = 500, x2 = 800;
    // 使用圆形画笔创建各种样式的直线
    for (i = 0; i < 5; ++i)
    {
        CPen pen(i | PS_GEOMETRIC | PS_ENDCAP_ROUND | PS_JOIN_BEVEL, 20, &logBrush);        
        pDC->SelectObject(&pen);
        pDC->MoveTo(x1, y + i * 40);
        pDC->LineTo(x2, y + i * 40);
        pen.DeleteObject();
    }



运行结果:

猜你喜欢

转载自blog.csdn.net/wyq429703159/article/details/78465779