我正在为 Windows API 编写一些包装函数和类。我开始遇到的一个常见情况是修改 Windows 样式。
以下是一些示例代码,我根据参数 ALIGNMENT 枚举调整 TextBox 的文本对齐方式。经过大量测试后,我似乎必须删除 2 种替代对齐样式,否则会发生冲突。然后 SetWindowPos(..SWP_FRAMECHANGED) 也不起作用,因此我将其替换为 InvalidateRect() 和 UpdateWindow() 以强制在样式更新后重新绘制 TextBox。
如果有更简单的方法,我想要一些反馈。我觉得我忽略了一些东西。谢谢!:)
enum ALIGNMENT
{
Left,
Right,
Center
};
void TextBox::Alignment(ALIGNMENT Alignment)
{
switch (Alignment)
{
case ALIGNMENT::Left:
SetWindowLongPtr(m_hWnd, GWL_STYLE, (GetWindowLongPtr(m_hWnd, GWL_STYLE) & ~ES_CENTER & ~ES_RIGHT) | ES_LEFT);
break;
case ALIGNMENT::Center:
SetWindowLongPtr(m_hWnd, GWL_STYLE, (GetWindowLongPtr(m_hWnd, GWL_STYLE) & ~ES_LEFT & ~ES_RIGHT) | ES_CENTER);
break;
case ALIGNMENT::Right:
SetWindowLongPtr(m_hWnd, GWL_STYLE, (GetWindowLongPtr(m_hWnd, GWL_STYLE) & ~ES_LEFT & ~ES_CENTER) | ES_RIGHT);
break;
}
InvalidateRect(m_hWnd, NULL, true);
UpdateWindow(m_hWnd);
};