【发布时间】:2009-07-21 09:23:13
【问题描述】:
我需要在 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");
}
感谢您的帮助!
【问题讨论】:
-
我不知道我应该选择哪个答案作为“接受的答案”,因为每个答案都回答了我的问题的一部分。这里的正常程序是什么?
-
好问题 - 不确定!我建议你只选择最能提供信息的一个并接受它,并附上一些评论来解释你做了什么。
-
另一种可能的解决方案是我自己回答问题,引用您的答案,然后选择我的答案作为接受的答案。或者我可以回答类似“阅读其他答案以获得最终解决方案”。