delete掉的是LeftLine(应该是个CBitmap吧?)内部的HBITMAP
脱开LeftLine和内部HBITMAP的关联,即使LeftLine销毁了,原本LoadBitmap加载的HBITMAP也不受影响
返回边框的X方向和Y方向的宽度(像素), 具体来说
SM_CYFIXEDFRAME -- 不可改变大小的对话框上/下边的宽度
SM_CXFIXEDFRAME -- 不可改变大小的对话框左/右边的宽度
SM_CYBORDER -- 3D边框上下边宽度
SM_CXBORDER -- 3D边框左/右边宽度

解决方案 »

  1.   


    delete掉的是LeftLine(应该是个CBitmap吧?)内部的HBITMAP
    脱开LeftLine和内部HBITMAP的关联,即使LeftLine销毁了,原本LoadBitmap加载的HBITMAP也不受影响
    返回边框的X方向和Y方向的宽度(像素), 具体来说
    SM_CYFIXEDFRAME -- 不可改变大小的对话框上/下边的宽度
    SM_CXFIXEDFRAME -- 不可改变大小的对话框左/右边的宽度
    SM_CYBORDER -- 3D边框上下边宽度
    SM_CXBORDER -- 3D边框左/右边宽度

    不好意思;忘记给出LeftLing的定义;
    CBitmap LeftLine,*OldObj; 
    刚定义的CBitmap类型为什么有这个HBITMAP,为什么要去掉这个?LeftLine.Detach(); //脱开LeftLine和内部HBITMAP的关联,不是上面已经delete了吗?
      

  2.   


    delete掉的是LeftLine(应该是个CBitmap吧?)内部的HBITMAP
    脱开LeftLine和内部HBITMAP的关联,即使LeftLine销毁了,原本LoadBitmap加载的HBITMAP也不受影响
    返回边框的X方向和Y方向的宽度(像素), 具体来说
    SM_CYFIXEDFRAME -- 不可改变大小的对话框上/下边的宽度
    SM_CXFIXEDFRAME -- 不可改变大小的对话框左/右边的宽度
    SM_CYBORDER -- 3D边框上下边宽度
    SM_CXBORDER -- 3D边框左/右边宽度

    不好意思;忘记给出LeftLing的定义;
    CBitmap LeftLine,*OldObj; 
    刚定义的CBitmap类型为什么有这个HBITMAP,为什么要去掉这个?LeftLine.Detach(); //脱开LeftLine和内部HBITMAP的关联,不是上面已经delete了吗?CBitmap LeftLine,*OldObj;  //补充一点,这里一定义,下面就delete了?
    BITMAPINFO bitinfo;

    CDC memDC;
    memDC.CreateCompatibleDC(&WindowDC); int leftwidth=0;       
    int rightwidth = 0;    
    int leftlinewidth = 0; 
    int rLineWidth;
    int bLineHeight;
    DeleteObject(LeftLine);
      

  3.   

    注意是DeleteObject()而不是delete,这个是Windows win32 API。用于删除GDI对象的(比如HBITMAP, HBRUSH, HPEN, HFONT等)所以DeleteObject(LeftLine)相当于只删除了LeftLine内部保存的图片(这是一个GDI的HBITMAP)而LeftLine本身仍然存在;而LeftLine.Detach相当于只将内部的HBITMAP变量置零,这样LeftLine析构时不会自动调用DeleteObject()去释放内部的HBITMAP了。另外LeftLine.LoadBitmap()后内部自动生成了一个HBITMAP用于存放具体图片,因此后面调用了LeftLine.Detach()。为的就是当LeftLine释放时(比如退出当前函数时)前面LoadBitmap生成的HBITMAP不要一起被删了(可能还有用)
      

  4.   


    注意是DeleteObject()而不是delete,这个是Windows win32 API。用于删除GDI对象的(比如HBITMAP, HBRUSH, HPEN, HFONT等)所以DeleteObject(LeftLine)相当于只删除了LeftLine内部保存的图片(这是一个GDI的HBITMAP)而LeftLine本身仍然存在;而LeftLine.Detach相当于只将内部的HBITMAP变量置零,这样LeftLine析构时不会自动调用DeleteObject()去释放内部的HBITMAP了。另外LeftLine.LoadBitmap()后内部自动生成了一个HBITMAP用于存放具体图片,因此后面调用了LeftLine.Detach()。为的就是当LeftLine释放时(比如退出当前函数时)前面LoadBitmap生成的HBITMAP不要一起被删了(可能还有用)谢谢