TCHAR konvertieren in char*? (Möglichst einfach)
-
Bei so vielen Fehlern kann das doch nie gelaufen haben!!
FERNman schrieb:
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpcmdline, int ncmdshow) { HWND hWnd; MSG message; // Nachricht hWnd = ErstelleFenster(hInst); // Hauptfenster erstellen ErstelleFenster(hInst); //aufruf der Funktion zum Hinzufügen von Buttons usw. ErstelleElemente(hWnd, hInst); // Prüfen, ob alles glatt ging if (hWnd == NULL) return (0); while (GetMessage (&message, NULL, 0, 0) ) { TranslateMessage (&message); DispatchMessage (&message); } return (int)(message.wParam); } // WinMain
Wenn
hWnd = ErstelleFenster(hInst);
schon schiefläuft wird
ErstelleElemente(hWnd, hInst);
wohl auch keinen Sinn machen. die zugehörige Fehlerabfrage kommt viel zu spät.
Unsinnigerweise wird ErstelleFenster() doppelt aufgerufen - beide Male erfolglos.
FERNman schrieb:
HWND ErstelleFenster(HINSTANCE hInst) { WNDCLASSEX windowclass; // Struktur für Fenstereigenschaften HWND hWnd; // Fenster-Handle const TCHAR szClassName[] = TEXT("Erstes Fenster"); ... // Fensterklasse registrieren if (!RegisterClassEx(&windowclass)) return (0); // Das Fenster erzeugen hWnd = CreateWindowEx(NULL, szClassName, TEXT("Das erste Fenster!"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, 325, 150, 1250, 720, NULL, NULL, hInst, NULL); }
Wie kommt der Fensterhandle denn hier zurueck; immerhin wird er ja bei
ErstelleElemente(hWnd, hInst);
benötigt ?
Beim zweiten (unsinnigen) Aufruf wird er dann garnicht erst zugewiesen ?
Der folgender Code ist auch absolut sinnfrei; wurde schon gesagt:
FERNman schrieb:
TCHAR szTEXT[512]; int Resultat; GetWindowText(hLabel, szTEXT, 512); if (szTEXT == "Hallo") { ...
Üblicherweise nimmt man dafür strcmp() oder (in deinem Fall) die entsprechende
UNICODE-Version davon.
-
Danke für die schnellen Antworten!
Ja ich gebe zu, ich habe noch nicht so weit gedacht, dass man c-strings nicht vergleichen kann.Aber zur zweiten Antwort:
Wenn ich meinen (zugegebenermaßen Sinnfreien) Code entferne, dann Läuft alles einwandfrei. Ich weiß nicht was du hast. Gut, es kann sein das der doppelaufruf sinnlos ist, probiere ich nachher gleich ausMFG
FERNman
-
FERNman schrieb:
und mit der MultiByteToWideChar() Funktion komme ich iwie nicht zurecht.
#include <windows.h> #include <iostream> #include <string> using namespace std; wstring toWide(string in, UINT from) { int len = MultiByteToWideChar(from, 0, in.c_str(), -1, 0, 0); if(!len) cout << "Fehler toWide?!\n"; WCHAR *res = new WCHAR[len]; int result = MultiByteToWideChar(from, 0, in.c_str(), -1, res, len); if(result != len) cout << "Fehler toWide?!\n"; wstring s(res); delete[] res; return s; } string toMultiByte(wstring in, UINT to) { const int len = WideCharToMultiByte(to, 0, in.c_str(), -1, 0, 0, 0, 0); if(!len) cout << "Fehler toMBCS 1?!\n"; char *res = new char[len]; int result = WideCharToMultiByte(to, 0, in.c_str(), -1, res, len, 0, 0); if(result != len) cout << "Fehler toMBCS2?!\n"; string s(res); delete[] res; return s; } string AnsiToUTF8(const string &in) { wstring tmp = toWide(in, CP_ACP); string res = toMultiByte(tmp, CP_UTF8); return res; } string UTF8ToAnsi(const string &in) { wstring tmp = toWide(in, CP_UTF8); string res = toMultiByte(tmp, CP_ACP); return res; }
-
Es ist weitaus einfacher die ATL Macros zu verwenden CT2A CW2A CA2W CA2T etc...
die lost der Compiler auch auf wenn eben nichts zu konvertieren ist bei den T Varianten.
-
Bezüglich multi-char <> wide-char Strings...
http://www.c-plusplus.net/forum/p1972600#1972600
http://www.c-plusplus.net/forum/p1850229#1850229
-
Martin Richter schrieb:
Es ist weitaus einfacher die ATL Macros zu verwenden CT2A CW2A CA2W CA2T etc...
die lost der Compiler auch auf wenn eben nichts zu konvertieren ist bei den T Varianten.Wenn ich mich nicht irre, hab ich die bei meiner Express-Version nicht?
-
Belli schrieb:
Martin Richter schrieb:
Es ist weitaus einfacher die ATL Macros zu verwenden CT2A CW2A CA2W CA2T etc...
die lost der Compiler auch auf wenn eben nichts zu konvertieren ist bei den T Varianten.Wenn ich mich nicht irre, hab ich die bei meiner Express-Version nicht?
Stimmt. ATL ist nicht im Express drin...
Aber die Sourcen fliegen auch so im Netz herum, dass man sich den Ansatz schnel abkupfern kann.
-
Danke, habs hinbekommen.
Aber ich habe noch eine Frage, wie kann ich CreateFont() auf einen Statischen Text anwenden? Mit Select Objekt oder? Wie funktioniert diese Funktion?
MFG
FERNman
-
SetFont / WM_SETFONT
-
FERNman schrieb:
Wenn ich meinen (zugegebenermaßen Sinnfreien) Code entferne, dann Läuft alles einwandfrei. Ich weiß nicht was du hast. Gut, es kann sein das der doppelaufruf sinnlos ist, probiere ich nachher gleich aus.
Das es zu laufen scheint, heisst nicht das es richtig ist.
Der Fensterhandle könnte wohl NULL sein
In Deinem Fall kann aber auch das nicht sein, da
FERNman schrieb:
// Prüfen, ob alles glatt ging if (hWnd == NULL) return (0);
Das ganze beenden würde.
Bleibt noch die Möglichkeit, das der gepostete Code nicht mit dem verwendeten
übereinstimmt.
-
Ja, Danke für Eure Antworten!
Bleibt noch die Möglichkeit, das der gepostete Code nicht mit dem verwendeten
übereinstimmt.Also das kann schonmal nicht sein, da ich meinen Code einfach genommen habe und ihn hierher kopiert habe :D.
Ja es kann schon sein dass ich Fehler habe, und dass der Fensterhandle NULL sein kann, das wusste ich nicht, ich beschäftige mich ja auch erst seit Drei Tagen mit der WinApi.
MFG
FERNman