Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Handling KeyBoard messages/accelerators handling in MFC dialog based applications

Handling KeyBoard messages/accelerators handling in MFC dialog based applications

Scheduled Pinned Locked Moved C / C++ / MFC
c++sysadmindata-structuresdebugginglearning
13 Posts 4 Posters 2 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Lost User

    if (debugger[0] == NULL);
    else
    {

    What is wrong with

    	if (debugger\[0\] != NULL)
        {
    
    F Offline
    F Offline
    ForNow
    wrote on last edited by
    #4

    got a compile error when it I did that but I had semi colon after the open paren so the logic should work regardless I'll work to change it thanks

    L 1 Reply Last reply
    0
    • F ForNow

      got a compile error when it I did that but I had semi colon after the open paren so the logic should work regardless I'll work to change it thanks

      L Offline
      L Offline
      Lost User
      wrote on last edited by
      #5

      ForNow wrote:

      I had semi colon after the open paren

      :omg:

      1 Reply Last reply
      0
      • G Graham Breach

        You missed out a test - you should only return TRUE if TranslateAccelerator() succeeds. By the way, your if(something); else is quite confusing.

        F Offline
        F Offline
        ForNow
        wrote on last edited by
        #6

        I am changing that so if I get a zero from from

        TranslateAccelerator(

        that means (and can you confirm this) it wasnt one the key strokes I defined right not necessarly an error I would get a zero from TranslateAccelerator maybe thats the problem in my logic

        G 1 Reply Last reply
        0
        • L Lost User

          if (debugger[0] == NULL);
          else
          {

          What is wrong with

          	if (debugger\[0\] != NULL)
              {
          
          D Offline
          D Offline
          Dave Kreskowiak
          wrote on last edited by
          #7

          Not to mention the semi-colons on the end of the if line, essentially making it entirely useless.

          Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
          Dave Kreskowiak

          L 1 Reply Last reply
          0
          • D Dave Kreskowiak

            Not to mention the semi-colons on the end of the if line, essentially making it entirely useless.

            Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
            Dave Kreskowiak

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #8

            Yes, I have never seen that done deliberately before.

            1 Reply Last reply
            0
            • F ForNow

              I am changing that so if I get a zero from from

              TranslateAccelerator(

              that means (and can you confirm this) it wasnt one the key strokes I defined right not necessarly an error I would get a zero from TranslateAccelerator maybe thats the problem in my logic

              G Offline
              G Offline
              Graham Breach
              wrote on last edited by
              #9

              Here's the Windows docs page: TranslateAcceleratorA function (winuser.h) - Win32 apps | Microsoft Docs[^] The function returns nonzero when it successfully translates the accelerator, which is when you should not pass the message through to the default handler. Your code is bypassing the default handler entirely when your h_accel and debug variables are set (without checking if the message was a translated keycode).

              F 1 Reply Last reply
              0
              • G Graham Breach

                Here's the Windows docs page: TranslateAcceleratorA function (winuser.h) - Win32 apps | Microsoft Docs[^] The function returns nonzero when it successfully translates the accelerator, which is when you should not pass the message through to the default handler. Your code is bypassing the default handler entirely when your h_accel and debug variables are set (without checking if the message was a translated keycode).

                F Offline
                F Offline
                ForNow
                wrote on last edited by
                #10

                thanks if so this code by Nish

                BOOL CPreTransTestApp::ProcessMessageFilter(int code, LPMSG lpMsg)
                {
                if(m_haccel)
                {
                if (::TranslateAccelerator(m_pMainWnd->m_hWnd, m_haccel, lpMsg))
                return(TRUE);
                }

                return CWinApp::ProcessMessageFilter(code, lpMsg);
                

                }

                is incorrect this code from Microsoft docs is correct

                MSG msg;
                BOOL bRet;

                while ( (bRet = GetMessage(&msg, (HWND) NULL, 0, 0)) != 0)
                {
                if (bRet == -1)
                {
                // handle the error and possibly exit
                }
                else
                {
                // Check for accelerator keystrokes.

                    if **(!**TranslateAccelerator( 
                            hwndMain,      // handle to receiving window 
                            haccel,        // handle to active accelerator table 
                            &msg))         // message data 
                    {
                        TranslateMessage(&msg); 
                        DispatchMessage(&msg); 
                    } 
                } 
                

                }

                as it has not TranlateAccelterator wouldnt you agree

                G 1 Reply Last reply
                0
                • F ForNow

                  thanks if so this code by Nish

                  BOOL CPreTransTestApp::ProcessMessageFilter(int code, LPMSG lpMsg)
                  {
                  if(m_haccel)
                  {
                  if (::TranslateAccelerator(m_pMainWnd->m_hWnd, m_haccel, lpMsg))
                  return(TRUE);
                  }

                  return CWinApp::ProcessMessageFilter(code, lpMsg);
                  

                  }

                  is incorrect this code from Microsoft docs is correct

                  MSG msg;
                  BOOL bRet;

                  while ( (bRet = GetMessage(&msg, (HWND) NULL, 0, 0)) != 0)
                  {
                  if (bRet == -1)
                  {
                  // handle the error and possibly exit
                  }
                  else
                  {
                  // Check for accelerator keystrokes.

                      if **(!**TranslateAccelerator( 
                              hwndMain,      // handle to receiving window 
                              haccel,        // handle to active accelerator table 
                              &msg))         // message data 
                      {
                          TranslateMessage(&msg); 
                          DispatchMessage(&msg); 
                      } 
                  } 
                  

                  }

                  as it has not TranlateAccelterator wouldnt you agree

                  G Offline
                  G Offline
                  Graham Breach
                  wrote on last edited by
                  #11

                  They are both correct. The first one skips the default handler if the accelerator has been translated. The second one calls the default handler if the accelerator has not been translated.

                  F 1 Reply Last reply
                  0
                  • G Graham Breach

                    They are both correct. The first one skips the default handler if the accelerator has been translated. The second one calls the default handler if the accelerator has not been translated.

                    F Offline
                    F Offline
                    ForNow
                    wrote on last edited by
                    #12

                    thank you so much for your patience me However the way mine is set is INCORRECT as I dont have an IF testing for the validity of the TranlateAccelarator and that is why my keyboard gets locked becasue I havr return TRUE for all

                    G 1 Reply Last reply
                    0
                    • F ForNow

                      thank you so much for your patience me However the way mine is set is INCORRECT as I dont have an IF testing for the validity of the TranlateAccelarator and that is why my keyboard gets locked becasue I havr return TRUE for all

                      G Offline
                      G Offline
                      Graham Breach
                      wrote on last edited by
                      #13

                      Yes, that's right.

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups