[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 364
  • Last Modified:

Consume Keystroke

Hi,

VC++6 Windows:

I need some help on, how can I consume keystrokes.
Say when the user presses a Tab key if the user has pressed some other or Tab key (either holding it) and I am in the process of processing first keystroke. I want to destroy all keystoks that the user may have triggered when first key was being processed.

Many thanks
0
msjammu
Asked:
msjammu
  • 4
1 Solution
 
Jaime OlivaresCommented:
That will depend what kind of applications are you building: console, Win32, MFC. But a generica aproach is something like this:

c = getch();   // Wait to read first keystroke
// some processing
while (getch()) {}  // Read (comsume) all keystrokes triggered
// some other processing

0
 
Jaime OlivaresCommented:
Sorry, maybe not a good example. Try with this:

// this header is needed to use getch() and kbhit()
#include "conio.h"
 
int main ()
{
    // some code here

int c;
c = getch();   // Wait to read first keystroke
// some processing
while (kbhit())  // verify if key exist in buffer
      { getch(); }  // Read (comsume) all keystrokes triggered
// some other processing

    return 0;
}
0
 
msjammuAuthor Commented:
>>VC++6 Windows:
My application is windows application MDIBased;
containing many child forms
0
 
Jaime OlivaresCommented:
There are many tecniques, also you can control the PreTranslateMessage event in your application.
You can filter all the WM_CHAR messages is a flag is on

Create a flag member in your CWinApp derived object:
       bool m_IgnoreKeys;

Then create an event with the ClassWizard (Ctrl-W) for your app object, and control WM_CHAR specific message

(inside CYourApp::PreTranslateMessage)
   if (msg==WM_CHAR) {
       if (!m_IgnoreKeys)        // if m_IgnoreKeys = false
            return FALSE;          // Do nothing
   }
// else continue with pretranslatemessage


0
 
Jaime OlivaresCommented:
Sorry, must be 'return TRUE' to "swalow" the message. Will give you a more concrete example:

BOOL CTest55App::PreTranslateMessage(MSG* pMsg)
{
      if (pMsg->message==WM_CHAR && m_IgnoreKeys) {
            ::MessageBeep(MB_OK);     // Just for testing
            return TRUE;
      }
      // TODO: Add your specialized code here and/or call the base class
      
      return CWinApp::PreTranslateMessage(pMsg);
}

Now you decide when keys will be accepted by setting  the m_IgnoreKeys to true or false
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now