I rc-filen for din dialog putter du noget der ligner:
EDITTEXT IDC_EDIT1,26,25,39,13,ES_AUTOHSCROLL
CONTROL "Spin2",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 67, 25, 16, 16
På denne måde finder den selv ud af at den skal matche spin button'en med edit box'en.
For at få det til at virke skal du huske at kalde InitCommonControls() inden du kalder DialogBox(...), f.ex i WinMain().
Du skal også huske at linke med comctl32.lib
Du kan bruge følgende til at sætte range for din spin/edit:
HWND SpinHWnd = GetDlgItem(hDlg, IDC_SPIN2);
SendMessage(SpinHWnd, UDM_SETRANGE, 0, MAKELPARAM(25, 0));
Hvor 25 er max og 0 er min (det sidste 0).
Jeg mangler vist en header ell. lign:
error C2065: 'InitCommonControls' : undeclared identifier
Header:
#include "commctrl.h"
Ahhhh, det er rækkefølgen i .rc-filen der afgør hvem der er 'buddy'.
Ok, det virker nu, men jeg har 3 problemer:
1) Jeg kan ikke få UDM_SETRANGE til at virke
2) Jeg skal bruge negative værdier, og
3) Jeg skal bruge floating point værdier
Ved du (eller andre) hvordan jeg gør det?
Mht. 1 og 2 virker flg.:
SendMessage(SpinHWnd, UDM_SETRANGE, 0, MAKELONG(25, -25));
eller
SendMessage(SpinHWnd, UDM_SETRANGE32, -1000.0f, 1000.0f);
Men altså ikke MAKELPARAM()
Er der nogen der har prøvet at benyttes floats?
Jeg er ret sikker på at man ikke kan bruge andet en int's med en standard spin. Der vel også et problem med at definere hvor meget den skal ændre på tallet når der trykkes på knapperne.
Det burde være rimelig let at lave en simpel spin der virker med floats, vha to knapper.
Du kan i øvrigt bruge UDM_SETBUDDY til at fortælle din spin hvilken edit den skal modificere.
Ja, som standard kan man kun bruge int's. Men den sender en notifikation som kan fanges med WM_NOTIFY, og der kan man aflæse værdien (vha. UDM_GETPOS), dividere med fx. 100.0f, og så tælle sin værdi op i edit box'en manuelt.
På den måde kan man selvfølgelig ikke bruge autobuddy, så det bliver til en del mere kode - men det bliver nok måden jeg gør det på.
Tak for din hjælp, jeg kom da godt på sporet :o)