[英]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::OnOK
或EndDialog
。 在這種情況下,您需要在對話框本身中進行繪制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.