5
votes

I'm trying to draw a CSpinButtonCtrl as a buddy of an edit box in Windows 7. When my CEdit window is 12 dialog units high, the spin buttons are scaled really badly and the top border is clipped off.

spin fail

This looks pretty ugly. How can I get around this, or must I restrict my CEdit controls to be 14 dialog units high?

My controls are declared thusly:

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

I've tried resizing using MoveWindow, but that doesn't help. Any ideas?

3
Well I guess my options are: 1) Suck it up; 2) Make all my edit controls 14 DUs high; 3) Override the control, draw, and maintain my own buttons. sigh I'm tending towards 1) ...north5
We also want to avoid going and laying everything out again... persuading Windows to do the right thing would be preferable!Bids

3 Answers

4
votes

I found the code for changing the width

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

Put it in the OnInitDialog().

2
votes

I think I would go for #2 - are you that pressed for screen space?

0
votes

Another option is: leave it unattached (remove UDS_ALIGNRIGHT) and place it right next to the edit control.