关于 GDI PS_INSIDEFRAME

“PS_INSIDEFRAME  创建一支画笔,该画笔在Windows GDI输出函数所产生的封闭形状的框架内画线,此输出函数指定一个限定矩形(例如,Ellipse,Rectangle,RoundRect,Pie和Chord成员函数),当此风格用于没有指定限定矩形的Windows GDI输出函数(例如LineTo成员函数)时,此画笔的绘制区域不受框架的限制。”

 

关于 PS_INSIDEFRAME 这个话题,google了一下,发现问的人很多,回答得人都是用MSDN原话解释,看MSDN谁都会,和没说一样。

亲自实践了一下原来是用来指示当画笔宽度大于1时候,如何在有边的封闭图形的边界线上分布:

1)当画笔宽度为1时, 使用PS_INSIDEFRAME不使用没有区别

2)当画笔宽度大于1时,使用PS_INSIDEFRAME会导致边缘变宽,宽度从矩形边缘向内增大。

3)当画笔宽度大于1时,如果不使用PS_INSIDEFRAME会导致边缘变宽,从边缘向内侧和外侧同时加宽;如果是偶数宽度,会导致向左或上扩展比向右和下多一个像素;如果宽度是2;只向左和上扩展1个像素

 

4像素宽的Pen的效果如图所示: 

附代码如下:

 

HPEN hPen1;

HPEN hPen2;

HPEN hPen3;

HBRUSH hBrush1;

 

void CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CView::OnCreate(lpCreateStruct) == -1)

return -1; 

 

 

HDC hDC = ::GetDC( m_hWnd ); 1

hPen1 = ::CreatePen( PS_DASH,1,0x000000);//1像素宽度的虚线画笔,用于标记举行的实际边缘

hPen3 = ::CreatePen( PS_SOLID,8,0xff0000);

hPen2 = ::CreatePen( PS_SOLID|PS_INSIDEFRAME,8,0xff0000);

LOGBRUSH br;

br.lbColor = 0x000000;

br.lbStyle = BS_HOLLOW;

br.lbHatch = 0;

hBrush1 = CreateBrushIndirect(&br); //空心画刷,用来防止两个矩形的填充区域相互遮盖

    ::ReleaseDC( m_hWnd,hDC );

void OnDraw( CDC* pDC )

{

HDC hdc = pDC->m_hDC;

::SelectObject(hdc,hBrush1);

::SelectObject( hdc,hPen3 );

::Rectangle(hdc,200,200,300,300);

::SelectObject( hdc,hPen2 );

::Rectangle(hdc,400,200,500,300);

::SelectObject(hdc,hPen1);

::Rectangle(hdc,200,200,300,300);

::Rectangle(hdc,400,200,500,300);

::TextOut( hdc,200,320,"PS_INSIDEFRAME",strlen("PS_INSIDEFRAME")); 

::TextOut( hdc,4000,320,"NON-PS_INSIDEFRAME",strlen("NON-PS_INSIDEFRAME"));  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值