我想在客户区一边开出一个区域,用来在上面放一个控制按钮,功能是打开一幅bmp的图片。
我新建了一个C...FormView类,并实现了窗口的分割。然后我在新产生的Dialog资源上新添加一个按钮。
接下来我在C...FormView类中添加按钮消息并加入如下代码:
void C...FormView::OnButton1() 
{
CFileDialog fileOpenDlg(TRUE,"bmp","*.bmp",NULL,"Bitmap Files(*.bmp)",NULL);
C...Doc doc, *pdoc;
pdoc = NULL;
int nRespond = fileOpenDlg.DoModal();
if(nRespond == IDOK)
{
CString filePath = fileOpenDlg.GetPathName();
(pdoc->m_pDib) = new CDib(filePath);      //在Doc.h中定义了CDib* m_pDib;
if((pdoc->m_pDib)->IsValid())
doc.SetTitle(filePath);
else
doc.DeleteContents();
}
doc.UpdateAllViews(0);
}当我程序写到这里时(图片此时还不能显示出来,我还没有在视类的OnDraw函数中添加代码)编译没有报错,在运行时点击按钮也显示打开对话框了,可是当我选择需要打开的.bmp图片打开时弹出:....exe遇到问题需要关闭。......
以前我写国类似的程序,不过在写到这里的时候编译和运行都不报错啊。
(我以前写过的类似的程序不是响应分割窗口中的按钮消息,而是响应主菜单中的一个按钮消息。所以以前我只要在在C...Doc类中添加响应菜单中的一个按钮消息代码和上面很像,只是不要加:C...Doc doc, *pdoc;就可以了。分割窗口后在C...Doc类中没有找到新添加的按钮消息,所以我只有在C...FormView类中添加了。)请问各位大侠这是怎么回事啊??我要想实现我需要的功能该怎么办呢??请各位大侠多多赐教,万分感谢!!!!!!!!

解决方案 »

  1.   

    C...Doc doc, *pdoc; 
    把这行改成:
    C...Doc* doc = (C...Doc)GetDocument();
    下面都用doc->来访问文档类成员。
      

  2.   

    C...Doc doc, *pdoc; 
    pdoc = NULL; 
    int nRespond = fileOpenDlg.DoModal(); 
    if(nRespond == IDOK) 

    CString filePath = fileOpenDlg.GetPathName(); 
    (pdoc->m_pDib) = new CDib(filePath);      //在Doc.h中定义了CDib* m_pDib; 
    if((pdoc->m_pDib)->IsValid()) 
    doc.SetTitle(filePath); 
    else 
    doc.DeleteContents(); 

    doc.UpdateAllViews(0); 

    ====你这个pDoc根本就没有指向任何空间啊。不崩溃才怪
      

  3.   

    按照楼上的意见我将
    C...Doc doc, *pdoc; 
    把这行改成: 
    C...Doc* doc = (C...Doc)GetDocument(); 
    后,可是遇到下面的错误:
    error C2440: 'type cast' : cannot convert from 'class CDocument *' to 'class C...Doc'这是为什么啊?我比较菜,请多多指教。
    谢谢!
      

  4.   

    C...Doc* doc = (C...Doc)GetDocument(); 
    改成:
    C...Doc* doc = (C...Doc*)GetDocument();