【发布时间】:2019-08-29 20:28:08
【问题描述】:
尝试在编辑控件(Win32 API,纯 C,无 MFC)中垂直居中/对齐文本,但没有成功。尝试了其他答案的解决方案,例如 this one 或 this 以及其他相当古老的论坛,但没有运气:
我可以降低控件的高度,但这只是一种解决方法。我不想让它多行。创建控件的代码:
CreateWindowW(L"Edit", NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER,
MulDiv(LOWORD(units), 50, 4), 0,
MulDiv(LOWORD(units), 150, 4),
MulDiv(HIWORD(units), 14, 8),
hwnd, NULL, NULL, NULL);
问题:真的没有办法垂直对齐文本吗?
【问题讨论】:
-
不是直接的,但是你可以通过子类化编辑控件和处理
WM_NCCALCSIZE来模拟它。 codeguru.com/cpp/v-s/devstudio_macros/textoperations/… 对于多行编辑控件,您可以使用EM_SETRECT。 -
@zett42 谢谢。看到一个类似的帖子,但那是 C++,我正在寻找 C 解决方案。
-
@supafly 使用纯 Win32 API,在 C++ 中工作的内容也将在 C 中工作,因为 Win32 API 是基于 C 的 API。
-
@RemyLebeau 好的,但我不明白如何在 C 程序中使用该 C++ 类。我还应该以某种方式使用 CreateWindowW 吗?我遇到的大多数 WinAPI 示例都是 100% C++。对于 C# 程序员来说,这有点晦涩。
-
@supafly "我不明白如何在 C 程序中使用那个 C++ 类" - 你不能在 C 中使用 C++ 类,除非你把它包装起来在 C 接口中,例如在 DLL 中。但是您可以在 C 中进行与 C++ 类相同的 Win32 API 调用。 “我还应该以某种方式使用 CreateWindowW 吗?” - 是的。 “我遇到的大多数 WinAPI 示例都是 100% C++”——仅当您正在查看基于 C++ 的框架(如 MFC、Qt 等)的示例时。请查看基于 C 的示例。周围有很多。甚至 Microsoft 记录的示例也是用 C 编写的,因为 Win32 API 是基于 C 的 API。
标签: c winapi controls edit hwnd