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