大家好,今天遇到了一个很奇怪的问题,想向各位请教一下,在此先行谢过啦。是这样的,我在单文档程序中新建了一个名为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类指针的获取出现了问题。
渴望能够得到热心朋友的帮助,万分感谢。程序界面如下:
解决方案 »
- EXCEL.EXE 问题
- 如何把combox的值传递给另一个combox中?
- xWidgets 编译, 工程部署, 自动build, 完整build 和设置工程
- 能不能知道某个程序偷偷执行了截屏、监测按键、遍历全部窗口之类操作?
- VB调用VC写的ocx时,怎样才能传递一个int类型指针,令变量的值在ocx函数中改变
- 请问,怎样在SDI中实现属性页的界面,基于CView类?
- 请大家务必帮帮忙,CHARFORMAT 与 CFONT 之间如何转换,先谢过大家!!分数不够可以再加
- _T表示什么意思
- 有WHO知道的共享软件SinaTicker的源程序代码?
- 关于派生的问题。
- 请教:启动自已写的EXE程序,并在窗口上点击“启动游戏客户端”按钮,指定路径并启动相应程序,
- 求助!初始化函数中用createprocess调用程序后主介面却自动隐藏了
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画不出你想要的东西.
pNewView->onshow();
替换为
CDC *pDC = pNewView->GetDC();
DrawImage(pDC->m_hDC, m_data, m_Row, m_Col, 0, 0);
即可实现我需要的功能,谢谢您的热情。
CClientDC dc(this);
=========
这个不对,这里的dlg与你显示出来的对话框并不是一个实例。
您好,如果我采取如下
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是错误的,这里的dlg是一个新的对话框对象,与你弹出来的对话框根本就没有关系
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);将对话框指针传进去就行了。
===========
单文档与多文档应该是一样的吧,应该没有什么区别,而且你上面所说的功能用不上多文档啊