I'm building an app, and I use my own event queue. Everything works fine, except, that sometimes no mouse_up message is being sent when releasing a mouse button. I don't have a clue what the problem is. Can anyone help me ?
The error is in this part of the code :
Code:
Event temp;
void read_events(){
int i;
resetEvent(&temp);
if(getMouseEvent()){
copyEventToList(G->event, &temp);
}
resetEvent(&temp);
if(getMouseMoveEvent()){
copyEventToList(G->event, &temp);
}
handleWindowsEvents();
}
int getMouseEvent(){
MSG msg;
int muisx, muisy;
if(PeekMessage(&msg, getHwnd(), 0, 0, PM_NOREMOVE)){
getScaledMouseCoordinates(&muisx, &muisy);
if (msg.message == WM_LBUTTONDOWN){
temp.event = GUI_MOUSE_LEFT_DOWN;
temp.val1 = muisx;
temp.val2 = muisy;
return 1;
}
else if (msg.message == WM_MBUTTONDOWN){
temp.event = GUI_MOUSE_MIDDLE_DOWN;
temp.val1 = muisx;
temp.val2 = muisy;
return 1;
}
else if (msg.message == WM_RBUTTONDOWN){
temp.event = GUI_MOUSE_RIGHT_DOWN;
temp.val1 = muisx;
temp.val2 = muisy;
return 1;
}
else if (msg.message == WM_LBUTTONUP){
temp.event = GUI_MOUSE_LEFT_UP;
temp.val1 = muisx;
temp.val2 = muisy;
return 1;
}
else if (msg.message == WM_MBUTTONUP){
temp.event = GUI_MOUSE_MIDDLE_UP;
temp.val1 = muisx;
temp.val2 = muisy;
return 1;
}
else if (msg.message == WM_RBUTTONUP){
temp.event = GUI_MOUSE_RIGHT_UP;
temp.val1 = muisx;
temp.val2 = muisy;
return 1;
}
}
return 0;
}
int getMouseMoveEvent(){
MSG msg;
int muisx, muisy;
if(PeekMessage(&msg, getHwnd(), 0, 0, PM_NOREMOVE)){
getScaledMouseCoordinates(&muisx, &muisy);
if (msg.message == WM_MOUSEMOVE){
temp.event = GUI_MOUSE_MOVE;
temp.val1 = muisx;
temp.val2 = muisy;
return 1;
}
}
return 0;
}
void doWindowsEvents(){
MSG msg;
if(PeekMessage(&msg, getHwnd(), 0, 0, PM_REMOVE)){
if ((msg.message == WM_SYSKEYDOWN) || (msg.message == WM_KEYDOWN)){
}
else if ((msg.message == WM_SYSKEYUP) || (msg.message == WM_KEYUP)){
}
else if (msg.message == WM_CHAR){
}
else if (msg.message == WM_DEADCHAR){
}
else if (msg.message == WM_SYSDEADCHAR){
}
else if (msg.message == WM_LBUTTONDOWN){
}
else if (msg.message == WM_MBUTTONDOWN){
}
else if (msg.message == WM_RBUTTONDOWN){
}
else if (msg.message == WM_LBUTTONUP){
}
else if (msg.message == WM_MBUTTONUP){
}
else if (msg.message == WM_RBUTTONUP){
}
else if (msg.message == WM_MOUSEMOVE){
}
else if (msg.message == WM_SETCURSOR){
}
else if (msg.message == WM_NCMOUSEMOVE){
}
else if (msg.message == WM_NCHITTEST){
}
else if (msg.message == WM_CLOSE){
}
else if (msg.message == WM_ACTIVATE){
}
else if (msg.message == WM_PAINT){
}
else if (msg.message == WM_CAPTURECHANGED){
}
else if (msg.message == WM_SIZE){
}
else if (msg.message == WM_WINDOWPOSCHANGED){
}
else if (msg.message == WM_MOVE){
}
else if (msg.message == WM_ERASEBKGND){
}
else if (msg.message == WM_NCPAINT){
}
else if (msg.message == WM_NCACTIVATE){
}
else if (msg.message == WM_DESTROY){
}
else if (msg.message == WM_NCDESTROY){
}
else if (msg.message == WM_KILLFOCUS){
}
else if (msg.message == WM_SHOWWINDOW){
}
else if (msg.message == WM_WINDOWPOSCHANGING){
}
else if (msg.message == WM_SETFOCUS){
}
else if (msg.message == WM_MOVING){
}
else if (msg.message == WM_ENTERSIZEMOVE){
}
else if (msg.message == WM_GETTEXT){
}
else if (msg.message == WM_ACTIVATEAPP){
}
else if (msg.message == WM_TIMER){
}
else{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
Thanks in advance.