Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kontrolka Up/Down w WinApi

Ostatnio zmodyfikowano 2017-06-15 12:26
Autor Wiadomość
kaczor112
Temat założony przez niniejszego użytkownika
Kontrolka Up/Down w WinApi
» 2017-06-06 11:02:27
Dzień dobry!
Wiem że już takie zapytanie było, bo sam je znalazłem:
http://cpp0x.pl/forum/temat/?id=1758
ale nie wyczerpałem z tego tematu wystarczającej wiedzy żeby pomogło...

Robiłem coś takiego(w różnych kombinacjach):
C/C++
case WM_KEYDOWN:
{
    switch(( int ) wParam )
    {
    case VK_DOWN:
       
        robot.ZmienIloscWezlow( robot.IleWezlow() - 1 );
       
        break;
    case VK_UP:
       
        robot.ZmienIloscWezlow( robot.IleWezlow() + 1 );
       
        break;
    }

ale niestety nie działa;

A żeby było śmieszniej działa dla górnej strzałki.
Ale tylko na chwile, potem jak se poklikam przestaje...

Mi chodzi tylko o prawidłową obsługę kontrolki up\down,
którą udało mi sie stworzyć za pomocą CreateUpDownControl.
Bardzo dziękuję za wszelką pomoc.
P-162127
Monika90
» 2017-06-06 11:37:15
WM_KEYDOWN jest do obsługi klawiatury, kontrolka Up-Down wysyła komunikaty WM_HSCROLL albo WM_VSCROLL, zależnie od tego czy jest pozioma czy pionowa.
P-162128
kaczor112
Temat założony przez niniejszego użytkownika
» 2017-06-06 22:01:13
Zgadza się sprawdziłem WM_VSCROLL to jest moja potrzeba.

Tylko jeszcze nie wiem jaka wartosc to daje przy kliku w dół,
a jaką przy kliku na dół...

Sprawdzałem następujące opcje:


switch (LOWORD(wParam))
{
SB_LINEDOWN

SB_LINEUP

SB_PAGEDOWN

SB_PAGEUP
}
żadna nie działa
P-162162
Monika90
» 2017-06-08 17:46:45
sprawdź SB_THUMBPOSITION
P-162260
kaczor112
Temat założony przez niniejszego użytkownika
» 2017-06-08 19:08:57
Jesteśmy coraz bliżej celu!

Jak dałem

C/C++
switch( LOWORD( wParam ) )
{
case SB_THUMBPOSITION:
}

To się wywoływał komunikat niezależnie od tego czi kliknąłem UP czy DOWN.
Teraz jak te komunikaty rozróżniać???


Podzielę sie efektem pracy samodzielnej.
To ustalenia co mi zwraca ta kontrolka zrobiłem coś takiego:

C/C++
if( HIWORD( wParam ) == i )
{
    _swprintf( buff, L"%d", i );
    MessageBox( hwnd, buff, L"Oto literka", MB_ICONINFORMATION );
}

I dla HIWORD(wParam) naciśnięcie UP zwraca 2, 2. A dla DOWN 1, 1.

I teraz myślę jak zrobić żeby mi dwa razy nie wywoływał tego to to jakoś koślawo (nie)działa.
P-162266
kaczor112
Temat założony przez niniejszego użytkownika
» 2017-06-15 12:26:24
Mam rozwiązanie mojego problemu!!!
Wklejam dla tych co w przyszłości będą tego szukali.

Parametr HIWORD jest aktualną wartością w kontrolce Up Down!

C/C++
case WM_VSCROLL:


switch( LOWORD( wParam ) )
{
case SB_THUMBPOSITION:
    robot.ZmienIloscWezlow(( int ) HIWORD( wParam ) );
    _swprintf( buff, L"%d", robot.IleWezlow() );
    SetWindowText( g_Text_UpDown,( LPCTSTR ) buff );
    break;
   
   
    break;
   
}
break;

Dziękuję za wszelkie podpowiedzi!
P-162568
« 1 »
  Strona 1 z 1