我用下面的方式加载了一个bmp文件,并将它画在窗体上void ShowPicture(CString imageName)
{
    CDC *pdc=this->GetDC(); // device context for painting
    hbm = (HBITMAP)::LoadImage(NULL,
imageName,
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE);
    if (Bitmap.Attach(hbm))//将图像句柄和Cbitmap对象联系起来
    {
Bitmap.GetBitmap(&bm);//获取图像尺寸
Bitmap.SetBitmapDimension(bm.bmWidth,bm.bmHeight);
mapWidth=bm.bmWidth;
mapHeight=bm.bmHeight;
CDC memdc;
memdc.CreateCompatibleDC(pdc);
CBitmap *p=memdc.SelectObject(&Bitmap);
pdc->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&memdc,0,0,SRCCOPY);
Bitmap.DeleteObject();
memdc.SelectObject(p);
}
ReleaseDC(pdc);
imageFlag=1;
Invalidate();
UpdateWindow();
}
然后我用下面的方法进行重画,可不知道为什么总是画不出来,有时还会出错。
void CColorStatic::OnPaint() //重画Static
{
    if(imageFlag)
    {
        if (Bitmap.Attach(hbm))//将图像句柄和Cbitmap对象联系起来
{
CPaintDC dc(this);
Bitmap.CreateCompatibleBitmap(&dc,mapWidth,mapHeight);
CDC memdc; 
memdc.CreateCompatibleDC(&dc); 
CBitmap *pbmpOld=memdc.SelectObject(&Bitmap);
dc.BitBlt(0,0,mapWidth,mapHeight,&memdc,0,0,SRCCOPY);
}
Invalidate();
UpdateWindow();
    }
    else{
dc.DrawText(m_strCaption,&rect,DT_CENTER);//将文本画在Static的中央
dc.SelectObject(pOldFont);
    }
}请各位大哥指点一二!谢谢先

解决方案 »

  1.   

    Invalidate();你不应该在onpaint里面调用
    Bitmap.CreateCompatibleBitmap(&dc,mapWidth,mapHeight);
    你的Bitmap既然attach了一个hBitamp对象,就不要调用这个函数了,我目前就看出这些问题
    你把错误信息贴出;来
      

  2.   

    1、这两个函数之间有什么联系?
    2、在OnPaint中去掉重绘的语句,这可能就是你出错的原因。
    3、程序中有很多漏洞,比如对资源的回收,注意更改。
      

  3.   

    是继承的CStatic类,用来显示图片和彩色文字。一个函数是用来加载图片,一个用进行重画。
    程序是两个月前写的了,因为方法变了,所以错误信息现在一时也帖不出来。
    如果在OnPaint里去掉重画,图片可以显示出来,但进行窗口切换的时候,图片就会被檫掉,所以想在OnPaint里进行重画。