sendMessage



  • Schweiz



  • @RenéG: Der ist gut 😃

    Da du ja offenbar eigene Klasse verwendest (oder auch nicht und du weißt es nur nicht, dass das ger keine Klassen sind 🙄 wie z.B. winmain) musst du uns schon auch den Code davon zeigen 😉



  • russisch höhöhö

    ich weiss es nicht eben eine schlaue frage, könntest du mir trotzdem eine antwort geben, nicht jeder ist profi in c++..



  • nicht jeder ist profi in c++..

    Lern erstmal Deutsch und Satzbau. 🤡



  • ich kann nicht den ganzen code senden, aber ich habe eine klasse cserial die eine funktion read4800 beinhaltet. ich rufe jetzt von winmain aus diese funktion auf die mir werte von der seriellen schnittstelle liest. ich möchte jetzt den status der auslesung in einer statusbar darstellen und möchte daher eine message versenden

    SendMessage(hwndParent, PBM_SETRANGE, 0,MAKELPARAM(0, lengthOfFile / 2048));

    doch leider habe ich in cserial nichts um die messages aufzufangen und möchte es irgedwie anders regeln, aber wie? muss ich eine funktion zum auffangen der messages schreiben oder gibt es eine einfachere lösung?



  • übrigens ich liebe es blöd angemacht zu werden, was spielt der satzbau in diesem forum für eine rolle? kannst dich ja im deutschforum umsehen wenn es dir nicht passt!



  • marc_ch schrieb:

    doch leider habe ich in cserial nichts um die messages aufzufangen und möchte es irgedwie anders regeln, aber wie? muss ich eine funktion zum auffangen der messages schreiben oder gibt es eine einfachere lösung?

    Wozu musst du in dieser Klasse Messages auffangen - verstehe dein Problem irgendwie nicht so ganz



  • also hier zuerst mal mein code:

    //aus CSerial
    int CSerial::ReadData4800 (char *buffer,HANDLE hWnd) // Buffer (*buffer), der die Zeichen bekommt
    {
    	int dwToWrite=8;					//Anzahl der zu schreibenden Zeichen
    	int lengthOfFile=0;						//Zähler für die Anzahl der Zeichen	
    	int posNumber;							//Stelle an die in numberString geschrieben werden muss	
    	bool readNumb;						//Nummer wurde bereits gelesen
    	char ch;							//Hilfsvariable zum Merken des vorgegangenen Zeichens
    	int start;								//Position, an der Nummer beginnt
    	bool readError;								//Zeigt an ob Lesefehler gewesen
    	DWORD dwRead;					//Anzahl der gelesenen Zeichen
    	char chRead;					//aktuellgelesenes Zeichen
    //	char output[maxSize];			//ausgelesenen Daten	
    	bool first = true;
    	bool now = false;
    	int counter = 0;
    	char to4800[]=".040\r\n";       //Befehl zum Umschalten auf 4800 Baud
    	to4800[0]=0X06;
    	posNumber=0;							
    	readNumb=false;						
    	ch=' ';
    	start=0;										  	
    	readError=false;
    	int i = 0; 
    
    //XXX PBM_SETRANGE, PBM_SETSTEP und PBM_STEPIT werden nicht erkannt XXXX
    
    	SendMessage(hWnd, PBM_SETRANGE, 0,MAKELPARAM(0, 200)); 
    	SendMessage(hWnd, PBM_SETSTEP, (WPARAM) 1, 0); 
    	do{		
    		if (ReadFile(hComm, &chRead, 1, &dwRead, NULL)!=0){
    			// A byte has been read; process it. 
    			buffer[lengthOfFile]=chRead;
    			if (now){											//Der Befehl zum Umschalten auf 4800 Baud
    				if (counter==5){								//wird 5 Zeichen nach dem Punkt in der	
    					//WriteABuffer(to4800,dwToWrite);			//Zählerbezeichnung gesendet
    					SendData(to4800,dwToWrite);
    					ModeSet(4800,7,ONESTOPBIT,EVENPARITY);
    					Sleep(10);
    					now=false;
    			//		MessageBox(NULL,"auf 4800 gesetzt","meldung",MB_OK);
    				}
    
    				counter++;
    			}
    			if ((first) && (chRead=='.')) 
    			{
    				now=true;
    				counter=1;
    				first=false;
    			}
    			//if(i<60)
    			//	MessageBox(NULL,buffer,"meldung",MB_OK);
    			i++;
    			lengthOfFile++;
    			SendMessage(hWnd, PBM_STEPIT, 0, 0);
    		}else
    		{			// An error occurred in the ReadFile call. 
    			MessageBox(NULL,buffer,"fehlermeldung",MB_OK);
    			return (lengthOfFile); // die Anzahl der gelesenen Bytes zurückgeben
    			break;
    		}
    		if (dwRead!=1)
    			i ++;
    	}while (dwRead || i <= 1);		//Lese solange, solange es etwas zu lesen gibt
    	ModeSet(300,7,ONESTOPBIT,EVENPARITY);
    	return (lengthOfFile); // die Anzahl der gelesenen Bytes zurückgeben
    }
    
    //XXXXXXXXXXXXXXX aus winmain XXXXXXXXXXXXXXXXXx
    
    lengthOfFile = serialPort.ReadData4800(output,hWnd);
    
    case WM_CREATE:
    {
    	cxChar = LOWORD(GetDialogBaseUnits());
    	cyChar = HIWORD(GetDialogBaseUnits());
    
    	InitCommonControls(); 
    	statusBar = CreateWindowEx(0, 
    				 PROGRESS_CLASS,
    				 "", 
    				 WS_CHILD | WS_VISIBLE,
    				0, 
    				0,
    				0, 
    				0,
    				hWnd, 
    				NULL,
    				hInst, 
    				NULL);
    

    wie markiert im code werden PBM_SETRANGE, PBM_SETSTEP und PBM_STEPIT nicht erkannt. wenn ich jedoch den sendMessage befehl in winmain aufrufe ist werden sie erkannt. an den includedateien kann es meiner meinung nach nicht liegen, habe sie in beiden klassen eingebunden.



  • Kann es sein das du eine Statusanzeige machen willst,
    wie hast das Object erzeugt, wenn du das Object erzeugt hast hast du auch einen
    Handle darauf und kannst mit diesem Handle deine Kommandos absetzen.

    Allerdings: Ich rate hier auch nur was du willst.

    Definier mal dein Problem.
    Vielleicht finden wir dann auch eine gute Antwort.



  • Wo genau befindet sich dein lengthOfFile = serialPort.ReadData4800(output,hWnd); und ist hWnd auch das richtige Fenster-Handle?
    case WM_CREATE & Co. wird sich ja wohl kaum in WinMain, sondern in WindowProc - oder wie auch immer du das genannt hast - befinden



  • hallo leute,
    habe mein fehler gefunden, ich habe die comctrl.h headerdatei zu früh eingebunden und daher erkannte mein programm die parameter im sendmessagebefehl nicht.
    ich weiss es war eine ziemlich doofe frage, aber trotzdem vielen dank für eure hilfe

    c u


Anmelden zum Antworten