我想让我的对话框匹配。我一直都在通过谷歌,随机测试等,甚至读过一些它无法完成的地方。
我能够做的是使用其中一条消息来设置字体和颜色,但是没有任何关于绘图的信息。
我认为它必须能够......
有没有人有任何想法?或者对此有所了解?
答案 0 :(得分:2)
看起来编辑控件不支持所有者绘制,但您仍然可以解决直接问题。根据{{3}},默认情况下,资源文件中的编辑控件具有WS_BORDER
样式集。看起来你可以用这样的东西摆脱它:
EDITTEXT IDC_EDIT1,17,51,136,14,ES_AUTOHSCROLL | NOT WS_BORDER
对于状态栏,您可以尝试使用具有自定义颜色的静态控件而不是实际状态栏。或者您可以自己滚动,在资源文件中指定窗口类名,并确保在显示对话框之前注册该类。
更新:哇,状态栏的文档非常糟糕。不过,你可以为老板画一个。请按照以下步骤操作:
// where hStatus is the HWND of a status bar...
// You must set simple mode to false, because simple mode doesn't
// support owner draw.
SendMessage(hStatus, SB_SIMPLE, FALSE, 0);
// I'm assuming 1 status bar part for demonstration. Setting the right edge
// for the 1 part to -1 make it take up the whole status bar.
int partWidths[] = { -1 };
SendMessage(hStatus, SB_PARTS, 1, reinterpret_cast<LPARAM>(partWidths));
// There is background stuff that stays behind even with owner draw,
// so you have to set the background color to black, too, to get rid of
// any appearance of borders.
SendMessage(hStatus, SB_SETBKCOLOR, 0, RGB(0, 0, 0));
// There is still a slim border that stays behind, so you need to set
// SBT_NOBORDERS in addition to SBT_OWNERDRAW. The 0 is the index of the
// status bar part. It could be anything between 0 and 255.
SendMessage(
hStatus,
SB_SETTEXT,
SBT_NOBORDERS | SBT_OWNERDRAW | 0,
reinterpret_cast<LPARAM>(_T("Status")));
从那里,您还必须处理状态栏的WM_DRAWITEM
。现在,至于为什么我说状态栏的文档很糟糕......
SB_SETTEXT
的文档说WPARAM
的低位字的高字节可以是后面的值之一。这有两个问题:
您可以将它们组合在一起,您必须为此工作。 MFC也是这样做的。我查了一下。
您可能想写MAKEWPARAM(MAKEWORD(0, SBT_OWNERDRAW), 0)
。此不会工作。根据外观,定义SBT_
样式,以便它们自动出现在低位字的高字节中,如果您只是将它们与索引值一起使用。
我必须查看MFC源代码才能弄清楚如何正确使用SB_SETTEXT
。
答案 1 :(得分:1)
编辑控件没有所有者绘制模式,但您可以创建编辑控件的子类并处理WM_ERASEBKGND
,WM_NCPAINT
,WM_PAINT
等消息以及{ {1}}消息发送到编辑的父窗口。
答案 2 :(得分:0)
第2部分的答案,在编辑中垂直对齐文本:
RECT rect;
GetClientRect(GetDlgItem(hwnd, IDC_TIMEINPUT),&rect);
Rectangle(hdcEdit, rect.left, rect.top, rect.right, rect.bottom);
rect.left+=5; rect.top+=5; rect.right+=5; //rect.bottom+=5;
SendMessage(GetDlgItem(hwnd, IDC_TIMEINPUT), EM_SETRECTNP, 0, (LPARAM)&rect);
必须是多线的,你真的必须使用不同的数字来保持单线,并保持垂直对齐。 EMS_SETRECTNP允许您指定文本的位置,允许编辑具有更大的高度。