请问vc++中ondraw和onopenfile的联系

ananjj 2008-11-04 07:53:00
初学vc,对里面的很多东西都不是很懂,我现在准备在打开对话框里面选择一副BMP图片打开并显示出来,
这是一部分主要的代码
void CDrawTestDoc::OnFileOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE,_T("*.bmp"),_T("*.bmp"),OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST,
"位图文件(*.bmp)|*.bmp|");
if(IDOK==dlg.DoModal())
{
CString fileName=dlg.GetPathName();
m_CDib.LoadFile(fileName);
UpdateAllViews(NULL);
}

}

void CDrawTestView::OnDraw(CDC* pDC)
{
CDrawTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDib=&pDoc->m_CDib;
if((pDoc->m_CDib.IsValid()))
{
BYTE* pBitmapData=pDib->GetData();
LPBITMAPINFO pBitmapInfo=pDib->GetInfo();
int bitmapHeight=pDib->GetHeight();
int bitmapWidth=pDib->GetWidth();
int scaledWidth=(int)(bitmapWidth*m_scale);
int scaledHeight=(int)(bitmapHeight*m_scale);
if(pDib->GetRGB())
{
//CDib *pDib=&pDoc->m_CDib;
m_pPalette=CreateBitmapPalette(pDib);
CPalette *pOldPalette=pDC->SelectPalette(m_pPalette,TRUE);
pDC->RealizePalette();
::StretchDIBits(pDC->GetSafeHdc(),0,0,scaledWidth,scaledHeight,
0,0,bitmapWidth,bitmapHeight,pBitmapData,pBitmapInfo,
DIB_RGB_COLORS,SRCCOPY);

pDC->SelectPalette(pOldPalette,TRUE);
m_Palette.DeleteObject();
}
else
{
::StretchDIBits(pDC->GetSafeHdc(),0,0,scaledWidth,scaledHeight,
0,0,bitmapWidth,bitmapHeight,pBitmapData,pBitmapInfo,
DIB_RGB_COLORS,SRCCOPY);
}
}
}

当然有个DIB类,没有贴出来,我想问一下,在这两段代码里面怎么看得出来他们之间的联系呢?
另外ondraw里面if((pDoc->m_CDib.IsValid()))里的IsValid()在DIB里面的定义是
BOOL CDib::IsValid()
{
return m_valid;
}
这个m_valid在Dib的构造函数里面初始化为FALSE,这样的话在这个语句里面不就一直是FALSE了吗?
请大家指点一下,不胜感激!!
...全文
91 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧