我需要在 MFC 对话框中动态创建一些控件。到目前为止,创建工作正常,但动态创建的控件看起来与使用资源编辑器创建的控件不同。有些控件甚至表现不同。我认为,我遗漏了生成代码所做的一些初始化。
目前我只创建CStatic
和CEdit
控件。当我动态创建它们时,两者都不使用标准的 Windows 字体(如果我没记错的话,字体看起来更像是 Windows 95 之前使用的默认字体)。
此外,CEdit
控件的行为与我使用资源编辑器创建它时的行为不同。动态创建的控件似乎将文本长度限制为可见大小。我可以使用 SetWindowText()
设置更长的文本,然后使用 GetWindowText()
读回全文,但用户输入的文本不能超过显示的大小.资源编辑器创建的 CEdit
控件表现不同:如果用户输入的文本比可以显示的文本长,则输入的文本会在控件内“滚动”(没有滚动条,因为它只有一个线路控制)。
我尝试通过在控件上调用 SetLimitText()
来解决该问题,但这并没有改变行为。
控件被保存到对话框类中定义的数组中:
CStatic** m_pLabels;
CEdit** m_pEdits;
控件的创建发生在对话框类的 OnInitDialog()
方法中:
for (int i = 0; i < max; i++)
{
m_pLabels[i] = new CStatic();
m_pLabels[i]->Create("key", WS_CHILD | WS_VISIBLE | SS_RIGHT,
CRect(10, 10 + i * 30, 130, 35 + i * 30), this);
m_pEdits[i] = new CEdit();
m_pEdits[i]->CreateEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_BORDER,
CRect(133, 10 + i * 30, 350, 35 + i * 30), this, i + 100);
m_pEdits[i]->SetLimitText(499);
m_pEdits[i]->SetWindowText("value to be edited");
}
感谢您的帮助!
最佳答案
动态创建的控件最初总是使用标准字体:通常的方法是将控件的字体设置为父对话框的字体:类似于
pEdits[i]->SetFont(GetFont());
关于c++ - 如何在动态创建 MFC 控件时重新创建资源编辑器使用的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1158133/