VC++ 调用其它类的函数

来源:百度知道 编辑:UC知道 时间:2024/05/07 19:50:48
比如说对话框A中有一个editbox,初始我设了字符串"first",并让他显示。现在A中还有一个BUTTON,我点击进入B对话框。B对话框中有一按钮,按下后可以使editbox里的内容进行改变,比如变成"second"。
我在B话框按钮中用sendmessage这个函数去做,实现了。在DEBUG里编译运行都没问题,可是release里就出现问题了。
B类中按钮代码如下:
void B::OnOK()
{
GetParent()->SendMessage(WM_FIRST,0,0);
}
A类中要调用的函数为
void A::changcontent()
{
m_edit="second";
UpdateData(false);
}

望高手指点,尽快回复。最好能再把SendMessage与PostMessage两个函数的区别分别举例告诉小弟,不甚感谢。如果答案很好,很详细,我会追加分数的!
不懂者,请勿随意搜索回复,谢谢!最好能提供原代码!
QQ:124502957 邮箱:gterrybogard@126.com
望哪位大哥大姐懂得如何解决的与本人联系,QQ交谈直接快速!

如果没有要求一定要用SendMessage,则可以通过全局指针变量来完成

A *p;//全局变量
A()//A的构造函数
{
...
p = this;
}
void B::OnOK()
{
p->m_edit="second";
p->UpdateData(false);
}

确定A/B对话框的关系是父子关系嘛?
要确定能在B中得到A窗口的句柄才行。你如果在一个经常中,最好在B对话框类中,定义一个窗口指针变量,指向A保证窗口句柄的准确。自定义的消息 wm_first,不要和别的自定义消息冲突,最好设大一点。
还有,在release模式下一样可以调试的,你可以观察消息正确送出没有。
关于SendMessage 和 PostMessage的说明:
Send就跟快递送货一样,快递员负责把东西送到主人家。即SendMessage是阻塞调用,调用时候主调阻塞,等待系统把此消息送到目标窗口,然后调用响应的消息处理函数,在返回到主调。
Post就跟发信一样,写好了,塞进邮箱就不管了,剩下的事情叫给邮递员来做。主调不阻塞,发了就不管继续执行。PostMessage就是把消息放入目标窗口所在的线程的消息队列中,然后由目标线程的线程循环负责分发。

Send直接调用窗口消息处理函数,不结果线程消息队列。Post通过线程消息队列。
消息处理就这么简单。

LZ的程序里,对话框B是模态还是非模态的?如果是模态的话,GetParent好像不一定能得到A的句柄吧。