我有一个基于对话框的程序(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/