GDI+绘制透明属性窗口边框存在BUG?解决方案
GDI+绘制透明属性窗口边框存在BUG?
很简单的做了个测试:
OnInitDialog中加入:
响应WM_NCPAINT:
结果是右边框和下边框未被绘出来,显示为黑色,
如果把代码改成:
就OK了。
http://hi.csdn.net/attachment/201111/18/0_13216170568xJH.gif
现在必须使用GDI+绘制,求解决方法?
------解决方案--------------------
用GetClientRect(&rc);
------解决方案--------------------
楼主这行错了:
g.FillRectangle(&brush, rc.left, rc.top, rc.Width(), rc.Height());
改成:
g.FillRectangle(&brush, 0,0, rc.Width(), rc.Height());
------解决方案--------------------
GDI+的矩形跟GDI的矩形是不同的,计算有偏差
------解决方案--------------------
把对话框弄成无边框的
------解决方案--------------------
不妨多试验一下,比如把矩形设置得大一点,看看效果有何不同,然后在找找有没有什么调整方案。
很简单的做了个测试:
OnInitDialog中加入:
- C/C++ code
DWORD stylex = GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE); stylex |= WS_EX_LAYERED; SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, stylex); SetLayeredWindowAttributes( 0, 255, LWA_ALPHA);
响应WM_NCPAINT:
- C/C++ code
void CSimple1DemoDlg::OnNcPaint() { CRect rc; GetWindowRect(&rc); rc.OffsetRect(-rc.TopLeft()); CWindowDC dc(this); Color clr(255, 255, 0, 0); SolidBrush brush(clr); Graphics g(dc.GetSafeHdc()); g.FillRectangle(&brush, rc.left, rc.top, rc.Width(), rc.Height()); }
结果是右边框和下边框未被绘出来,显示为黑色,
如果把代码改成:
- C/C++ code
void CSimple1DemoDlg::OnNcPaint() { CRect rc; GetWindowRect(&rc); rc.OffsetRect(-rc.TopLeft()); CWindowDC dc(this); //Color clr(255, 255, 0, 0); //SolidBrush brush(clr); //Graphics g(dc.GetSafeHdc()); //g.FillRectangle(&brush, rc.left, rc.top, rc.Width(), rc.Height()); dc.FillSolidRect(&rc, RGB(255, 0, 0)); }
就OK了。
http://hi.csdn.net/attachment/201111/18/0_13216170568xJH.gif
现在必须使用GDI+绘制,求解决方法?
------解决方案--------------------
用GetClientRect(&rc);
------解决方案--------------------
楼主这行错了:
g.FillRectangle(&brush, rc.left, rc.top, rc.Width(), rc.Height());
改成:
g.FillRectangle(&brush, 0,0, rc.Width(), rc.Height());
------解决方案--------------------
GDI+的矩形跟GDI的矩形是不同的,计算有偏差
------解决方案--------------------
把对话框弄成无边框的
------解决方案--------------------
不妨多试验一下,比如把矩形设置得大一点,看看效果有何不同,然后在找找有没有什么调整方案。