Anfängerproblem



  • ich habs als global initialisiert, weil der compiler sonst immer gemeldet hat:

    Die nicht initialisierte lokale Variable pszFileTExtW wurde nicht verwendet



  • // Eingabe-String:
    	char inputStr[]="Dies ist ein Test-String öäü €"; 
    
    	// Ermitteln wieviele Zeichen das umgewandelt in WideChars ergibt:
    	int charsNeeded=MultiByteToWideChar(CP_ACP,0,inputStr,-1,NULL,0);
    	if (charsNeeded==0)
    	{
    		// Failed!		
    	}
    
    	// Passend großen Speicher organisieren:
    	wchar_t* outputStr=(wchar_t*)malloc(sizeof(wchar_t)*charsNeeded);
    
    	// Umwandeln:
    	if (MultiByteToWideChar(CP_ACP,0,inputStr,-1,outputStr,charsNeeded)==0)
    	{
    		// Failed!
    	}
    
    	// Testweise im Debug-Output ausgeben:
    	OutputDebugStringW(outputStr);
    	OutputDebugStringW(L"\r\n");
    
    	// Speicher freigeben:
    	free(outputStr);
    


  • ich danke dir echt geeky für deine bemühungen.
    da ich aber n begnadeter anfänger bin, hab ich keine ahnung was ich damit anfangen soll.



  • Hi

    Dieser Code von geeky macht nichts anderes als von char in MultiByteToWideChar() zu convertieren, wie du sehen kannst.

    lowbyte



  • ok ich verstehe, aber du kannst doch nicht einfach inputStr []
    definieren und dann bei MultibyteStr (zeile5) das als einen wert inputStr verwenden?



  • ich meine wenn ich das so schreibe:
    char pszFileText[];
    kommt: error pszFileText unbekannte größe



  • am ende kommen wieder nur striche raus ||||||||||||||, jaja jetzt verlier ich die lust langsam



  • char inputStr[]="Dies ist ein Test-String öäü €";
    // ...ist grob gleich bedeutend mit:
    
    char inputStr[31];
    strcpy(inputStr,"Dies ist ein Test-String öäü €");
    
    // welches man sehr sehr grob als gleichbedeutend damit ansehen kann:
    char* inputStr=(char*)malloc(31);
    strcpy(inputStr,"Dies ist ein Test-String öäü €");
    
    // oder damit:
    LPSTR inputStr=(LPSTR)malloc(31);
    strcpy(inputStr,"Dies ist ein Test-String öäü €");
    
    char pszFileText[];
    

    funktioniert nicht, weil der Compiler keine Array/Feld-Größe bestimmen kann, in meinem Falle kann er das anhand der Länge des angegebenen Strings. D.h. mit dieser Schreibweise kann man keine Felder/Arrays anlegen dessen Größe erst während der Programmausführung festgelegt wird.

    Der Quellcode sollte nur ein kleines Beispiel für die Verwendung von MultiByteToWideChar() sein.
    Ich hoffe das hilft mehr als es verwirrt 😉



  • und der code ist jetzt wie deiner:
    ReadFile(hFile,pszFileText,dwFileSize,&dwRead,NULL);

    dwFileSize = MultiByteToWideChar (CP_ACP,0,pszFileText,-1,NULL,0);
    if (dwFileSize==0){
    //Failed
    }

    wchar_t* pszFileTextW;
    pszFileTextW = (wchar_t*) malloc (sizeof(wchar_t)*dwFileSize);

    MultiByteToWideChar(CP_ACP,0,pszFileText,-1,pszFileTextW,dwFileSize);
    {
    //Failed
    }

    if (SetWindowText(hEdit,pszFileTextW))
    bSuccess = TRUE;

    free (pszFileTextW);



  • ich schaff es einfach nicht ein fenster zu erstellen, in dem zwei weitere (müssen das child windows sein?) enthalten sind mit scroll leiste....
    das ist mein erste problem.
    allerdings muss das eine fenster mit dem anderen kommunizieren, also wenn ich zb buttons im linken betätige sollen aktionen im rechten erscheinen, z.b. text

    ich habe das mit creatwindowex schon paar mal probiert aber iwie bekomm ich nur n fenster im editfeld

    tipps wären wiklich nett

    danke für eure antworten



  • kann mir keiner helfen oder zumindest sagen ob das so realisierbar ist



  • Klar, ist möglich.
    Du erstellst bspw. ein Hauptfenster und erstellst dann zwei Childfenster, die in der Hauptfensternachrichtenschleife (wasn Wort) verwaltet werden, dass heißt bei WM_SIZE werden sie passend verschoben etc.
    Wenn jetzt jemand einen Button im Childfenster 1 anklickt, kann in der Fensterprozedur dieses Fensters eine (selbstdefinierte) Nachricht an das 2. Childfenster geschickt werden.
    Tipp: Du kannst per CreateWindow(Ex) das Hauptfenster erstellen und per CreateDialog zwei Dialoge einbinden, die du vorher mit dem Resourceneditor erstellt hast (Style: Child, no title bar).

    Edit "erstellst"



  • danke vicious ich habs geschafft, allerdings nicht mit zwei dialogen sondern zwei fenstern..
    und hab natürlich gleich noch ne neue frage 😛
    unzwar hab ich das eine fenster mit CreateWindowEx erstellt, wo der Text erscheint den ich mit SetWindowText ausgebe.

    Mein problem ist jetz das in diesem Text ein cursor blinkt der den Text löschen kann, man soll diesen Text aber nur lesen können!
    ich finde kein kommando, dass dies wohl bei CreateWindowEx realisiert..
    weiß aber auch nicht wo ich das sonst ändern könnte, kann mir jemand weiterhelfen?

    Danke, ich hoffe auf antworten.


  • Mod

    ES_READONLY...



  • Danke,

    ist es auch möglich sich anstelle von einer bool´schen 1 eine Checkbox ausgeben zu lassen, die je nach dem 1(hacken) 0 (kein hacken) im Fenster anzeigt



  • hacken? Evtl Haken?
    Natürlich ist das möglich, einfach eine Checkbox erstellen und mit CheckDlgButton den Haken setzen oder mit IsDlgButtonChecked den Status abfragen.



  • Hi!

    Ich habe mal ne Frage, deren Antwort mir ein wenig Sorge bereitet...
    Unzwar habe ich ein Programm in Visual Studio 2008 mit WinApi in C geschrieben, kompilieren und exe ausführen ist kein problem (unter Windows XP). jetzt habe ich festgestellt, als ich die exe auf einem anderen PC öffnen wollte, kam folgende Meldung:

    "Diese Anwendung konnte nicht gestartet werden, da die Side-by-Side-Konfiguration ungültig ist. Weitere Informationen finden sie im Anwendungsereignisprotokoll"

    die exe ist also kurz gesagt, nicht ausführbar...Weiß jemand warum und wie ich das problem beheben könnte.





  • Danke Jochen!

    Hätte nicht mit so einer schnellen Antwort gerechnet, es funktioniert!
    So ein kleines Video ist schon was schönes :)!


Anmelden zum Antworten