UpDown控件的样式与“编辑”框不匹配

时间:2017-06-23 16:26:30

标签: delphi winapi themes edit

我正在使用以下代码创建Edit和UpDown控件:

procedure TForm1.CreateWnd;
begin
  inherited;
  Edit1 := CreateWindowEx (WS_EX_CLIENTEDGE, 'EDIT', '',
    WS_VISIBLE or WS_CHILD or ES_LEFT or ES_AUTOHSCROLL,
    10, 10, 100, 24, Handle, 0, hInstance, nil);
  UpDown1 := CreateWindowEx (0, UPDOWN_CLASS, nil,
    WS_VISIBLE or WS_CHILD or UDS_ALIGNRIGHT or UDS_ARROWKEYS
    or UDS_NOTHOUSANDS or UDS_HOTTRACK or UDS_SETBUDDYINT,
    0, 0, 0, 0, Handle, 0, hInstance, nil);
  SendMessage (UpDown1, UDM_SETBUDDY, Edit1, 0);
end;

编辑看起来像是3D边框,UpDown没有。

Screenshot 1

更新(部分复制/粘贴我的评论)

从编辑中删除WS_EX_CLIENTEDGE使其看起来就像一个填充的白色矩形(没有边框)。此外,现在编辑中的文本显得过高,因此我将不得不处理WM_NCCALCSIZE消息或修复它的任何内容。

Screenshot 2

如果我然后添加WS_BORDER标志,结果几乎是所需的,除了灰色比需要的颜色更深,然后在表单中的某些用户活动之后(包括用鼠标光标悬停编辑),边框的不必要的垂直部分显示在UpDown控件的左侧。

第三张截图要求发布至少10个声望。好吧,想象一下在上/下按钮左边缘的垂直线。它的颜色和边框一样,所以我可以认为它是边界的一部分。

1 个答案:

答案 0 :(得分:0)

如果未正确处理WM_CTLCOLOREDIT消息,则可能会发生这种情况。例如,返回了无效的画笔。