Um einen Befehl aus der Win-Shell auszuführen, benötigte ich
ShellExecuteA(NULL, "open", "http://stackoverflow.com", NULL, NULL, SW_SHOWNORMAL);
und jetzt arbeite ich durch das Forgers Win32 Tutorial und finde den A-Suffix notwendig, um zu verhindern, dass Müll auf dem Bildschirm angezeigt wird. Ich weiß, dass das etwas mit dem Zeichenformat zu tun hat, das mein Betriebssystem standardmäßig verwendet. Wenn ich mein Betriebssystem 'normalisieren' könnte, wäre das vielleicht die beste Lösung, denn ich erhalte NULL zurück von RegisterClassExA
, egal wie viele *A-Funktionen ich im zweiten Beispiel (nachfolgend mit vielen von mir hinzugefügten *A-Suffixen) verwende
#include
const wchar_t g_szClassName[] = L"myWindowClass";
// Schritt 4: Das Fensterverfahren
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{/*...*/
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
//Schritt 1: Registrierung der Fensterklasse
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, L"Fensterregistrierung fehlgeschlagen!", L"Fehler!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// Schritt 2: Das Fenster erstellen...
return Msg.wParam;
}
Ich habe den obigen Code überarbeitet, um ihn wie bei Forger (entfernte *A's) zu gestalten und stattdessen L""
-Zeichenfolgeninitialisierer verwendet, aber jetzt erhalte ich einen Fehler beim Zuweisen von const char g_szClassName[] = L"myWindowClass";
Fehler C2053: 'g_szClassName' : Breite Zeichenfolgenunstimmigkeit
Das Ersetzen von char
durch wchar
erzeugt Compilerfehlermeldungen, die darauf hinweisen, dass wchar
kein erkannter Typ ist.
_BEARBEITEN_
Ich nehme an, dass der L""
-Zeichenfolgenspezifizierer die bevorzugte Lösung ist, der ich folgen möchte. Entschuldigen Sie, wenn meine Frage um den heißen Brei herumgeht, ich bin für Vorschläge offen.
Habe gerade diesen Code auf das aktualisiert, was ich jetzt benutze, und den unnötigen Kram entfernt.
_BEARBEITEN_
Der Fehlercode ist 87, ungültiger Parameter, also ich nehme an, dass das Zuweisen des wchar_t
-Parameters ( wc.lpszClassName = g_szClassName;
) doch falsch ist… :@(
_BEARBEITEN_
Habe falsch geraten?! const LPCTSTR g_szClassName = L"myWindowClass";
hat nichts verbessert (oder verschlechtert).