How to know no message in WindowProc callback function?
-
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);
}
-
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);
}
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 asfalse
and gets set totrue
if you receive a touch input. At the end of the routine if the flag is stillfalse
then set your value to zero.