我有一个对话框,在按下OK按钮后,程序使用对话框中的数据绘制一个绘图。我需要绘制的情节,而不必关闭对话框与图标,因此应用按钮。绘制对话框的代码是,
INT_PTR val = dlg->DoModal();
if ( val == IDOK) {
//draw plot
}onOK和onApply的代码
void DLg::OnOK() {
GetDataGrid();
CDialog::OnOK();
}
void DLg::OnBnClickedApply()
{
GetDataGrid();
}如何使DoModal()在不关闭对话框的情况下返回onApply()上的值?
任何帮助都将不胜感激。
发布于 2014-10-15 05:34:14
我倾向于将绘图放在一个单独的线程中,并在需要的地方调用它。所以你可以
(1)在“应用”按钮中再次调用OnDrawPlot
if ( val == IDOK) {
AfxBeginThread(...);//draw plot
}
void DLg::OnBnClickedApply()
{
AfxBeginThread(...);//draw plot
}(2)使用DoModal方法将返回值发送回EndDialog
EndDialog中有哪些参数?一个例子可以找到这里。
发布于 2014-10-15 05:10:19
模态对话框不能返回值并使对话框处于打开状态。您可以使您的对话非模态,或张贴您的主窗口从OnBnClickedApply函数的消息,使它绘制的情节。
发布于 2014-10-15 05:42:05
在CDialog派生类中声明一个变量,最好是public。然后仅在OnOK将此变量赋值为适当的值。来电者会直接使用它。
class Dlg : public CDialog
{
public:
int TheVariable;
...
};呼叫站点:
if(dlg.DoModal()==IDOK)
{
dlg.TheVariable; // Use the variable
}但是,如果您需要使用对话框本身(而不是打开对话框的其他窗口),那么不需要在OnOK覆盖中调用CDialog::OnOK或EndDialog。在这种情况下,您需要在对话框本身中进行绘画。
https://stackoverflow.com/questions/26374728
复制相似问题