还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

mfc 画圆角矩形

来源:清泛原创     2016-05-25 09:33:49    人气:     我有话说( 0 人参与)

先看效果:画圆角矩形的函数:BOOL DrawRoundRect( CDC* pDC, LPCRECT lprcRect, SIZE sizeRound, DWORD dwColorFrame = COLOR_...

先看效果:


画圆角矩形的函数:

BOOL DrawRoundRect( CDC* pDC, LPCRECT lprcRect, SIZE sizeRound, DWORD dwColorFrame = COLOR_TRANSPARENT, DWORD dwColorFill = COLOR_TRANSPARENT )
{
	ASSERT_RESULT( NULL != pDC );

	COLORREF crBackground;
	crBackground = pDC->GetBkColor();

	HRGN hrgnFrame = ::CreateRoundRectRgn( lprcRect->left, lprcRect->top, lprcRect->right + 1, lprcRect->bottom + 1, sizeRound.cx, sizeRound.cy );

	if ( COLOR_TRANSPARENT == dwColorFrame && COLOR_TRANSPARENT != dwColorFill )
	{
		// fill it only			
		CBrush brushFill( dwColorFill );		
		FillRgn(  pDC->GetSafeHdc(), hrgnFrame, brushFill );
	}

	else
	{
		HRGN hrgnFill = ::CreateRoundRectRgn( lprcRect->left + 1, lprcRect->top + 1, lprcRect->right, lprcRect->bottom, sizeRound.cx, sizeRound.cy );
		if ( COLOR_TRANSPARENT != dwColorFrame && COLOR_TRANSPARENT != dwColorFill )
		{
			// fill and frame
			CBrush brushFillFrame( dwColorFrame );	 
			FillRgn(   pDC->GetSafeHdc(),  hrgnFrame, brushFillFrame );

			CBrush brushFill( dwColorFill );
			FillRgn(   pDC->GetSafeHdc(), hrgnFill, brushFill );

		}
		else
		{
			// frame only
			::CombineRgn( hrgnFrame, hrgnFrame, hrgnFill, RGN_DIFF );

			CBrush brushFillFrame( dwColorFrame );	
			FillRgn(   pDC->GetSafeHdc(), hrgnFrame, brushFillFrame );

		}

		::DeleteObject( (HGDIOBJ)hrgnFill );
	}

	::DeleteObject( (HGDIOBJ)hrgnFrame );

	pDC->SetBkColor( crBackground );

	return TRUE;
}

调用方法:
void CxxxView::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
	}
	else
	{		
		CRect rc(10, 10, 100, 80);
		//画圆角矩形
		SIZE sizeRect = {3, 3};
		DrawRoundRect(this->GetDC(), rc, sizeRect);
}

这里直接使用的窗口DC,实际应用中为了防止出现闪屏现象,需要使用MemDC,调用方法类似,大家自行调整下。


推荐:
MFC采用双缓存解决闪屏问题(使用了双缓存还是闪屏的)

mfc 画图 圆角矩形

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: