如何实现一个标签控件中输入的数据与另一对话框同步,多谢!!!
大家好,麻烦大家了!!最近在做上图的一个项目,现在急需的是“基础数据”这个标签控件中输入的数据同步显示到右边某一static text中(右图写3_1的部分)。
本来想按照网上方法用OnSendMsg()
CMainFrame * pMainFrm = (CMainFrame *)AfxGetApp()->GetMainWnd()之类的。但是实力实在不够,没做出来。希望能够借到大家的帮助。左边是基于CDialogEx的,右边是基于CFormView的。
最好能给出源码,麻烦了。
1.最好是左边先判断是否有焦点if(GetFocus()==GetDlgItem(IDC_EDIT1)),然后当再失去焦点时将数据传输到右边对话框中。
2.如果嫌上边过于麻烦,那左边对话框点击一个button控件能发送到右边显示也行。只要能实现就行。
再次谢谢大家!唉,又是凌晨4点,又没觉睡了。 数据同步 失去焦点 标签控件
[解决办法]
这个要用到多线程了!用右边的对话框时刻去获取左边的数据就行了
[解决办法]
有窗口句柄, 直接调用SetWindowText即可.
[解决办法]
多线程不是很好的主意。性能开销太大。
用观察者模式,右侧的监听左侧的,一旦有变化,右侧的会被通知,然后做出相应调整。
[解决办法]
一个notify不就可以了?其中有什么难点吗
[解决办法]
在编辑框上点击鼠标右键, 选择"事件处理程序" , 然后选择EN_CHANGE, 这个消息是指编辑框中的文本改变后响应. 就是你一输入或者删除东西, 就会响应这个消息了.
然后在有静态文本框的那里面, 对每个静态文本框编辑ID号, 不要用默认的IDC_STATIC.
然后在静态框所在的对话框的类中写一个公有函数, 实现设置静态文本框的文本.
void CXXXDlg::SetStaticText1(LPCTSTR strText)
{
SetDlgItemText(IDC_STATIC1, strText); //这里假设其中一个静态文本框的ID为 IDC_STATIC1
}
然后在EN_CHANGE的消息响应中, 得到CXXXDlg的指针 (需要通过父窗口传给过来).
然后就可以访问SetStaticText1, 设置静态文本框的值了.
这里假设
主对话框类为 CMainDlg.
编辑框所在类为 CEditDlg:
静态文本框所在类为 CStaticDlg:
下面是伪代码: 注意, 下面只是关键代码.
class CMainDlg
{
public:
CEditDlg *m_pEditDlg;
CStaticDlg *m_pStaticDlg;
public:
void OnCreate(xxxxx)
{
//假设你的CEditDlg和CStaicDlg在这里创建的.
m_pEditDlg = new CEditDlg;
m_pEditDlg->Create(XXXX);
m_pStaticDlg = new CStaticDlg;
m_pStaticDlg->Create(XXXX);
//关键代码
m_pEditDlg->SetStaticNotify(m_pStaticDlg);
}
};
class CEditDlg
{
public:
CStaticDlg *m_pSTDlg;
public:
void SetStaticNotify(CStaticDlg *pSta)
{
m_pSTDlg = pSta;
}
void OnEnChange(XX)//EN_CHANGE响应函数
{
CString Str;
GetDlgItemText(IDC_EDIT1,Str);//假设编辑框的ID为 IDC_EDIT1
m_pSTDlg->SetStaticText1(Str);
}
};
class CStaticDlg
{
public:
void SetStaticText1(LPCTSTR strText)
{
SetDlgItemText(IDC_STATIC1, strText); //假设静态文本框ID为IDC_STATIC1
}
};