首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CDialog中应用按钮

在CDialog中应用按钮
EN

Stack Overflow用户
提问于 2014-10-15 04:55:22
回答 3查看 500关注 0票数 0

我有一个对话框,在按下OK按钮后,程序使用对话框中的数据绘制一个绘图。我需要绘制的情节,而不必关闭对话框与图标,因此应用按钮。绘制对话框的代码是,

代码语言:javascript
复制
INT_PTR val = dlg->DoModal();
if (    val == IDOK) {
  //draw plot
}

onOK和onApply的代码

代码语言:javascript
复制
void DLg::OnOK() {

    GetDataGrid();
    CDialog::OnOK();
}

void DLg::OnBnClickedApply()
{
    GetDataGrid();
}

如何使DoModal()在不关闭对话框的情况下返回onApply()上的值?

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-15 05:34:14

我倾向于将绘图放在一个单独的线程中,并在需要的地方调用它。所以你可以

(1)在“应用”按钮中再次调用OnDrawPlot

代码语言:javascript
复制
if (    val == IDOK) {
   AfxBeginThread(...);//draw plot
}
void DLg::OnBnClickedApply()
{
   AfxBeginThread(...);//draw plot
}

(2)使用DoModal方法将返回值发送回EndDialog

EndDialog中有哪些参数?一个例子可以找到这里。

票数 1
EN

Stack Overflow用户

发布于 2014-10-15 05:10:19

模态对话框不能返回值并使对话框处于打开状态。您可以使您的对话非模态,或张贴您的主窗口从OnBnClickedApply函数的消息,使它绘制的情节。

票数 3
EN

Stack Overflow用户

发布于 2014-10-15 05:42:05

CDialog派生类中声明一个变量,最好是public。然后仅在OnOK将此变量赋值为适当的值。来电者会直接使用它。

代码语言:javascript
复制
class Dlg : public CDialog
{
public:
   int TheVariable;
...
};

呼叫站点:

代码语言:javascript
复制
if(dlg.DoModal()==IDOK)
{
    dlg.TheVariable; // Use the variable
}

但是,如果您需要使用对话框本身(而不是打开对话框的其他窗口),那么不需要在OnOK覆盖中调用CDialog::OnOKEndDialog。在这种情况下,您需要在对话框本身中进行绘画。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26374728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档