MFC:在编辑框中表示邻接矩阵

MFC: Representing adjacency matrix in edit box

我有一个基于对话框的程序 (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 放错了地方?

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

相反,您可以在开始时设置一次插入符号位置。 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->SetSel(nPos, nPos); 放在每行的开头(这将以相反的顺序插入行)