WM_MOUSEMOVE acts very weird -- Please help.

Started by
3 comments, last by matchu 15 years, 7 months ago
For to better understand win32 api message loops I experiment with them. However I have reached a dead end with WM_MOUSEMOVE. Whenever the mouse moves I call WriteFile() so to write something to the console. The trouble is, once I move my mouse, everything works fine, but when I stop moving my mouse inside of the window, the WM_MOUSEMOVE still gets called! It writes into my console on a half a sec by half a sec basis that the WM_MOUSEMOVE was called even though I did not moved it. If I take the cursor out of the window then it stops. Any idea what's causing this weird behaviour?
Advertisement
Can you please post your message loop and your WindowProc function? This way it will be easier for us to help you.

hope that helps !
Here is the code!


#include <stdio.h>#include <windows.h>#include <gl\gl.h>#include <gl\glu.h>#include "prototypes.h"#include "glinitstuff.h"DWORD dwBytesWritten; char temp[1];char* msg1 = " test ";char* msg2 = "LMButton Up";int WINAPI WinMain(	HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR	lpCmdLine, int nCmdShow){	MSG		msg;									// Windows Message Structure	BOOL	done=FALSE;								// Bool Variable To Exit Loop	/*DWORD dwBytesWritten; char temp[1];	char* msg1 = " test ";	char* msg2 = "LMButton Up";	AllocConsole();	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);*/	AllocConsole();		// Ask The User Which Screen Mode They Prefer	if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)	{		fullscreen=FALSE;							// Windowed Mode	}	// Create Our OpenGL Window	if (!CreateGLWindow("Cydonia",640,480,16,fullscreen))	{		return 0;									// Quit If Window Was Not Created	}	while(!done)									// Loop That Runs While done=FALSE	{		if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))	// Is There A Message Waiting?		{			if (msg.message==WM_QUIT)				// Have We Received A Quit Message?			{				done=TRUE;							// If So done=TRUE			}			else									// If Not, Deal With Window Messages			{				TranslateMessage(&msg);				// Translate The Message				DispatchMessage(&msg);				// Dispatch The Message			}		}		else										// If There Are No Messages		{			// Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()			if (active)								// Program Active?			{				if (keys[VK_ESCAPE])				// Was ESC Pressed?				{					done=TRUE;						// ESC Signalled A Quit				}				else								// Not Time To Quit, Update Screen				{					DrawGLScene();					// Draw The Scene					SwapBuffers(hDC);				// Swap Buffers (Double Buffering)				}			}			if (keys[VK_F1])						// Is F1 Being Pressed?			{				keys[VK_F1]=FALSE;					// If So Make Key FALSE				KillGLWindow();						// Kill Our Current Window				fullscreen=!fullscreen;				// Toggle Fullscreen / Windowed Mode				// Recreate Our OpenGL Window				if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen))				{					return 0;						// Quit If Window Was Not Created				}			}			if (keys[VK_F2])			{							}		}	}	// Shutdown	KillGLWindow();									// Kill The Window	return (msg.wParam);							// Exit The Program}LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);	switch (uMsg)									// Check For Windows Messages	{		case WM_ACTIVATE:							// Watch For Window Activate Message		{			if (!HIWORD(wParam))					// Check Minimization State			{				active=TRUE;						// Program Is Active			}			else			{				active=FALSE;						// Program Is No Longer Active			}			return 0;								// Return To The Message Loop		}		case WM_SYSCOMMAND:							// Intercept System Commands		{			switch (wParam)							// Check System Calls			{				case SC_SCREENSAVE:					// Screensaver Trying To Start?				case SC_MONITORPOWER:				// Monitor Trying To Enter Powersave?				return 0;							// Prevent From Happening			}			break;									// Exit		}		case WM_CLOSE:								// Did We Receive A Close Message?		{			PostQuitMessage(0);						// Send A Quit Message			FreeConsole();			return 0;								// Jump Back		}		case WM_KEYDOWN:							// Is A Key Being Held Down?		{			keys[wParam] = TRUE;					// If So, Mark It As TRUE			return 0;								// Jump Back		}		case WM_KEYUP:								// Has A Key Been Released?		{			keys[wParam] = FALSE;					// If So, Mark It As FALSE			return 0;								// Jump Back		}		case WM_SIZE:								// Resize The OpenGL Window		{			ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));  // LoWord=Width, HiWord=Height			return 0;								// Jump Back		}		case WM_MOUSEMOVE:		{			WriteFile(handle, msg1, strlen(msg1), &dwBytesWritten, NULL);			break;		}				   	}	// Pass All Unhandled Messages To DefWindowProc	return DefWindowProc(hWnd,uMsg,wParam,lParam);}
Can really no one figure out what is the trouble?

I figured it out, there were delays :)

[Edited by - McCoder on September 17, 2008 10:16:38 AM]
you should also return 0 when you process the WM_MOUSEMOVE message

hope that helps

This topic is closed to new replies.

Advertisement