Mausmessage ignorieren
-
Hallo zusammen,
ich versuche mir gerade ein kleines Programm zu schreiben welches mir Daten aus einem vom ComPort ausgibt. Sobald ich eine mit einer WM_TIMER Routine bekomme ich jede Sekunde einen Wert in einem Textfeld angezeigt, bewege ich allerdings die Maus so wird meine TIMER Message ignoriert. Was kann ich dagegen machen?Schon mal danke für die Hilfe!!!!
LG
-
Code?
-
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { // ===================== TIMER ERSTELLEN =================== // uResult = SetTimer(hwnd,NULL,500,NULL); char szTextFeld[] = "WERT"; switch (message) /* handle the messages */ { case WM_TIMER:{ if(ComLesen == 1){ int temp=ReadCom(szCopyComport); itoa (temp, szAusgabe, 10 ); SetWindowText( hWndTextfeld , szAusgabe ); } break; } case WM_PAINT: { hDC = BeginPaint( hwnd, &ps ); PrintText(&hDC); EndPaint (hwnd, &ps); break; } case WM_CREATE:{ SetBkColor (hDC, RGB(255,255,152) ); // ========== COMBOBOX SENSOR =============== // hWndComboBoxSensor = CreateWindowEx(NULL,"ComboBox","", WS_BORDER | WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, 25, 62, 136, 100,hwnd,NULL,NULL,NULL); SendMessage(hWndComboBoxSensor, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>((LPCTSTR)SensorItems[0])); SendMessage(hWndComboBoxSensor, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>((LPCTSTR)SensorItems[1])); // ========== COMBOBOX COMPORT =============== // hWndComboBoxComPort = CreateWindowEx(NULL,"ComboBox","TEST", WS_BORDER | WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, 25, 125, 136, 100,hwnd,(HMENU)1,NULL,NULL); SendMessage(hWndComboBoxComPort, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>((LPCTSTR)ComPortItems[0])); SendMessage(hWndComboBoxComPort, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>((LPCTSTR)ComPortItems[1])); // ========== TEXTFELD =============== // hWndTextfeld=CreateWindowEx(NULL,"edit",szAusgabe, WS_BORDER | WS_CHILD | WS_VISIBLE, 25, 225, 136, 20,hwnd,(HMENU) 1,NULL,NULL); // ========== BUTTON =============== // hWndStartButton = CreateWindow("BUTTON", "Start", WS_VISIBLE | WS_CHILD, 25,290,100,40, hwnd, (HMENU) 2, hInstButton, NULL); hWndResetButton = CreateWindow("BUTTON", "Reset", WS_VISIBLE | WS_CHILD, 150,290,100,40, hwnd, (HMENU) 3, hInstButton, NULL); break;} case WM_COMMAND:{ switch(wParam){ case 2: { GetWindowText( hWndComboBoxComPort, szCopyComport, sizeof(szCopyComport) ); GetWindowText( hWndComboBoxSensor, szCopySensor, sizeof(szCopySensor) ); if(szCopySensor[0]==0x0 && szCopyComport[0]==0x0 ){ MessageBox(NULL,"Bitte Sensor und ComPort wählen", "Fehler", MB_ICONERROR|MB_OK); } else if(szCopySensor[0] == 0x0){ MessageBox(NULL,"Bitte Sensor wählen", "Fehler", MB_ICONERROR|MB_OK); } else if(szCopyComport[0] == 0x0){ MessageBox(NULL,"Bitte ComPort wählen", "Fehler", MB_ICONERROR|MB_OK); } else{ ComLesen = 1; int temp=ReadCom(szCopyComport); itoa (temp, szAusgabe, 10 ); SetWindowText( hWndTextfeld , szAusgabe ); } break; } case 3: { ComLesen = 0; SetWindowText( hWndTextfeld , "" ); GeradeZeichnen(hDC,100,100); } } break; } case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
Meine WM_TIMER funktioniert ja auch, ich bekomme die empfangenen Werte auch richtig ausgegeben nur sobald ich meine Maus bewege wird die Timer Message ignoriert und mein Feld nicht aktualisiert.
-
uResult = SetTimer(hwnd,NULL,500,NULL);
Bei jeder Nachricht wird der Timer zurückgesetzt.
-
uResult = SetTimer(hwnd,NULL,500,NULL);
Der Aufruf von SetTimer gehört auch in den WM_CREATE-Zweig. Wenn du deine Maus bewegst, wird das Fenster immer mit WM_MOUSEMOVE-Nachrichten versorgt, die zu dem Funktionsaufruf führen. Anscheinend setzt Windows dabei den Timer zurück, sodass erst nach 500ms der nächste Eingang einer WM_TIMER-Nachricht zu erwarten ist - oder eben nicht, wenn weitere Nachrichten in dieser Zeit eintreffen.
-
Danke!!!!! Nachdem ich es in die WM_CREATE gesteckt hatte hat es funktioniert!