c++ - 如何在动态创建 MFC 控件时重新创建资源编辑器使用的样式?

标签 c++ mfc

我需要在 MFC 对话框中动态创建一些控件。到目前为止,创建工作正常,但动态创建的控件看起来与使用资源编辑器创建的控件不同。有些控件甚至表现不同。我认为,我遗漏了生成代码所做的一些初始化。

目前我只创建CStaticCEdit 控件。当我动态创建它们时,两者都不使用标准的 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/

相关文章:

c++ - 在单元测试项目中包含 .c 文件并从多个 cpp 文件访问它,而不会出现链接问题

c++ - 另一个透视相机问题

c++ - 带有 Eigen 和三元运算符的不受欢迎/意外的编译器魔法

c++ - 正则表达式使用 regex_search 获取各种结果

c++ - CWinApp dll 文件给出 CWinApp 类的概率

c++ - 重新开发 MFC 应用程序

MFC - 如何禁用列表项?

qt - Qt的IP地址控件,类似于MFC的IP地址控件

windows - 在 HtmlHelp 中禁用打印按钮

c++ - 虚拟析构函数 - 谁调用底层的 free()?