[英]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.