Avatar billede karlkoder Nybegynder
05. juli 2001 - 04:36 Der er 22 kommentarer og
1 løsning

UPDOWN CONTROL i REN WIN32

jeg har lavet en Edit Box og en UpDown Control med
CreateUpDownControl()


hvordan tjecker jeg for input i UpDown controllen ??

hvordan kan jeg herved få værdien af den tilkoblede EditBox til at blive forøget med enten 0.000001f eller formindsket med 0.000001f ??

Avatar billede nebula Nybegynder
05. juli 2001 - 13:52 #1
fang UDM_GETPOS messages?
Avatar billede karlkoder Nybegynder
05. juli 2001 - 14:26 #2
Hvor skal det ligge henne og er det nok ??
Avatar billede nebula Nybegynder
07. juli 2001 - 03:21 #3
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

WNDCLASS wndclass;
/* ... */
wndclass.lpfnWndProc = WndProc;

i WndProc har et typisk win32 program en switch (message) { /* ... */ }. I denne switch skal du så blot \"fange\" UDM_GETPOS for din control.

switch (message) {
  case UDM_GETPOS:
      /*SetWindowText(MIN_EDITBOKS, TEXT(\"min tekst\"); */
      break;
}

Der er selvfølgelig andre ting der skal tages stilling til, som f.eks. hvis du har flere UpDown controls liggende. I så fald bliver det noget i stil med (MIN_COTROL1 vil så være en enum eller en #define til f.eks. et windows handle eller ID som er tilfældet med en Updown så vidt jeg kan huske):

switch (message) {
  case UDM_GETPOS:
      case MIN_CONTROL_1:
          /* gør sådan */
          break;
      case MIN_CONTROL_2:
          /* gør sådan */
          break;
      }
      /* ... */
      break;
}

Avatar billede karlkoder Nybegynder
07. juli 2001 - 12:57 #4
Kan en UpDown control kun bruges til at tælle op/ned på heltal eller vil den også virke på kommatal.. (det er det jeg skal bruge den til) ??

Og vil den supporte værdier fra -1.000000 til 1.000000 ??

(undskyld de extra ?? men jeg sidder lidt fast i mit \'projekt\')
Avatar billede nebula Nybegynder
09. juli 2001 - 04:26 #5
UpDown kan kun tælle op/ned på heltal (lParam/wParam er en long og en unsigned int respektivt), men burde understøtter minusværider.

Alt efter hvor præcis dine kommatal skal være, kan du understøtte dem ved at dividere med f.eks. 1000 (præcision på 3 cifre) på indput du får fra UpDown (så tekst vist i editboksen ikke er det faktiske tal fra UpDown, men en beregnet værdi baseret på denne - og det er en ganske normal måde at gøre ting som dette på).
Avatar billede karlkoder Nybegynder
09. juli 2001 - 09:25 #6
nubula >> har du et eksempel på hvordan man laver dette ??

(der går koks idet jeg  har lavet... )
(hvilke funktioner/parametre skal bruges for at få værdierne ud ??)
Avatar billede nebula Nybegynder
10. juli 2001 - 05:21 #7
\"An up-down control notifies its parent window when its current position changes by sending it a UDN_DELTAPOS notification message and a WM_VSCROLL or WM_HSCROLL message\".

Du kan altså fange f.eks.UDN_DELTAPOS, og få dine ønskede værdier:

LPNMUPDOWN lp;
switch (message) {
  case UDN_DELTAPOS:
      lp = lParam;
      lp->iPos; // værdi for UpDown.
  ...
}
Avatar billede karlkoder Nybegynder
10. juli 2001 - 21:50 #8
nebula >> i det sidste du har tilføjet kan man dertil lægge noget kode så det er muligt at have flere updown-controls (med unikke ID\'er) ??
Avatar billede nebula Nybegynder
11. juli 2001 - 03:10 #9
Jamen det er det da.
lp->hdr er en NMHDR struktur. Denne indeholder disse oplysninger.

Du kan bruge hdwnFrom eller idFrom til at få enten handle eller id\'en på control\'en

id\'et kan altså findes ved: lp->hdr.idFrom
Avatar billede karlkoder Nybegynder
12. juli 2001 - 16:56 #10
nebula >> sådan har jeg lavet det...:

case UDN_DELTAPOS: {

LPNMUPDOWN lpnmud;
lpnmud = (LPNMUPDOWN) lParam;

char lala [100];
sprintf( lala, \"%d\", lpnmud->iPos );
SendMessage( EditWindow, WM_SETTEXT, 0, (LPARAM) (LPCTSTR) lala );

} break;



men der sker ikke noget...    =(
der kommer ingenting ud af det..  =(
Avatar billede karlkoder Nybegynder
12. juli 2001 - 16:57 #11
Hvorfor virker det ikke ??
Avatar billede karlkoder Nybegynder
12. juli 2001 - 17:04 #12
har lige lagt 30 ekstra point til..
kan du lave et lille kørende eksempel til mig som virker ??

(så kan du få de 200 points)

Avatar billede nebula Nybegynder
13. juli 2001 - 20:20 #13
joeh det kan jeg vel godt. Her er WndProc\'en:

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND updown, hwndEdit;
    char v[200] = { 0 };
    double c;

    switch (message) {
        case WM_CREATE:
            hwndEdit = CreateWindow (TEXT (\"edit\"), NULL,
                WS_CHILD | WS_VISIBLE | /*WS_HSCROLL | WS_VSCROLL |*/
                WS_BORDER | ES_LEFT | ES_MULTILINE |
                ES_AUTOHSCROLL | ES_AUTOVSCROLL,
                0, 0, 130, 30, hwnd, (HMENU) 1,
                ((LPCREATESTRUCT) lParam)->hInstance, NULL);
           
            updown = CreateUpDownControl(WS_VISIBLE | WS_CHILD, 130, 0, 140, 30, hwnd, 3, NULL, NULL, 20, 0, 0 );

            return 0;

        case WM_NOTIFY:
            // control ID
            switch (wParam) {
                case 3:
                    // notification code
                    switch (((NMHDR *) lParam)->code) {
                        case UDN_DELTAPOS:
                            c = ((NMUPDOWN *) lParam)->iPos;               
                            sprintf(v, \"%.1Lf\", (c-10)/10);
                            SetWindowText(hwndEdit, v);                   
                    }

                    return 0;
            }

            return 0;
               
        case WM_DESTROY:
            PostQuitMessage(0);

            return 0;
    }

    return DefWindowProc(hwnd, message, wParam, lParam);
}
Avatar billede karlkoder Nybegynder
14. juli 2001 - 13:12 #14
Det virker !!!          =)

Tusind tak...
Pointene er dine, men inden jeg lukker spørgsmålet kan du så lige svare mig på om du kender løsningen på at lægge BÅDE et icon og noget tekst på en BUTTON CONTROL... ???

Hvis ja, så vil jeg oprette et nyt spørgsmål hvori du kan hjælpe mig med det problem...

Avatar billede nebula Nybegynder
14. juli 2001 - 17:44 #15
Hmm.

Så vidt jeg ved, findes der ikke en sådan type knap. Windows har indbyggede tekst og grafik knapper, men ikke en knap som har begge egenskaber på een gang.

Det eneste du kan gøre, så vidt jeg ved, er at lave en static control og selv tegne knappen, inklusiv rammer, tekst, grafik og alt hvad dertil hører. (benytter du MFC, kan du overloade onPaint med din egen routine, men er princippet samme metode).
Avatar billede karlkoder Nybegynder
14. juli 2001 - 19:09 #16
Okay..
Går ud fra at det er en form for ownerdraw jeg skal lave..!?!

Her er i hvertfald dine 200p.

Avatar billede nebula Nybegynder
15. juli 2001 - 16:37 #17
Ja, du skal oprette en control og så fange WM_DRAWITEM beskeden, hvorefter du så tegner din egen knap.

Det kan gøres sådan:
/* ... */
case WM_DRAWITEM:
  LPDRAWITEMSTRUCT d = (LPDRAWITEMSTRUCT)lParam;
  FrameRect(d->hDC, &d->rcItem, (HBRUSH)GetStockObject(BLACK_BRUSH));         
  /* ... */

ID\'en på controllen findes i d->CtlID.
Håber det hjælper.
Avatar billede vakseviggo Nybegynder
16. juli 2001 - 00:26 #18
Jeg er interesseret i det samme spørgsmål omkring icon OG tekst på en knap.

Kan du lave et kørende eksempel til mig også, så vil jeg lige lave et spørgsmål som du kan svare i.

250 points for det svar hvis det virker !!!
Avatar billede jelzin101 Praktikant
16. juli 2001 - 00:29 #19
kan i ikke bare bruge en ren grafik knap??? man kunne da sagtens tilføje noget tekst til en bitmap og så sætte den ind på knappen.
Avatar billede vakseviggo Nybegynder
16. juli 2001 - 01:43 #20
det er den metode jeg bruger nu, og det er ret lamt da baggrunden i f.eks win2000 er anderledes end i win98
Avatar billede jelzin101 Praktikant
16. juli 2001 - 01:47 #21
ok.
Avatar billede vakseviggo Nybegynder
16. juli 2001 - 10:09 #22
NebulA >> jeg har oprettet et spørgsmål hvori du kan svare (hvis du har lyst)

250 points..
Avatar billede vakseviggo Nybegynder
16. juli 2001 - 10:11 #23
her er et link til spørgsmålet:

http://www.eksperten.dk/spm/89450
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester