关于两个窗口的值传递,求高人解

iwill_chyw 2008-07-08 11:04:32
MFC下.我定义一个对话框(CTestDlg).在这个框中本身有一个CListBox(ID:ID_LIST1)控件
然后再在这个对话框添加了一个属性页(CShowOrig),其中也有一个CListBox(ID:ID_LIST2)控件
现在在程序中有这么一函数:
UINT CTestDlg::ReceiveThread(void *param)
{
CTestDlg *dlg=(CTestDlg*)param;
CListBox *box=(CListBox *)dlg->GetDlgItem(IDC_LIST1);
....
}

我现在想把IDC_LIST1换成IDC_LIST2.单单改了之后不行.程序能跑.但是功能实现不了.
不知道问题出在哪儿了.望高人解答
...全文
101 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwill_chyw 2008-07-08
  • 打赏
  • 举报
回复
TO ycoder
我模仿着试了试
CShowOrigDate *dlg=(CShowOrigDate*)param;

可是调用的函数中的用dlg->m_devind这样的变量.所以就会提示m_devind不可获取
iwill_chyw 2008-07-08
  • 打赏
  • 举报
回复
TO meteor_625
CListBox(ID_LIST2)的父窗口确实是CShowOrig,dlg是指的也是CTestDlg .我也认为是这个问题.但具体怎么改.试了几种办法.都不行
ycoder 2008-07-08
  • 打赏
  • 举报
回复
先获得属性页的指针,再通过这个指针去获得IDC_LIST2的指针,你试试看
meteor_625 2008-07-08
  • 打赏
  • 举报
回复
CListBox(ID_LIST2)的父窗口是CShowOrig吧,而dlg是指的CTestDlg
我猜想
iwill_chyw 2008-07-08
  • 打赏
  • 举报
回复
TO ycoder

问题已解.非常非常感谢
谢谢
ycoder 2008-07-08
  • 打赏
  • 举报
回复
还有,刚才没有仔细看你的回复,关于错误"C2440"的解决方法是:转换类型。
CShowOrigDate *pShowOrigDate = (CShowOrigDate*)dlg->GetDlgItem(???);
ycoder 2008-07-08
  • 打赏
  • 举报
回复
我在上面写的代码是不能运行的,只是个大概的方法。

那我再写得仔细点了,
如果你的IDC_LIST2是属性页CShowOrig的公有成员变量,并且,
CShowOrig是CTestDlg的公有成员变量。那么就好办了,就直接使用成员变量了,
伪代码如下:
UINT CTestDlg::ReceiveThread(void *param)
{
CTestDlg *dlg=(CTestDlg*)param;
CListBox *box=(CListBox *)&(dlg->m_CShowOrig.m_list2);
}
iwill_chyw 2008-07-08
  • 打赏
  • 举报
回复
TO ycoder
按你的办法试了下.还是不行.
针对 CShowOrigDate *pShowOrigDate = dlg->GetDlgItem(???);
提示错误
error C2440: 'initializing' : cannot convert from 'class CWnd *' to 'class CShowOrigDate *'
ycoder 2008-07-08
  • 打赏
  • 举报
回复
可能是这样子的:
UINT CTestDlg::ReceiveThread(void *param)
{
CTestDlg *dlg=(CTestDlg*)param;
CListBox *box=(CListBox *)dlg->GetDlgItem(IDC_LIST1);
....
CShowOrigDate *pShowOrigDate = dlg->GetDlgItem(???);
CListBox *box1=(CListBox *)pShowOrigDate->GetDlgItem(IDC_LIST2);
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧