Mausklick und WM_LBUTTONDOWN wird nicht ausgelöst?



  • hi,

    nach mehreren Testläufen, musst ich festellen. Das etwa 1% aller WM_LBUTTONDOWN nicht ausgelöst werden...

    Wenn ich 200 mal klicke müsst ich ja 200/200 haben und nicht 200/198 ?
    Wie erreich ich 200/200 ?

    int upCounter = 0;
    int downCounter = 0;
    LRESULT CALLBACK Win32Window::MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    	{
    
    			switch (msg)
    			{
    
    			case WM_CREATE:
    			{
    				return 0;
    			}
    
    			case WM_PAINT:
    			{
    				return 0;
    			}
    			case WM_RBUTTONUP:
    			{
    				return 0;
    			}
    			case WM_LBUTTONUP:
    			{
    
    				upCounter++;
    				SetWindowText(hWnd, (std::to_wstring(upCounter) + L"|" + std::to_wstring(downCounter)).c_str());
    				return 0;
    			}
    
    			case WM_MOUSEMOVE:
    			{
    				return 0;
    			}
    			case WM_LBUTTONDOWN:
    			{
    
    				downCounter++;
    				SetWindowText(hWnd, (std::to_wstring(upCounter) + L"|" + std::to_wstring(downCounter)).c_str());
    				return 0;
    			}
    			case WM_LBUTTONDBLCLK:
    			{
    
    				return 0;
    			}
    			case WM_RBUTTONDBLCLK:
    			{
    
    				return 0;
    			}
    			case WM_RBUTTONDOWN:
    			{
    				return 0;
    			}
    			case WM_MOUSEWHEEL:
    			{
    				return 0;
    			}
    			case WM_CHAR:
    			{
    				return 0;
    			}
    			case WM_KEYDOWN:
    			{
    				return 0;
    			}
    
    			case WM_SIZE:
    			{
    				return 0;
    			}
    			case WM_MOVE:
    			{
    				return 0;
    			}
    			case WM_CLOSE:
    			{
    				unfinished = false;
    				DestroyWindow(hWnd);
    				return 0;
    			}
    			case WM_DESTROY:
    			{
    				unfinished = false;
    				if (!GetParent(hWnd))
    				{
    					PostQuitMessage(0);
    				}
    				return 0;
    			}
    			default:return DefWindowProc(hWnd, msg, wParam, lParam);
    			}
    
    		return 0;
    
    	}
    
    static LRESULT CALLBACK Win32Window::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    	{
    
    		Win32Window* that = (Win32Window*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
    		if (msg == WM_CREATE)
    		{
    			that = (Win32Window*)(((LPCREATESTRUCT)lParam)->lpCreateParams);
    
    		//	SetWindowLongPtr(hWnd, GWLP_USERDATA, reinterpret_cast<LPARAM>(that));
    
    		}
    		if (that)
    		{
    			return that->MsgProc(hWnd, msg, wParam, lParam);
    		}
    		else
    		{
    			return DefWindowProc(hWnd, msg, wParam, lParam);
    		}
    
    	}
    


  • Up-Messages/Down-Messages

    200/164
    200/186
    200/187

    Auch bei "leerer" Schleife:

    while (unfinished == true && error == false)
    	{
    
    		if (PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
    		{
    
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    }
    

    Auch eine andere Maus führt zum selben ergebnis...



  • DieMaus schrieb:

    Wenn ich 200 mal klicke müsst ich ja 200/200 haben und nicht 200/198 ?

    Nein, da können auch Doppelklicks dabei sein, die du nicht zählst.

    DieMaus schrieb:

    Wie erreich ich 200/200 ?

    Langsamer klicken.



  • Das war das Problem... 😃
    Vielen vielen Dank!!


Anmelden zum Antworten