很简单的做了个测试:
OnInitDialog中加入:                DWORD stylex = GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE);
stylex |= WS_EX_LAYERED;
SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, stylex);
SetLayeredWindowAttributes( 0, 255, LWA_ALPHA);响应WM_NCPAINT: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());
}结果是右边框和下边框未被绘出来,显示为黑色,如果把代码改成: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+绘制,求解决方法?

解决方案 »

  1.   

    为什么GDI+就会这样呢,好诡异。
      

  2.   

    楼主这行错了:
    g.FillRectangle(&brush, rc.left, rc.top, rc.Width(), rc.Height());
    改成:
    g.FillRectangle(&brush, 0,0, rc.Width(), rc.Height());
      

  3.   

    rc.OffsetRect(-rc.TopLeft());
    rc.top和left就是0
    ,不信先自己试试,
      

  4.   

    就算是直接把坐标输进去,也一样效果,不信可以自己试,如果你用GDI+在透明属性下能贴出右下边框,立刻全分送上。
      

  5.   

    GDI+的矩形跟GDI的矩形是不同的,计算有偏差
      

  6.   

    请说说有什么偏差,我把WS_EX_LAYERED这个属性去掉,显示就和gdi一样了,所以肯定是透明属性影响的,请先实验下,如果用GDI+在透明属性下能贴出右下边框,立刻全分送上。
      

  7.   

    你肯定在非透明方式下跟GDI完全一样?怎么我试验的结果还是有误差呢?GDI+和GDI其实有很多差别,比如文字的大小、位置都会有误差,还有画矩形、画线、画曲线等等全有误差。至于原因,我不是很肯定,而是我猜测的(我的习惯喜欢猜测,只是很多猜测无法验证):
    首先GDI+的矩形都是浮点数,这是误差的根源。
    其次由于GDI+支持2D变换操作(缩放、旋转、平移等),它需要很多高精度的浮点运算,无论如何,浮点运算的次数越多,误差越大。当然如果用整数运算,误差只会更大,而且大得离谱。
    最重要的是,从浮点的眼光来看像素填充,因为无法跟图片的像素一一对应,它只能采取插值填充,这种方式即使最终的大小跟要填充的大小一致,也会存在边缘无法对齐的后果。如果你了解3D的纹理贴图,就可以知道纹理素跟像素是如何错位对齐的。
    最后,浮点矩形还要再次转换回整数以便绘制到屏幕上,还得产生点误差。一家之言,欢迎拍砖。
      

  8.   

    图片就在上面贴着,没有透明属性可以肯定用GDI+右下角是绘出来了,GDI+和GDI本来就有很多不同,我没说这个,我就说这个问题,至少GDI是不存在的。
      

  9.   

    http://www.cnblogs.com/jonnyyu/archive/2005/07/20/196502.html
    要分