簡體   English   中英

CDialog中的“應用”按鈕

[英]Apply button in CDialog

我有一個對話框,在其中按下“確定”按鈕后,程序將使用對話框中的數據並繪制圖表。 我需要繪制圖而不必像使用IDOK那樣關閉對話框,因此需要應用按鈕。 繪制對話框的代碼是,

INT_PTR val = dlg->DoModal();
if (    val == IDOK) {
  //draw plot
}

onOK和onApply的代碼

void DLg::OnOK() {

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

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

如何獲取DoModal()以在onApply()上返回值而不關閉對話框?

任何幫助,將不勝感激。

模態對話框無法返回值並使對話框保持打開狀態。 您可以使對話框為非模態對話框,也可以通過OnBnClickedApply函數在主窗口中發布一條消息來繪制該圖。

我傾向於將繪圖放到單獨的線程中,並在需要時調用它。 所以你可以

(1)在“應用”按鈕中再次調用OnDrawPlot

if (    val == IDOK) {
   AfxBeginThread(...);//draw plot
}
void DLg::OnBnClickedApply()
{
   AfxBeginThread(...);//draw plot
}

(2)使用EndDialog方法將返回值發送回DoModal

EndDialog中有哪些參數? 可以在此處找到示例

CDialog派生類中聲明一個變量,最好是public 然后在OnOK將此變量分配給適當的值。 呼叫者將直接使用它。

class Dlg : public CDialog
{
public:
   int TheVariable;
...
};

致電地點:

if(dlg.DoModal()==IDOK)
{
    dlg.TheVariable; // Use the variable
}

但是,如果您需要在對話框本身上繪制(而不是在已啟動該對話框的其他窗口上繪制),則不要OnOK覆蓋中調用CDialog::OnOKEndDialog 在這種情況下,您需要在對話框本身中進行繪制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM