在SDI中,如何从 formview向对话框中传递数据

golfwk597 2011-05-31 09:59:16
在VC++ SDI中,我在 formview设置一些编辑控件与相应的变量,然后通过formview上的一个按钮打开一个对话框, 在该对话框中显示图像,但要从formview中得到一些变量数据,如何从 formview向对话框中传递数据。


我想通过指针的方式解决上面的问题,我昨天网上查了下:
Test.h:(应用程序类头文件)
class CTestApp : public CWinApp
{ public:
class CTestView* g_pView; //全局变量 视图类指针
…………
}
TestView.cpp:(视图类文件)
CTestView::CTestView()
{ ((CELIDMAFApp *)AfxGetApp())->g_pView=this; //在视图中初始化 视图指针
}
在对话框中的某函数中要访问视图类中的某个变量m_x:
void CDlg::XXX()
{ float temp;
CTestView *app = ((CTestApp *)AfxGetApp())->g_pView; //生成指向应用程序类的视图指针
temp=app->m_x; //访问视图中的变量m_x;
}
问题是:
如果不要 temp=app->m_x; 这行,则编译成功;
如果运行 temp=app->m_x; ,则编译失败,显示此句错误:use of undefined type 'CTestView'

添加testview后,编译失败
error C2143: syntax error : missing ';' before '*'
error C2501: 'CTestDoc' : missing storage-class or type specifiers
error C2501: 'GetDocument' : missing storage-class or type specifiers


不知道怎么回事? 请帮助,谢谢各位




...全文
107 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
King_hhuang 2011-05-31
当然可以通过父窗口的指针访问,但是你程序中的用法可能有问题
  • 打赏
  • 举报
回复
golfwk597 2011-05-31
我也不知道为什么,有时候我需要加入view的头文件,就编译错误。。
error C2143: syntax error : missing ';' before '*'
: error C2501: 'CLztfDoc' : missing storage-class or type specifiers
: error C2501: 'GetDocument' : missing ……


7楼的方法我试了,好象还是不可以。难道只能用变量传值吗,因为我需要用到很多的变量。所以获取父窗口指针的话,方便一些
  • 打赏
  • 举报
回复
King_hhuang 2011-05-31
怎么用蹦出来'CLztfDoc' 呢?
不知道你的代码怎么写的

实在不行,你将CLztfView中的变量直接赋值给CCangKu1Dlg的变量
先在CCangKu1Dlg中定义m_at;

void CLztfView::OnButtonck1()
{
CCangKu1Dlg cangku1;
cangku1.m_at = at;//类似这样把值传进去,如果你希望在CCangKu1Dlg中改变at,就传它的指针或引用
if(IDOK == cangku1.DoModal());
}
  • 打赏
  • 举报
回复
Eleven 2011-05-31
[Quote=引用 6 楼 golfwk597 的回复:]
这样又回到原来的错误了。。包含lztfView.h
则编译错误为

: error C2143: syntax error : missing ';' before '*'
: error C2501: 'CLztfDoc' : missing storage-class or type specifiers
: error C2501: 'GetDocument' : missing ……
[/Quote]
view类的h文件上写上class CLztDoc;
  • 打赏
  • 举报
回复
golfwk597 2011-05-31
这样又回到原来的错误了。。包含lztfView.h
则编译错误为

: error C2143: syntax error : missing ';' before '*'
: error C2501: 'CLztfDoc' : missing storage-class or type specifiers
: error C2501: 'GetDocument' : missing storage-class or type specifiers

  • 打赏
  • 举报
回复
King_hhuang 2011-05-31
你的CCangKu1Dlg中没有包含CLztfView的头文件啊
  • 打赏
  • 举报
回复
golfwk597 2011-05-31

BOOL CCangKu1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
CLztfView* pView=(CLztfView*)this->GetParent();
pView->at;
return TRUE; }

编译提示
error C2065: 'CLztfView' : undeclared identifier
error C2065: 'pView' : undeclared identifier
error C2059: syntax error : ')'

这是什么原因呢。。
  • 打赏
  • 举报
回复
King_hhuang 2011-05-31
[Quote=引用 2 楼 golfwk597 的回复:]
引用 1 楼 visualeleven 的回复:
你打开对话框的代码怎么写的?指定的父窗口是CFormView吗?



void CLztfView::OnButtonck1()
{
CCangKu1Dlg cangku1;
if(IDOK == cangku1.DoModal());
}

请问怎么指定父窗口
[/Quote]

你这个父窗口就是CLztfView啦,你可以在CCangKu1Dlg用GetParent获得CLztfView的指针,然后调用CLztfView的变量,或者直接在if(IDOK == cangku1.DoModal());之前将CLztfView的变量赋值给CCangKu1Dlg的成员变量(也可以通过自定义的成员函数赋值)
  • 打赏
  • 举报
回复
golfwk597 2011-05-31
[Quote=引用 1 楼 visualeleven 的回复:]
你打开对话框的代码怎么写的?指定的父窗口是CFormView吗?
[/Quote]


void CLztfView::OnButtonck1()
{
CCangKu1Dlg cangku1;
if(IDOK == cangku1.DoModal());
}

请问怎么指定父窗口
  • 打赏
  • 举报
回复
Eleven 2011-05-31
你打开对话框的代码怎么写的?指定的父窗口是CFormView吗?
  • 打赏
  • 举报
回复
golfwk597 2011-05-31
恩,谢谢了,我再看看,结贴了
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2011-05-31 09:59
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……