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. How to know no message in WindowProc callback function?

How to know no message in WindowProc callback function?

Scheduled Pinned Locked Moved C / C++ / MFC
graphicstutorialquestion
2 Posts 2 Posters 0 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.
  • C Offline
    C Offline
    cedricvictor
    wrote on last edited by
    #1

    Dear all: I use two global variables UINT g_PreUsedSize and g_CurUsedSize in WindowProc callback function. When I touch on my device, I will get WM_INPUT message continuous in WindowProc callback function, and get a result->active_touch_count, and set it to g_CurUsedSize. When I did not touch on my device, I wanna set 0 to g_CurUsedSize.

    LRESULT CALLBACK WindowProc (HWND window_handle, UINT message, WPARAM w_param, LPARAM l_param)
    {
    LRESULT result (0);

    switch (message)
    {
    case WM_DESTROY:
    PostQuitMessage (0);
    break;

      case WM\_SIZE:
         {
            switch (w\_param)
            {
               case SIZE\_MAXIMIZED:
               case SIZE\_RESTORED:
               {
                   window\_width = (float)(LOWORD (l\_param));
                   window\_height = (float)(HIWORD (l\_param));
               }
               break;
            }
         }
         break;
    
        case WM\_INPUT:
        {		
            UINT data\_size (0);
            GetRawInputData ((HRAWINPUT)l\_param, RID\_INPUT,NULL, &data\_size, sizeof (RAWINPUTHEADER));
            
            vector data;
            data.resize (data\_size);
    
            if (GetRawInputData ((HRAWINPUT)l\_param, RID\_INPUT, &data \[0\], &data\_size, sizeof(RAWINPUTHEADER)) != data\_size)
            {
                OutputDebugString(TEXT("GetRawInputData does not return correct size !\\n")); 
                break;
            }
              
            RAWINPUT\* raw = (RAWINPUT\*)(&data \[0\]);
           
            if (raw->header.dwType == RIM\_TYPEHID) 
            {
                RID\_DEVICE\_INFO device\_info;
           UINT info\_size = sizeof(RIDI\_DEVICEINFO);
           GetRawInputDeviceInfo ( raw->header.hDevice, RIDI\_DEVICEINFO, (LPVOID)&device\_info, &info\_size);
    			   
           if(device\_info.hid.dwVendorId = 0x0457)
           {
     	           DigitizerData\* result = (DigitizerData\*)(raw->data.hid.bRawData);
    				
                    g\_CurUsedSize = result->active\_touch\_count;	
    			
         	           BOOL bGot = FALSE;
    
    	  if(g\_CurUsedSize <= 5)
    	  {
    	      if(g\_PreUsedSize <  g\_CurUsedSize)
    	      {
    	        PlaySound(TEXT("C:\\\\default.wav"),NULL, SND\_FILENAME|SND\_ASYNC );
                  }
              }
    	  bGot = TRUE;
           }
       }
    
       if(bGot)
       {
              g\_PreUsedSize =  g\_CurUsedSize;
       }
         }				 
     }
     result = DefWindowProc (window\_handle, message, w\_param, l\_param);
    

    }

    L 1 Reply Last reply
    0
    • C cedricvictor

      Dear all: I use two global variables UINT g_PreUsedSize and g_CurUsedSize in WindowProc callback function. When I touch on my device, I will get WM_INPUT message continuous in WindowProc callback function, and get a result->active_touch_count, and set it to g_CurUsedSize. When I did not touch on my device, I wanna set 0 to g_CurUsedSize.

      LRESULT CALLBACK WindowProc (HWND window_handle, UINT message, WPARAM w_param, LPARAM l_param)
      {
      LRESULT result (0);

      switch (message)
      {
      case WM_DESTROY:
      PostQuitMessage (0);
      break;

        case WM\_SIZE:
           {
              switch (w\_param)
              {
                 case SIZE\_MAXIMIZED:
                 case SIZE\_RESTORED:
                 {
                     window\_width = (float)(LOWORD (l\_param));
                     window\_height = (float)(HIWORD (l\_param));
                 }
                 break;
              }
           }
           break;
      
          case WM\_INPUT:
          {		
              UINT data\_size (0);
              GetRawInputData ((HRAWINPUT)l\_param, RID\_INPUT,NULL, &data\_size, sizeof (RAWINPUTHEADER));
              
              vector data;
              data.resize (data\_size);
      
              if (GetRawInputData ((HRAWINPUT)l\_param, RID\_INPUT, &data \[0\], &data\_size, sizeof(RAWINPUTHEADER)) != data\_size)
              {
                  OutputDebugString(TEXT("GetRawInputData does not return correct size !\\n")); 
                  break;
              }
                
              RAWINPUT\* raw = (RAWINPUT\*)(&data \[0\]);
             
              if (raw->header.dwType == RIM\_TYPEHID) 
              {
                  RID\_DEVICE\_INFO device\_info;
             UINT info\_size = sizeof(RIDI\_DEVICEINFO);
             GetRawInputDeviceInfo ( raw->header.hDevice, RIDI\_DEVICEINFO, (LPVOID)&device\_info, &info\_size);
      			   
             if(device\_info.hid.dwVendorId = 0x0457)
             {
       	           DigitizerData\* result = (DigitizerData\*)(raw->data.hid.bRawData);
      				
                      g\_CurUsedSize = result->active\_touch\_count;	
      			
           	           BOOL bGot = FALSE;
      
      	  if(g\_CurUsedSize <= 5)
      	  {
      	      if(g\_PreUsedSize <  g\_CurUsedSize)
      	      {
      	        PlaySound(TEXT("C:\\\\default.wav"),NULL, SND\_FILENAME|SND\_ASYNC );
                    }
                }
      	  bGot = TRUE;
             }
         }
      
         if(bGot)
         {
                g\_PreUsedSize =  g\_CurUsedSize;
         }
           }				 
       }
       result = DefWindowProc (window\_handle, message, w\_param, l\_param);
      

      }

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

      cedricvictor wrote:

      How do I know my device send no data in WindowProc, if I did not touch?

      You cannot test for something not happening, only for things that do happen. You could use a flag in your WindowProc, which starts as false and gets set to true if you receive a touch input. At the end of the routine if the flag is still false then set your value to zero.

      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