+ -
当前位置:首页 → 问答吧 → 基础类应用程序,一运行就停止。编译没有问题。请哪位大侠帮忙看一下是哪里出了问题啊?谢谢了。

基础类应用程序,一运行就停止。编译没有问题。请哪位大侠帮忙看一下是哪里出了问题啊?谢谢了。

时间:2011-12-21

来源:互联网

你好啊,我的这个程序目的是实现点击文件打开按钮,在对话框控件上显示一幅位图,可是编译没有问题,运行就停止。找不出原因啊。请你帮忙看一下好嘛?
void CTESTDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
CFileDialog m_dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"BMP图像|*bmp;*.bmp||",this);
if (m_dlg.DoModal()==IDOK)
{
m_FileName =m_dlg.GetPathName();  
m_hBmp=(HBITMAP)::LoadImage(::AfxGetResourceHandle(),m_FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if (m_hBmp)
{

CBitmap *pBmp=NULL;  
  // BITMAP m_Bitmap;
pBmp->Attach(m_hBmp);
CDC *pDC = m_image.GetDC();
// m_Fram.SetBitmap(m_hBmp);

CDC memdc;
  memdc.CreateCompatibleDC(pDC);
  CBitmap *pOldBitmap=(CBitmap*)memdc.SelectObject(pBmp);
  long wide, high;
   
BITMAP bmp;
  pBmp->GetBitmap(&bmp);
  wide = bmp.bmWidth;
  high = bmp.bmHeight;

CRect bmpRC;
m_image.GetWindowRect(&bmpRC);

  pDC->StretchBlt(bmpRC.left,bmpRC.top,bmpRC.Width(),
bmpRC.Height(),&memdc,0,0,wide,high,SRCCOPY); 
memdc.SelectObject(&pOldBitmap);

}
else
{
MessageBox("获得文件句柄失败");
}

作者: qq274083669   发布时间: 2011-12-21

运行就停止是什么意思?程序崩了??

作者: luluwenwen   发布时间: 2011-12-21

其中m_image是要显示文件的空间的变量名

作者: qq274083669   发布时间: 2011-12-21

就是崩溃了,可能是那段创建内存DC的那块 有问题。。

作者: qq274083669   发布时间: 2011-12-21

程序崩溃最好debug了。方法如下:

F5启动调试,程序崩溃?打开调用堆栈。在堆栈前打断点。

重新F5,程序会停在断点处,然后,不用说了,单步(步入)即可。

作者: icechenbing   发布时间: 2011-12-21

我把我每一步的想法标上去 希望高手帮我看看时那个地方用错了
{
// TODO: Add your control notification handler code here
CFileDialog m_dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"BMP图像|*bmp;*.bmp||",this);
if (m_dlg.DoModal()==IDOK)
{
m_FileName =m_dlg.GetPathName();  
m_hBmp=(HBITMAP)::LoadImage(::AfxGetResourceHandle(),m_FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if (m_hBmp)
{

CBitmap *pBmp=NULL;  
pBmp->Attach(m_hBmp);//让图像句柄关联一个指针
CDC *pDC = m_image.GetDC();//得到要显示图片的控件的设备环境

CDC memdc;
  memdc.CreateCompatibleDC(pDC);//创建设备兼容DC
  CBitmap *pOldBitmap=(CBitmap*)memdc.SelectObject(pBmp);//装入要显示的图片
  long wide, high;
  //得到图片信息
BITMAP bmp;
  pBmp->GetBitmap(&bmp);
  wide = bmp.bmWidth;
  high = bmp.bmHeight;
  //建立一个显示图像的矩形区域
CRect bmpRC;
m_image.GetWindowRect(&bmpRC);
  //缩放显示图片
  pDC->StretchBlt(bmpRC.left,bmpRC.top,bmpRC.Width(),
bmpRC.Height(),&memdc,0,0,wide,high,SRCCOPY); 
memdc.SelectObject(&pOldBitmap);

}
else
{
MessageBox("获得文件句柄失败");
}
}

作者: qq274083669   发布时间: 2011-12-21

多谢了啊,找到原因了。。是那个Attch()函数调用有问题。。 非常感谢呀

作者: qq274083669   发布时间: 2011-12-21