【问题标题】:MFC: Representing adjacency matrix in edit boxMFC:在编辑框中表示邻接矩阵
【发布时间】:2019-12-13 15:07:17
【问题描述】:

我有一个基于对话框的程序 (MFC),我想在其中进行邻接图表示。我有一个编辑框 (IDC_EDIT) 和 MFC Masked Edit 控件 (IDC_VERTEXES),它有一个带有 2 位数字的掩码。

我写了一个代码,当失去对 IDC_VERTEXES 的关注时,IDC_EDIT 将被矩阵填充,其中所有数字都为 0。

void CTAB1::OnEnKillfocusVertexes()
{
    CString Text;
    GetDlgItemText(IDC_VERTEXES, Text);
    int x = _wtoi(Text);
    if (!Text.IsEmpty()) {
        SetDlgItemText(IDC_EDIT, L"");
    }
    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT);
    int nPos = 0;
    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < x; j++)
        {   

            pEdit->SetSel(nPos, nPos);
            pEdit->ReplaceSel(L"0");
            pEdit->ReplaceSel(L" ");

        }
        pEdit->ReplaceSel(L"\r\n");
    }

} 

它按我的意愿工作,除了一件事。假设 IDC_VERTEXES 为 3 (x = 3)。 IDC_EDIT 应该是这样的:

0 0 0
0 0 0
0 0 0

但它看起来像这样:

0 
0 0 0 
0 0 0 
0 0

是我遗漏了什么还是我把 \r\n 放错了地方?

【问题讨论】:

    标签: c++ mfc


    【解决方案1】:

    您在每次迭代中将插入符号位置重置为编辑控件的开头。

    相反,您可以在开始时设置一次插入符号位置。 ReplaceSel 将简单地插入插入符号并将插入符号向前移动。示例:

    pEdit->SetSel(nPos, nPos);
    for(int i = 0; i < x; i++)
    {
        for(int j = 0; j < x; j++)
        {
            pEdit->ReplaceSel(L"0");
            pEdit->ReplaceSel(L" ");
        }
        pEdit->ReplaceSel(L"\r\n");
    }
    

    或者您可以将pEdit-&gt;SetSel(nPos, nPos); 放在每行的开头(这会以相反的顺序插入行)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多