Ich habe versucht, ein Fenster Beispiel window.c in C und compiler es in window.exe von gcc auf meinem Fenster 7. Wenn ich window.exe auf der Befehlskonsole ausführen, es funktioniert, aber die Befehlskonsole kann nicht beendet werden, daher kann ich keinen anderen Befehl in derselben Konsole ausführen. Warum? Wenn ich putty.exe oder eine andere Fensteranwendung mit EXE-Erweiterung in der Befehlskonsole ausprobiere, wird die Befehlskonsole beendet, wenn das Programm ausgeführt oder geladen wird. Ob der Grund ist, gibt es keine main() einschließlich in der window.c oder nicht? Und andere Frage ist, warum der Code in der window.c kann im selbst ausgeführten Modus ohne main() einschließlich im Programm ausgeführt werden? Bitte gebenWie C-Fenster-Programm im Hintergrund auf Window 7
#include <windows.h>
const char g_szClassName[] = "myWindowClass";
// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
//Step 1: Registering the Window Class
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
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, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// Step 2: Creating the Window
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"The title of my window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 600, 300,
NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// Step 3: The Message Loop
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
es ist, weil es eine Windows-Anwendung ist. Sie benötigen eine Konsolenanwendung, die ein Fenster erstellt – beyrem
Können Sie uns ein Beispiel geben? Putty.exe ist Konsolenanwendung, richtig? – aabb