GDI+填充图形时包括边缘吗?

善良超锅锅 2016-04-29 10:05:18
我创建了一个无边框窗口,把背景颜色设为暗黑色,和vs2015的暗色主题一样,在响应WM_PAIN消息时填充了背景颜色。但是发现边缘部分背景颜色不一样。
代码如下
// 响应WM_PAINT消息
void Window::onPaint(HDC dc)
{
// 创建内存兼容DC,准备双缓冲
HDC hMemDC = CreateCompatibleDC(dc);
RECT rc;
GetClientRect(m_hWnd, &rc);
HBITMAP hMemBitMap = CreateCompatibleBitmap(dc, rc.right, rc.bottom);
SelectObject(hMemDC, hMemBitMap);
// 根据内存DC创建GDI+绘制对象
Gdiplus::Graphics graphics(hMemDC);
// 设置反走样
graphics.SetSmoothingMode(Gdiplus::SmoothingModeHighQuality);

// 清理背景
Gdiplus::SolidBrush brush(Gdiplus::Color(m_r, m_g, m_b));
graphics.FillRectangle(&brush, 0,0, rc.right, rc.bottom);// 关键是这句

// 绘制控件

// 复制到目标DC
BitBlt(dc, 0, 0, rc.right, rc.bottom, hMemDC, 0, 0, SRCCOPY);

DeleteDC(hMemDC);
}

graphics.FillRectangle(&brush, 0,0, rc.right, rc.bottom)时效果如下

明显可以按到左边和上边各有一个像素宽度的颜色和整个背景颜色不一样。就像画了两条黑线一样。

如果改成graphics.FillRectangle(&brush, -1,-1, rc.right, rc.bottom),效果如下:

边缘的黑线转移到了窗口的右边和下边。

如果改成graphics.FillRectangle(&brush, -1, -1, rc.right+1, rc.bottom+1),效果如下

这种效果才是我想要的。

请问这是什么原因呢?难道GDI+填充形状时不包括边缘吗?-1和+1看起来不太好,有关于这个设置的接口吗?
...全文
312 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
GDI+ 没找到不规则区域从某一点 该颜色相同连续区域扩张填充指定颜色 的方法 GDI是 ExtBloodFill 即可
schlafenhamster 2016-04-30
  • 打赏
  • 举报
回复
void FillRect( LPCRECT lpRect, CBrush* pBrush ); When filling the specified rectangle, FillRect does not include the rectangle’s right and bottom sides. GDI fills a rectangle up to, but does not include, the right column and bottom row, regardless of the current mapping mode.
赵4老师 2016-04-29
  • 打赏
  • 举报
回复
你试试填充(0,0)-(2,3),然后截屏,粘贴到PS里面放大看, 是 ■■ ■■ ■■ 还是 ■■■ ■■■ ■■■ ■■■ 或者 □□□ □■■ □■■ □■■ 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?
善良超锅锅 2016-04-29
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
左上闭,右下开。
既然是左上闭,那照理说左上不会出现黑线,只是右下出现黑线啊
schlafenhamster 2016-04-29
  • 打赏
  • 举报
回复
FillRectangle 不包含 rc.right, rc.bottom 所以要 +1。 与 GDI 一样
boylafong 2016-04-29
  • 打赏
  • 举报
回复
类似立体效果的,就象楼上的 你可以分别定义pen的颜色跟bursh的颜色看看
赵4老师 2016-04-29
  • 打赏
  • 举报
回复
左上闭,右下开。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧