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

标签 c++ mfc

我有一个基于对话框的程序(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);(这将以相反的顺序插入行)

关于c++ - MFC:在编辑框中表示邻接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59325159/

相关文章:

c++ - MSVC 对这段代码很满意,但 GCC 不太热衷

c++ operator new 这在内部是如何工作的

c++ - Qt:自定义插槽不起作用

c++ - 如何将库 curlpp 添加到 C++ 项目

C# 用于 UI,C++ 用于库

c# - 如何从exe中获取返回值并重新启动它

mysql - 如何使用 MFC ODBC 在 MySQL 中存储图像?

visual-studio - fatal error LNK1104 无法打开文件 C :\users\user\documents\visual. obj

c++ - 使用 ios::binary 或 ios::out 或两者打开文件有什么区别?

c++ - 在非成员函数中访问MFC对话框的成员变量