GDI+绘制透明属性窗口边框存在BUG?解决方案

GDI+绘制透明属性窗口边框存在BUG?
很简单的做了个测试:
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的矩形是不同的,计算有偏差
------解决方案--------------------
把对话框弄成无边框的
------解决方案--------------------
不妨多试验一下,比如把矩形设置得大一点,看看效果有何不同,然后在找找有没有什么调整方案。