BG Development


  Reply to this topicStart new topicStart Poll

> Проблем с WM_KEYDOWN, при разработване на калкулатор с win API
iceless
  Публикувано на: 25-04-2013, 19:36
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 25
Регистриран на: 20.01.13



Здравейте.
Опитвам се да разработя калкулатор чрез WIN API, който да се доближава максимално до оригиналния (по възможности). Мъчи ме обаче месиджа WM_KEYDOWN. Подразбира се вече, че като натисна +, -, *, / или = ще искам да ми се изпълняват съответни функции. Само че незнам защо, не влиза въобще в съответния месидж програмата, когато натисна дадения клавиш, който ми е нужен. Теста съм го направим с VM_HOME за Home бутона и искам в Editbox-а на калкулатора да ми изведе Success!. Пробвах по няколко начина, но нестава и нестава. Ето и кода:

CODE

// ......

BOOL CALLBACK InitProc( HWND hDlgWnd,
                       UINT Message,
                       WPARAM wParam,
                       LPARAM lParam )
{
      HWND hEdit = GetDlgItem (hDlgWnd, IDC_EDIT);
   switch(Message)
   {
               // .........

            case WM_KEYDOWN:
                  switch (wParam)
                  {
                        case VK_HOME:
                              SetDlgItemText(hDlgWnd, IDC_EDIT, "Success!");
                              break;
                        default:
                             break;
                  }
                  /*val = (int) wParam;

                  if( val & VK_HOME )
                  {
                        SetDlgItemText(hDlgWnd, IDC_EDIT, "Success!");
                  }*/

                  /*if (wParam == VK_HOME)
                  {
                              SendMessage(hEdit, WM_KILLFOCUS, NULL, NULL);
                              SetDlgItemText(hDlgWnd, IDC_EDIT, "Success!");
                  }*/
                  break;

             // .......



Това мнение е било редактирано от iceless на 25-04-2013, 19:38
PMEmail Poster
Top
dvader
Публикувано на: 25-04-2013, 20:47
Quote Post


Group Icon
Име: Валерий Тодоров
Група: VIP
Ранг: Почетен член

Мнения: 5419
Регистриран на: 12.07.05



Натисканията на бутоните отиват във контролата, която е "фокусирана" - в твоя случай, това е едит контролата.

Най лесно е да си направиш акселератор, който да превежда нужните команди. Прочети за TranslateAccelerator()


--------------------
I find your lack of faith disturbing
PM
Top
iceless
Публикувано на: 28-04-2013, 14:10
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 25
Регистриран на: 20.01.13



Супер. Отне ми малко време понеже съм начинаещ, но го сванах горе долу и ми се получи. Огромно благодаря за насоката icon_smile.gif
PMEmail Poster
Top
iceless
Публикувано на: 02-05-2013, 21:49
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 25
Регистриран на: 20.01.13



Имам още един въпрос ..

Имам бутон на калкулатора +- (negate) демек да сменя знака на числото.

Това е кода:

CODE

case IDC_BTN_NEGATE:
                              SendMessage(hEdit, EM_SETSEL, 0, 1);           //маркитам първатя символ от едитбокса
                              tNumber = SendMessage(hEdit, EM_GETSEL, NULL, NULL);                // string tNumber го присвоява
                              if (tNumber == "-")
                              {
                                    SendMessage(hEdit, EM_REPLACESEL, (WPARAM)true, (LPARAM)(LPCTSTR) ""); // ако е - се изтрива
                              }
                              else if (tNumber != "-")
                              {
                                    SendMessage(hEdit, EM_SETSEL, 0, 0);
                                    SendMessage(hEdit, EM_REPLACESEL, (WPARAM)true, (LPARAM)(LPCTSTR) "-"); // ако не е - в началото се поставя минус
                              }
                              break;


Проблемът идва явно от съобщението EM_GETSEL. Програмата влиза само в елса и ми трупа минуси на всяко кликане. tNumber ми е string.

Мерси предварително

Това мнение е било редактирано от iceless на 02-05-2013, 21:50
PMEmail Poster
Top
dvader
Публикувано на: 09-05-2013, 10:05
Quote Post


Group Icon
Име: Валерий Тодоров
Група: VIP
Ранг: Почетен член

Мнения: 5419
Регистриран на: 12.07.05



Прочети какво *точно* връша SendMessage(), защото не е стринг


--------------------
I find your lack of faith disturbing
PM
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0