我有一个对话框,其中有8个Dynamic Read-Only Edit Boxes
,其中的7/8将容纳不同的文本字符串,最后一个为空。我想做的是:当某个用户clicks
位于Edit Boxes
的其中1个(包含文本字符串)中时,该文本将显示为空的Edit Box
。如果你们对应该如何做有任何想法,我将不胜感激。
以下是我尝试过的一些代码:
void CTab1::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
...
DDX_Text(pDX, IDC_TAB1CMTBOX, m_StrShow);
}
BEGIN_MESSAGE_MAP(CTab1, CDialog)
...
ON_CONTROL_RANGE(EN_SETFOCUS, 4000, 4100, &CTab1::OnEditBoxClicked)
END_MESSAGE_MAP()
void CTab1::OnEditBoxClicked(UINT nID)
{
switch (nID)
{
case 4001:
GetDlgItemText(4001, m_CmtText);
m_CmtText = m_StrShow;
UpdateData(FALSE);
break;
case 4003:
GetDlgItemText(4003, m_CmtText);
m_CmtText = m_StrShow;
SetDlgItemText(IDC_TAB1CMTBOX, m_StrShow);//This line doesn't work
UpdateData(FALSE);
break;
...
}
答案 0 :(得分:1)
我看到的东西您显然只是交换了变量。
void CTab1::OnEditBoxClicked(UINT nID)
{
switch (nID)
{
case 4003:
GetDlgItemText(4003, m_CmtText); // Read ctrl Text to m_CmtString
// m_CmtText = m_StrShow; // then Write immediately m_strShow to m_CmtText. Which make no sense
m_StrShow = m_CmtText; // <-- swapped
// SetDlgItemText(IDC_TAB1CMTBOX, m_StrShow); // sure? You want show the Text in IDC_TAB1CMTBOX ?
SetDlgItemText(IDC_SHOWBOX, m_StrShow); // replace IDC
UpdateData(FALSE);
break;
..
}
这就是我要做的,简化代码。
void CTab1::OnEditBoxClicked(UINT nID)
{
if (UpdateData(TRUE))
{
GetDlgItemText(nID, m_CmtText); // Read ctrl Text nID
SetDlgItemText(IDC_SHOWBOX, m_CmtText); // Show the ctrl nID Text to ShowBox
UpdateData(FALSE);
}
}