Strings und if/ofstreams mit WinApi?



  • 1:
    Wie kann man Strings z.B. mit MessageBox benutzen?

    string sString;
    MessageBox(NULL,/*sString oder TEXT(sString.c_str)..geht alles nicht*/,TEXT(".."), MB_OK);
    

    2:
    Wie kann man ofstreams/ifstreams benutzen?

    string input;
    ifstream in;
    in.open("data.txt", ios::in);
    getline(in,input);
    

    Gibt es sowas ähnliches, wenn möglich auch mit of/ifstreams?



  • zu 1.

    MessageBoxA(NULL, sString.c_str(), "..", MB_OK);
    

    oder

    MessageBoxW(NULL, TEXT(sString.c_str()), TEXT(".."), MB_OK);
    

    also hier nich verwechseln... c_str() is ne funktion der string klasse also die "()" nich vergessen

    zu 2.
    dein code muss so klappen...
    hast du auch den string header includet? also nich nur iostream! Müsste so aussehen:

    #include <iostream>
    #include <fstream>
    #include <string>
    


  • Ok, vielen Dank es Funktioniert.
    Nur habe ich jetzt ein anderes Problem:

    //in.open...
    string sfound;
    			 hdc = GetDC(hwnd);
    			 GetTextMetrics(hdc, &tm);
    			cxChar = tm.tmAveCharWidth;
    			cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
    			cyChar = tm.tmExternalLeading;
    			ReleaseDC(hwnd, hdc);
    			 getline(in, sFound);
    			 hdc = BeginPaint(hwnd, &ps);
    			 TextOutA(hdc,100,100, szFound.c_str(), szFound.length());
    			 EndPaint(hwnd, &ps);
    

    Dieser Code lässt sich zwar kompilieren, geht aber trotzdem nicht.
    In dem Fenster wird einfach nichts ausgegeben. In der Datei steht "HallO" aber trotzdem, nichts...

    Und mit

    TextOutW(hdc,100,100, TEXT(sFound.c_str()), szFound.length());
    

    Lässt es sich nicht kompilieren, da steh dann "ERROR: Der Bezeichner "LsFound" ist nicht definiert."

    Wie kann ich das jetzt berichtigen?

    MFG!



  • Solange Du mit UNICODE nicht richtig umgehen kannst, wäre es vermutlich am einfachsten, zunächst mal Deine Projekte als Mulitbytecharacter-Projekte zu erstellen. Dann brauchst Du keine TEXT - Makros und die A's und W's am Ende der WinApi-Funktionsaufrufe (zB. TextOut) kannst Du Dir auch sparen.
    Wenn wir nicht wissen, ob Dein Projekt UNICODE oder Multibyte benutzt, ist es schwierig, Deine Beispiele nachzuvollziehen und Hilfestellung zu geben.


Anmelden zum Antworten