小 CEdit 控件的 CSpinButtonCtrl 绘图问题

Posted

技术标签:

【中文标题】小 CEdit 控件的 CSpinButtonCtrl 绘图问题【英文标题】:CSpinButtonCtrl drawing problem with small CEdit control 【发布时间】:2010-10-13 14:55:56 【问题描述】:

我正在尝试在 Windows 7 中将 CSpinButtonCtrl 绘制为编辑框的伙伴。当我的 CEdit 窗口高 12 个对话框单元时,旋转按钮的缩放比例非常糟糕,并且顶部边框被剪掉。

这看起来很丑。我该如何解决这个问题,或者我必须将我的 CEdit 控件限制为 14 个对话框单元高?

我的控件是这样声明的:

EDITTEXT        IDC_LOWER_EDIT,51,20,63,12,ES_MULTILINE | ES_WANTRETURN,WS_EX_RIGHT
CONTROL         "",IDC_LOWER_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,104,17,11,12

我尝试过使用 MoveWindow 调整大小,但这无济于事。有什么想法吗?

【问题讨论】:

好吧,我想我的选择是: 1) 忍住; 2) 将我所有的编辑控件设置为 14 DU 高; 3)覆盖控件,绘制和维护我自己的按钮。 sigh 我倾向于 1) ... 我们还希望避免再次将所有内容都摆出来......说服 Windows 做正确的事情会更好! 【参考方案1】:

我找到了改变宽度的代码

CWnd* pWnd = GetDlgItem( IDC_SPIN1 );
CRect rect;
pWnd->GetWindowRect( &rect );
ScreenToClient( &rect );
rect.right += 5 ; // make 5 pixels wider
pWnd->MoveWindow(&rect) ;

把它放在OnInitDialog()

【讨论】:

【参考方案2】:

我想我会选择 #2 - 你是否对屏幕空间感到压力?

【讨论】:

我的许多控件都非常忙碌,我正在尽可能减少垂直空间。顺便说一句,我的 UI 全部复制在 Mac OS X 上,其中有一个标准的“小”控件尺寸(但没有标准的旋转控件,因此很少使用)。【参考方案3】:

另一种选择是:不附加(删除 UDS_ALIGNRIGHT)并将其放在编辑控件旁边。

【讨论】:

以上是关于小 CEdit 控件的 CSpinButtonCtrl 绘图问题的主要内容,如果未能解决你的问题,请参考以下文章

编辑框等控件边框美化(继承CEdit,然后覆盖OnMouseLeave, OnSetFocus, OnPaint函数即可。原来的CEdit虽然代码不可见,但它也是有句柄的,照样随便画)

CEdit控件[转]

单击控件时在MFC中选择CEdit控件的内容

从多行 CEdit 控件中获取文本?

在 CEdit 控件中显示省略号

CEdit控件的相关用法