MFC位图显示有关问题
MFC位图显示问题
请高手帮忙看一下这个程序,是把位图居中显示在客户区某一区域的问题,但是运行后第一次打开图片正常显示,再继续打开新的图片时还是显示第一张。发现可能是打开新图片时showpicture函数没有执行,求帮忙该怎么解决?
void CGraphicView::OnDraw(CDC* pDC)
{
CGraphicDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if (!pDoc)
return;
CFont font;
font.CreateFont(30,0,0,0,FW_NORMAL,FALSE,FALSE,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_DONTCARE, "宋体");
CFont* plodfont = pDC->SelectObject(&font);
CString s;
s.Format("图片编辑");
pDC->SetTextColor(RGB(0,20,200));
pDC->TextOut(180,470,s);
pDC->Rectangle(10,10,460,460);
if(state==1)
{
CDC dcImage;
dcImage.CreateCompatibleDC(pDC);
BITMAP bm;
m_bitmap.GetBitmap(&bm);
dcImage.SelectObject(&m_bitmap);
float Times=0;
int Width;
int Height;
int SWidth;
int SHeight;
if(bm.bmWidth <450 && bm.bmHeight <450)
pDC->BitBlt(225-bm.bmWidth/2,225-bm.bmHeight/2,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY);
else
if (bm.bmWidth>=bm.bmHeight&&bm.bmWidth>=450)
{
Times=float(450.0/bm.bmWidth);
Width=int(bm.bmWidth*Times);
Height=int(bm.bmHeight*Times);
SWidth=235-Width/2;
SHeight=(343-int(Height/2.0))/2;
pDC->StretchBlt(15,SHeight,Width-12,224+Height/4,&dcImage,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); //图片伸缩显示
}
else if(bm.bmHeight >bm.bmWidth && bm.bmHeight >450)
{
Times=float(450.0/bm.bmHeight);
Width=int(bm.bmWidth*Times);
Height=int(bm.bmHeight*Times);
SWidth=235-Width/2;
SHeight=235-Height/2;
请高手帮忙看一下这个程序,是把位图居中显示在客户区某一区域的问题,但是运行后第一次打开图片正常显示,再继续打开新的图片时还是显示第一张。发现可能是打开新图片时showpicture函数没有执行,求帮忙该怎么解决?
void CGraphicView::OnDraw(CDC* pDC)
{
CGraphicDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if (!pDoc)
return;
CFont font;
font.CreateFont(30,0,0,0,FW_NORMAL,FALSE,FALSE,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_DONTCARE, "宋体");
CFont* plodfont = pDC->SelectObject(&font);
CString s;
s.Format("图片编辑");
pDC->SetTextColor(RGB(0,20,200));
pDC->TextOut(180,470,s);
pDC->Rectangle(10,10,460,460);
if(state==1)
{
CDC dcImage;
dcImage.CreateCompatibleDC(pDC);
BITMAP bm;
m_bitmap.GetBitmap(&bm);
dcImage.SelectObject(&m_bitmap);
float Times=0;
int Width;
int Height;
int SWidth;
int SHeight;
if(bm.bmWidth <450 && bm.bmHeight <450)
pDC->BitBlt(225-bm.bmWidth/2,225-bm.bmHeight/2,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY);
else
if (bm.bmWidth>=bm.bmHeight&&bm.bmWidth>=450)
{
Times=float(450.0/bm.bmWidth);
Width=int(bm.bmWidth*Times);
Height=int(bm.bmHeight*Times);
SWidth=235-Width/2;
SHeight=(343-int(Height/2.0))/2;
pDC->StretchBlt(15,SHeight,Width-12,224+Height/4,&dcImage,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); //图片伸缩显示
}
else if(bm.bmHeight >bm.bmWidth && bm.bmHeight >450)
{
Times=float(450.0/bm.bmHeight);
Width=int(bm.bmWidth*Times);
Height=int(bm.bmHeight*Times);
SWidth=235-Width/2;
SHeight=235-Height/2;