c++ - MFC:动态 CEdit ctrl 没有应用与非动态 CEdit ctrl 相同的视觉样式

标签 c++ winapi mfc cedit

最近我在我的 MFC 程序中添加了 Common Controls 6.0 视觉样式,这使得所有控件看起来更加现代。当我动态创建一个 CEdit 按钮时,尽管它看起来像 Windows 95 中的旧 CEdit。除了 CEdit 之外,我动态创建的所有其他 ctrl 看起来都像较新的版本。所以,我想知道是否有其他人遇到过这个问题并知道任何解决方案?

这是我用来动态创建 CEdit 的代码。我已经应用了其他非动态 CEdit 控件具有的所有样式,但没有什么区别。

m_CEditCtrl.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, CRect(0, 0, 150, 100), this, IDC_VALUE_ID);

这里还对动态创建的和非动态创建的进行了比较。 enter image description here

我曾尝试寻找这个问题的答案,但到目前为止只发现了另外两个 Stack Overflow 问题,而且它们都没有提供我正在寻找的答案。

这个问题有完全相同的问题,但没有答案,并且没有评论提供任何类似的解决方案。 MFC: dynamically created CEdit is not animated and does not change the appearance

另一个问题有一个解决方案,但它的解决方案不适用,因为我没有将 OnCtrlEdit 应用于此 CEdit。 Why is my edit control ignoring the applied visual styles?

最佳答案

这是感谢 user20716902 的答案。

为了动态获得漂亮的 CEdit 框,您需要使用 CreateEX 函数并使用 WS_EX_CLIENTEDGE 样式。

以下是创建看起来现代的 CEdit 框的示例代码。

m_CEditCtrl.CreateEx(WS_EX_CLIENTEDGE, _T("EDIT"), _T(""), WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, CRect(0, 0, 0, 0), this, 1);

关于c++ - MFC:动态 CEdit ctrl 没有应用与非动态 CEdit ctrl 相同的视觉样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76443171/

相关文章:

c++ - 删除指针的段错误

c++ - 错误 : expected primary-expression before 'int'

c++ - 如何用我自己的实现替换 MS VC++ 项目中的 WinAPI 函数调用(名称和参数集相同)?

C++ GDI+ 选择调色板

c++ - 在 MFC CListCtrl 中获取项目文本的索引

c++ - 错误 C1189 : #error : This file requires _WIN32_WINNT to be #defined at least to 0x0500. 建议使用值 0x0501 或更高

c++ - 运算符重载的 friend 关键字

c++ - g++ 链接目标文件无法链接

windows - 如果 OpenProcess() 因 ACCESS_DENIED 失败,如何从 pid 获取进程文件名?

c++ - SHGetFolderPath' : identifier not found