您的位置:首页 > 其它

使用CreatePatternBrush,用位图填充一个矩形区域,出现交错问题??

2014-02-17 20:22 597 查看
首先看示例程序:
[align=left] HBITMAP hBmp = NULL;[/align]
hBmp =
::SHLoadDIBitmap (filePath);
[align=left] if (!hBmp )[/align]
[align=left] {[/align]
PQMsgBox(L "Load
Message Dialog Bitmap Fail!" );
LogToFile(L "CMessageDlg::OnInitDialog :Load
Message Dialog Bitmap Fail!");
[align=left] return;[/align]
[align=left] }[/align]
[align=left] CBitmap fillBmp ;[/align]
[align=left] fillBmp.Attach (hBmp);[/align]
[align=left] CBrush fillBrush ;[/align]
[align=left] fillBrush.CreatePatternBrush (&fillBmp);[/align]
[align=left] CBrush *oldBrush = memDC-> SelectObject(&fillBrush );[/align]
[align=left] CPen fillPen (PS_NULL, 1,RGB( 0,0 ,0));[/align]
[align=left] CPen *oldPen = memDC-> SelectObject(&fillPen );[/align]
[align=left] memDC->Rectangle (rect);[/align]

[align=left]这样子画出来的图片,可能会出现交错现象,为什么呢?由于dc在画刷默认的位置从(0,0)开始的,所以填充到指定位置的时候就可能出现交错。好在微软提供了如下函数解决此问题:[/align]

CDC::SetBrushOrg
注意此函数的remark:
[align=left]必须在selectobject之前调用,即选入brush之前调用它,否则无效。[/align]
[align=left]修改后如下:[/align]

[align=left] HBITMAP hBmp = NULL ;[/align]
hBmp =
::SHLoadDIBitmap ( filePath);
[align=left] if (!hBmp )[/align]
[align=left] {[/align]
PQMsgBox (L "Load
Message Dialog Bitmap Fail!" );
LogToFile (L "CMessageDlg::OnInitDialog : Load
Message Dialog Bitmap Fail!");
[align=left] return ;[/align]
[align=left] }[/align]
[align=left] CBitmap fillBmp ;[/align]
[align=left] fillBmp .Attach ( hBmp);[/align]
[align=left] CBrush fillBrush ;[/align]
[align=left] fillBrush .CreatePatternBrush (& fillBmp);[/align]
[align=left] memDC ->SetBrushOrg ( screenPoint); // 此句目的防止画刷交替[/align]
[align=left] CBrush *oldBrush = memDC-> SelectObject (&fillBrush );[/align]
[align=left] CPen fillPen ( PS_NULL, 1, RGB( 0,0 ,0));[/align]
[align=left] CPen *oldPen = memDC-> SelectObject (&fillPen );[/align]
[align=left] memDC ->Rectangle ( rect);[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐