簡體   English   中英

與結構成員變量關聯的對話框控件

[英]Associated dialog controls with a structure member variables

我有這個struct定義:

typedef struct tagPublicTalkInfo
{
    CString     strAwayCong1;
    CString     strAwayCong2;
    CString     strAwayBrother1;
    CString     strAwayBrother2;
    CString     strChairman;
    CString     strCong;
    CString     strHosp;
    CString     strReader;
    CString     strBrother;
    CString     strTheme;
    CString     strWTConductor;          
    CString     strInterpreter;          
    CString     strMisc;                 
    CString     strWatchtowerStudyTheme; 
    CString     strServiceTalkTheme;     
    CString     strBibleVersesReader;    
    CString     strVideoHost;            
    CString     strVideoCohost;          
    CString     strOpeningPrayer;        
    CString     strClosingPrayer;        
    int         iSongStart;              
    int         iSongMiddle;             
    int         iSongEnd;                
    int         iThemeNumber;            

} S_TALK_INFO;

這個結構被傳遞到一個對話框中並像這樣檢索:

void CWeekendMeetingDlg::SetWeekendMeetingInfo(S_TALK_INFO &rsTalkInfo)
{
    m_sWeekendMeetingInfo = rsTalkInfo;
}

S_TALK_INFO CWeekendMeetingDlg::GetWeekendMeetingInfo()
{
    return m_sWeekendMeetingInfo;
}

目前我正在將對話框控件映射到不同的變量並傳輸到/從我的結構中傳輸。 例如:

m_strChairman = m_sWeekendMeetingInfo.strChairman;
m_sWeekendMeetingInfo.strChairman = m_strChairman;

是否可以將 map 我的控件直接用於結構成員CString變量,或者這會被認為是不好的做法?

是的,正如 Adrian 所說,您不必將自己局限於使用向導會交給您的變量。 我使用我的測試項目通過 about 對話框執行此操作。

struct data_type {
    CString a_data;
    CString b_data;
};

class CAboutDlg : public CDialogEx
{
    data_type& dlg_data;
public:
    CAboutDlg(data_type&);
    //CString dummy;
    enum { IDD = IDD_ABOUTBOX };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
protected:
    DECLARE_MESSAGE_MAP()
public:
};

CAboutDlg::CAboutDlg(data_type& data) : CDialogEx(IDD_ABOUTBOX), dlg_data(data)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1_ABOUT, dlg_data.a_data);
    DDX_Text(pDX, IDC_EDIT2_ABOUT, dlg_data.b_data);
}

// App command to run the dialog
void CMFCApplicationApp::OnAppAbout()
{
    data_type data{ L"this", L"that" };
    CAboutDlg aboutDlg(data);
    aboutDlg.DoModal();
    assert(false);
}

在這里,我傳遞了對外部數據的引用以直接對其進行處理。 由於DoDataExchange機制,只有用戶按下OK才會修改數據。 我使用向導添加了第一個DDX_Text處理程序,因此注釋值dummy 我只是復制並粘貼了那個處理程序來添加第二個。

我將斷言放在 app 命令中,這樣程序就會在那里中斷並檢查數據。

暫無
暫無

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

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