大家好,今天遇到了一个很奇怪的问题,想向各位请教一下,在此先行谢过啦。是这样的,我在单文档程序中新建了一个名为CDialogImageList的对话框类,其中有一个按钮控件,一个编辑框控件,一个树控件,程序运行后停靠在窗口的左侧,程序的任务为:当点击按钮控件时选择包含图像文件的文件夹路径,并在树控件中将当前文件夹中的图像文件的完整路径显示在树控件中,双击树控件中的项时,在view类视图中显示图像。除了最后的一步即显示图像外,我都已经实现了,现在遇到的问题是当我在对话框类中获取view类的指针时(我采取的方式如下):
CMainFrame *p = (CMainFrame*)AfxGetMainWnd();
CTreeImageListView *pNewView = (CTreeImageListView *)p->GetActiveView();
pNewView->onshow();其中onshow()是view类的成员函数,定义为:
void CTreeImageListView::onshow()
{
  //CPicCutDoc* pDoc = GetDocument();
  //ASSERT_VALID(pDoc);
  CDialogImageList dlg;
  CClientDC dc(this);
  if(dlg.m_data) DrawImage(dc.m_hDC,dlg.m_data,dlg.m_Row,dlg.m_Col,0,0);
}说明:在代码段
CMainFrame *p = (CMainFrame*)AfxGetMainWnd();
CTreeImageListView *pNewView = (CTreeImageListView *)p->GetActiveView();
pNewView->onshow();
之前,我已经将当前双击项所对应的图像数据(数据指针,行大小,列大小)正确的获取到,另外,在对话框类的头文件中添加了
class CTreeImageListView;

public:
  CTreeImageListView *pNewView;
在对话框的构造函数中*pNewView = NULL;
照上述处理后,出现的错误为:
--------------------Configuration: TreeImageList - Win32 Debug--------------------
Compiling...
DialogImageList.cpp
D:\树结构输入图像列表\树结构输入图像列表\单文档\TreeImageList\DialogImageList.cpp(203) : error C2027: use of undefined type 'CTreeImageListView'
        d:\树结构输入图像列表\树结构输入图像列表\单文档\treeimagelist\dialogimagelist.h(13) : see declaration of 'CTreeImageListView'
D:\树结构输入图像列表\树结构输入图像列表\单文档\TreeImageList\DialogImageList.cpp(203) : error C2227: left of '->onshow' must point to class/struct/union
Error executing cl.exe.TreeImageList.exe - 2 error(s), 0 warning(s)当我在对话框类的cpp文件中加入#include "TreeImageListView.h"时,错误变为
--------------------Configuration: TreeImageList - Win32 Debug--------------------
Compiling...
DialogImageList.cpp
d:\树结构输入图像列表\树结构输入图像列表\单文档\treeimagelist\treeimagelistview.h(21) : error C2143: syntax error : missing ';' before '*'
d:\树结构输入图像列表\树结构输入图像列表\单文档\treeimagelist\treeimagelistview.h(21) : error C2501: 'CTreeImageListDoc' : missing storage-class or type specifiers
d:\树结构输入图像列表\树结构输入图像列表\单文档\treeimagelist\treeimagelistview.h(21) : error C2501: 'GetDocument' : missing storage-class or type specifiers
Error executing cl.exe.
Creating browse info file...TreeImageList.exe - 3 error(s), 0 warning(s)我的画图的子函数DrawImage是没有问题的,我已经测试过了,所以,现在的问题一定是view类指针的获取出现了问题。
渴望能够得到热心朋友的帮助,万分感谢。程序界面如下:

解决方案 »

  1.   

    在treeimagelistview.h文件中,#include "treeimagelistdoc.h"
      

  2.   

    另外:
    void CTreeImageListView::onshow()

      //CPicCutDoc* pDoc = GetDocument();
      //ASSERT_VALID(pDoc);
      CDialogImageList dlg;
      CClientDC dc(this);
      if(dlg.m_data) DrawImage(dc.m_hDC,dlg.m_data,dlg.m_Row,dlg.m_Col,0,0);
    }
    这段代码中,定义CDialogImageList的实例是不正确的,这里定义的实例dlg并非你正在运行中的对话框,所以,DrawImage画不出你想要的东西.
      

  3.   

    在对话框类的cpp文件中加入#include "TreeImageListDoc.h"注意要加在 #include "TreeImageListView.h" 之前
      

  4.   

    flydreamGG,您好,谢谢您的解答,按照您的方式加晚头文件并且将
    pNewView->onshow();
    替换为
    CDC *pDC = pNewView->GetDC();
    DrawImage(pDC->m_hDC, m_data, m_Row, m_Col, 0, 0);
    即可实现我需要的功能,谢谢您的热情。
      

  5.   

     CDialogImageList dlg;
      CClientDC dc(this);
    =========
    这个不对,这里的dlg与你显示出来的对话框并不是一个实例。
      

  6.   


    您好,如果我采取如下
    void CTreeImageListView::onshow()
    {
    //CPicCutDoc* pDoc = GetDocument();
    //ASSERT_VALID(pDoc);
    CDialogImageList dlg;
    CClientDC dc(this);
    if(dlg.m_data) DrawImage(dc.m_hDC,dlg.m_data,dlg.m_Row,dlg.m_Col,0,0);
    }
    的调用方式的话,怎么养才能将对话框类中更新了的数据传递到view类中呢?谢谢您。我最初的想法其实是在多文档中实现,现在的麻烦是我不知道怎么在新开的窗口上画图像?期望能够得到您的指导哦,谢谢。
      

  7.   

    上面大版就说了,你在里面定义CDialogImageList dlg;
    然后引用这里的dlg是错误的,这里的dlg是一个新的对话框对象,与你弹出来的对话框根本就没有关系
      

  8.   

    您好,如果我采取如下
    void CTreeImageListView::onshow()

    //CPicCutDoc* pDoc = GetDocument();
    //ASSERT_VALID(pDoc);
    CDialogImageList dlg;
    CClientDC dc(this);
    if(dlg.m_data) DrawImage(dc.m_hDC,dlg.m_data,dlg.m_Row,dlg.m_Col,0,0);
    }
    的调用方式的话,怎么养才能将对话框类中更新了的数据传递到view类中呢?谢谢您。
    =========
    你上面的dlg.m_data之类全是空值,并不是对话框中设置的值。
    你应该改一下void CTreeImageListView::onshow()的定义,比如改成这样:
    void CTreeImageListView::onshow(CDialogImageList &dlg)
    然后在对话框中调用时:
    pNewView->onshow(this);将对话框指针传进去就行了。
      

  9.   

    谢谢您的指点,您说得很对,按照您的修改意见,我所需要的功能已经实现了,另外还想向您请教一下,就是如果在多文档程序中,想实现双击树控件中的选项时,在view类中弹出一个新窗口,并在其中显示当前的图像数据,该如何实现呢?不好意思,我对VC不是特别的熟,谢谢您。
      

  10.   

    就是如果在多文档程序中,想实现双击树控件中的选项时,在view类中弹出一个新窗口,并在其中显示当前的图像数据,该如何实现呢?不好意思,我对VC不是特别的熟,谢谢您。
    ===========
    单文档与多文档应该是一样的吧,应该没有什么区别,而且你上面所说的功能用不上多文档啊