通过 MFC 中的函数更改控件的值?
Change Control's Value by a Function in MFC?
我为 IDC_EDIT1 控件设置了一个 int 变量。
现在我想用一个函数来改变它,但是当点击按钮时,显示错误!
void test()
{
CthDlg d;
d.m_text1 = 5;
d.UpdateData(FALSE);
}
void CthDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
// pThread = AfxBeginThread(ThreadFunction, THREAD_PRIORITY_NORMAL);
test();
}
控件是在您调用 DoModal 或 Create 时创建的。
因此只有在创建对话框时调用 UpdateData 才会成功。
这是通常的顺序:可以在启动控件之前设置值成员。数据在创建对话框时传输,并在使用 OnOK 关闭对话框时从控件传输回数据成员。
在test
函数中,您定义了CthDlg
class 的一个全新实例,并尝试对其进行修改。这将不起作用,因为它没有正确创建,并且与正在显示的实际对话框无关。
相反,如果 test
是一个独立的(非成员)函数,那么您应该将实际的对话框实例作为参数传递,然后使用它。
例如
void tesy(CthDlg& dlg)
{
dlg.m_text1 = ...;
dlg.UpdateData(FALSE);
}
void CthDlg::OnBnClickedOk()
{
test(*this);
}
我为 IDC_EDIT1 控件设置了一个 int 变量。 现在我想用一个函数来改变它,但是当点击按钮时,显示错误!
void test()
{
CthDlg d;
d.m_text1 = 5;
d.UpdateData(FALSE);
}
void CthDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
// pThread = AfxBeginThread(ThreadFunction, THREAD_PRIORITY_NORMAL);
test();
}
控件是在您调用 DoModal 或 Create 时创建的。 因此只有在创建对话框时调用 UpdateData 才会成功。
这是通常的顺序:可以在启动控件之前设置值成员。数据在创建对话框时传输,并在使用 OnOK 关闭对话框时从控件传输回数据成员。
在test
函数中,您定义了CthDlg
class 的一个全新实例,并尝试对其进行修改。这将不起作用,因为它没有正确创建,并且与正在显示的实际对话框无关。
相反,如果 test
是一个独立的(非成员)函数,那么您应该将实际的对话框实例作为参数传递,然后使用它。
例如
void tesy(CthDlg& dlg)
{
dlg.m_text1 = ...;
dlg.UpdateData(FALSE);
}
void CthDlg::OnBnClickedOk()
{
test(*this);
}