static void CALLBACK Chart_DisPaly(char* m_stockCode, char* m_orderPrice, char* m_orderSide);//这是在对话框类里定义的回调函数.
void CALLBACK CCallChartDemoDlg::Chart_DisPaly(char* m_stockCode, char* m_orderPrice, char* m_orderSide)
{
theApp.ReceiveData(m_stockCode,[img=http://][/img]m_orderPrice,m_orderSide);//调用应用程序中自定义的函数
}
在应用程序里的ReceiveData函数如下:
void CCallChartDemoApp::ReceiveData(char* m_stockCode, char* m_orderPrice, char* m_orderSide)
{
CString bufCode(m_stockCode);
CString bufPrice(m_orderPrice);
CString bufSide(m_orderSide);
CString tempBuf;
pDemoDlg = new CCallChartDemoDlg;
pDemoDlg->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据。
pDemoDlg->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
}
我就是想让对话框上的static控件显示tempBuf里的数据,可是显示不出来。结果出错。不管怎么做,程序执行到最后一步就出错。我查看,tempBuf是拿到了数据,可就是在pDemoDlg里显示不出来,不知道怎么回事?我试图用SendMessage发送消息给对话框来实现,还是解决不了。我把对话改为非模态对话框,还是同样的问题。希望高手指点,感激万分!!!
23 个解决方案
#1
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据
后加pDemoDlg->CreateIndirect(...).
不过看起来代码问题比较多.
后加pDemoDlg->CreateIndirect(...).
不过看起来代码问题比较多.
#2
就是最后每到这里pDemoDlg->m_Static.SetWindowText(tempBuf)就运行不下去了。不知道什么原因?
#3
看到对话框了吗?没看到的话需要用CreateDialog来创建.
#4
pDemoDlg = new CCallChartDemoDlg;
对话框创建了吗?没创建肯定会出错了。。。
对话框创建了吗?没创建肯定会出错了。。。
#5
创建了,我用的是 new ...Create()...ShowWindow() 方法创建的。
#6
pDemoDlg = new CCallChartDemoDlg;
pDemoDlg->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据。
pDemoDlg->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
你这里pDemoDlg只是new出一个对象,并没有创建窗体啊
pDemoDlg->m_Static当然不可用
你可以用这个判断
::IsWindow(pDemoDlg->m_Static.GetSafeHwnd())
pDemoDlg->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据。
pDemoDlg->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
你这里pDemoDlg只是new出一个对象,并没有创建窗体啊
pDemoDlg->m_Static当然不可用
你可以用这个判断
::IsWindow(pDemoDlg->m_Static.GetSafeHwnd())
#7
问题是:窗体之前就有的,我只不过想把数据传过去!
#8
但是你这个pDemoDlg是新的啊 有没和那个窗体相关联
pDemoDlg->Create(IDD,this);
#9
在回调函数中增加字段 void *param
在回调函数中将param转换成你的对话框指针
CMyDialog *pDlg = (CMyDialog*)param;
if( null == pDlg ) reutrn ;
else
{
pDlg->SetWindowText("这是回调函数传回来的数据");
}
在回调函数中将param转换成你的对话框指针
CMyDialog *pDlg = (CMyDialog*)param;
if( null == pDlg ) reutrn ;
else
{
pDlg->SetWindowText("这是回调函数传回来的数据");
}
#10
按你说的方法也不行哥哥,我刚试过了,pDemoDlg 我就是用之前那个对话框的类创建的,用Create(IDD,this) 是重新创建一个窗体,而且this指针这里根本不能用(静态回调函数)。
#11
zhouyongku:
按你的方法去处理,CMyDialog *pDlg = (CMyDialog*)param;这里出现内存问题,程序在这里就执行不下去了。
按你的方法去处理,CMyDialog *pDlg = (CMyDialog*)param;这里出现内存问题,程序在这里就执行不下去了。
#12
调试下看这里pDemoDlg是不是空指针
#13
是空指针啊,程序执行到那里就不走了!
#14
我也不知道你的 void *param = NULL ;这个是用来干什么的?是接受数据?
#15
空指针说明没创建成功 当然不能对static赋值
#16
那怎么弄?
#17
终于看明白了.
把void CCallChartDemoApp::ReceiveData(char* m_stockCode, char* m_orderPrice, char* m_orderSide)这个函数从CallChartDemoApp.cpp和CallChartDemoApp.h中删除.
按下面修改CCallChartDemoDlg::Chart_DisPaly.
把void CCallChartDemoApp::ReceiveData(char* m_stockCode, char* m_orderPrice, char* m_orderSide)这个函数从CallChartDemoApp.cpp和CallChartDemoApp.h中删除.
按下面修改CCallChartDemoDlg::Chart_DisPaly.
void CALLBACK CCallChartDemoDlg::Chart_DisPaly(char* m_stockCode, char* m_orderPrice, char* m_orderSide)
{
CString bufCode(m_stockCode);
CString bufPrice(m_orderPrice);
CString bufSide(m_orderSide);
CString tempBuf;
this->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = this->buffer;//tempBuf是拿到了数据。
this->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
}
#18
靠,还是搞错了,是static,你要吧CCallChartDemoDlg指针传进来.
void CALLBACK CCallChartDemoDlg::Chart_DisPaly(CCallChartDemoDlg * lpThis,char* m_stockCode, char* m_orderPrice, char* m_orderSide)
{
CString bufCode(m_stockCode);
CString bufPrice(m_orderPrice);
CString bufSide(m_orderSide);
CString tempBuf;
pDemoDlg = lpThis;
pDemoDlg->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据。
pDemoDlg->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
}
#19
问题是不能给Chart_DisPaly函数增加CCallChartDemoDlg *lpThis这个参数。Chart_DisPaly 是固定的。
#20
不行哥哥,还是出错~
#21
Chart_DisPaly的函数指针接口是固定的,那个接口的参数都是固定的。
#22
在CallChartDemoApp.h声明类成员变量CCallChartDemoDlg *m_lpCCallChartDemoDlg;
找到创建CCallChartDemoDlg的地方,可能在CCallChartDemoApp::InitInstance()里.
CCallChartDemoDlg dlg;
m_pMainWnd = &dlg;//其实你完全可以用这个.
m_lpCCallChartDemoDlg = &dlg;//保存下来.
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
然后按你开始的想法:
找到创建CCallChartDemoDlg的地方,可能在CCallChartDemoApp::InitInstance()里.
CCallChartDemoDlg dlg;
m_pMainWnd = &dlg;//其实你完全可以用这个.
m_lpCCallChartDemoDlg = &dlg;//保存下来.
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
然后按你开始的想法:
void CALLBACK CCallChartDemoDlg::Chart_DisPaly(char* m_stockCode, char* m_orderPrice, char* m_orderSide)
{
CString bufCode(m_stockCode);
CString bufPrice(m_orderPrice);
CString bufSide(m_orderSide);
CString tempBuf;
pDemoDlg = theApp.m_lpCCallChartDemoDlg;//或者theApp.m_pMainWnd;
pDemoDlg->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据。
pDemoDlg->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
}
#23
哥哥,你太厉害了,这个问题终于解决了!感谢你了哥哥。不嫌弃的话弟弟我愿和你交个朋友!我的QQ:
641727358
641727358
#1
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据
后加pDemoDlg->CreateIndirect(...).
不过看起来代码问题比较多.
后加pDemoDlg->CreateIndirect(...).
不过看起来代码问题比较多.
#2
就是最后每到这里pDemoDlg->m_Static.SetWindowText(tempBuf)就运行不下去了。不知道什么原因?
#3
看到对话框了吗?没看到的话需要用CreateDialog来创建.
#4
pDemoDlg = new CCallChartDemoDlg;
对话框创建了吗?没创建肯定会出错了。。。
对话框创建了吗?没创建肯定会出错了。。。
#5
创建了,我用的是 new ...Create()...ShowWindow() 方法创建的。
#6
pDemoDlg = new CCallChartDemoDlg;
pDemoDlg->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据。
pDemoDlg->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
你这里pDemoDlg只是new出一个对象,并没有创建窗体啊
pDemoDlg->m_Static当然不可用
你可以用这个判断
::IsWindow(pDemoDlg->m_Static.GetSafeHwnd())
pDemoDlg->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据。
pDemoDlg->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
你这里pDemoDlg只是new出一个对象,并没有创建窗体啊
pDemoDlg->m_Static当然不可用
你可以用这个判断
::IsWindow(pDemoDlg->m_Static.GetSafeHwnd())
#7
问题是:窗体之前就有的,我只不过想把数据传过去!
#8
但是你这个pDemoDlg是新的啊 有没和那个窗体相关联
pDemoDlg->Create(IDD,this);
#9
在回调函数中增加字段 void *param
在回调函数中将param转换成你的对话框指针
CMyDialog *pDlg = (CMyDialog*)param;
if( null == pDlg ) reutrn ;
else
{
pDlg->SetWindowText("这是回调函数传回来的数据");
}
在回调函数中将param转换成你的对话框指针
CMyDialog *pDlg = (CMyDialog*)param;
if( null == pDlg ) reutrn ;
else
{
pDlg->SetWindowText("这是回调函数传回来的数据");
}
#10
按你说的方法也不行哥哥,我刚试过了,pDemoDlg 我就是用之前那个对话框的类创建的,用Create(IDD,this) 是重新创建一个窗体,而且this指针这里根本不能用(静态回调函数)。
#11
zhouyongku:
按你的方法去处理,CMyDialog *pDlg = (CMyDialog*)param;这里出现内存问题,程序在这里就执行不下去了。
按你的方法去处理,CMyDialog *pDlg = (CMyDialog*)param;这里出现内存问题,程序在这里就执行不下去了。
#12
调试下看这里pDemoDlg是不是空指针
#13
是空指针啊,程序执行到那里就不走了!
#14
我也不知道你的 void *param = NULL ;这个是用来干什么的?是接受数据?
#15
空指针说明没创建成功 当然不能对static赋值
#16
那怎么弄?
#17
终于看明白了.
把void CCallChartDemoApp::ReceiveData(char* m_stockCode, char* m_orderPrice, char* m_orderSide)这个函数从CallChartDemoApp.cpp和CallChartDemoApp.h中删除.
按下面修改CCallChartDemoDlg::Chart_DisPaly.
把void CCallChartDemoApp::ReceiveData(char* m_stockCode, char* m_orderPrice, char* m_orderSide)这个函数从CallChartDemoApp.cpp和CallChartDemoApp.h中删除.
按下面修改CCallChartDemoDlg::Chart_DisPaly.
void CALLBACK CCallChartDemoDlg::Chart_DisPaly(char* m_stockCode, char* m_orderPrice, char* m_orderSide)
{
CString bufCode(m_stockCode);
CString bufPrice(m_orderPrice);
CString bufSide(m_orderSide);
CString tempBuf;
this->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = this->buffer;//tempBuf是拿到了数据。
this->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
}
#18
靠,还是搞错了,是static,你要吧CCallChartDemoDlg指针传进来.
void CALLBACK CCallChartDemoDlg::Chart_DisPaly(CCallChartDemoDlg * lpThis,char* m_stockCode, char* m_orderPrice, char* m_orderSide)
{
CString bufCode(m_stockCode);
CString bufPrice(m_orderPrice);
CString bufSide(m_orderSide);
CString tempBuf;
pDemoDlg = lpThis;
pDemoDlg->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据。
pDemoDlg->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
}
#19
问题是不能给Chart_DisPaly函数增加CCallChartDemoDlg *lpThis这个参数。Chart_DisPaly 是固定的。
#20
不行哥哥,还是出错~
#21
Chart_DisPaly的函数指针接口是固定的,那个接口的参数都是固定的。
#22
在CallChartDemoApp.h声明类成员变量CCallChartDemoDlg *m_lpCCallChartDemoDlg;
找到创建CCallChartDemoDlg的地方,可能在CCallChartDemoApp::InitInstance()里.
CCallChartDemoDlg dlg;
m_pMainWnd = &dlg;//其实你完全可以用这个.
m_lpCCallChartDemoDlg = &dlg;//保存下来.
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
然后按你开始的想法:
找到创建CCallChartDemoDlg的地方,可能在CCallChartDemoApp::InitInstance()里.
CCallChartDemoDlg dlg;
m_pMainWnd = &dlg;//其实你完全可以用这个.
m_lpCCallChartDemoDlg = &dlg;//保存下来.
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
然后按你开始的想法:
void CALLBACK CCallChartDemoDlg::Chart_DisPaly(char* m_stockCode, char* m_orderPrice, char* m_orderSide)
{
CString bufCode(m_stockCode);
CString bufPrice(m_orderPrice);
CString bufSide(m_orderSide);
CString tempBuf;
pDemoDlg = theApp.m_lpCCallChartDemoDlg;//或者theApp.m_pMainWnd;
pDemoDlg->buffer = bufCode + "|" + bufPrice + "|" + bufSide;//数据拿到啦
tempBuf = pDemoDlg->buffer;//tempBuf是拿到了数据。
pDemoDlg->m_Static.SetWindowText(tempBuf);//pDemoDlg为对话框指针(这里出错,执行不下去了)
}
#23
哥哥,你太厉害了,这个问题终于解决了!感谢你了哥哥。不嫌弃的话弟弟我愿和你交个朋友!我的QQ:
641727358
641727358