gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:21 25 4
gpt4 key购买 nike

我需要在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com