Hallo,
so mein erster Beitrag - natürlich nicht ganz uneigennütig
Ich wollte heute anfangen mit C Windowsprogrammierung, hab mir eclipse, mingw gehohlt und alles installiert - ganz toll.
Nun wollte ich irgendwelche billigen Anwendungen schreiben, die die Win Api nutzen (und nur diese, kein gtk+, qt oder was es da noch gibt). Hab auf Wikipedia ein nettes Codebeispiel gefunden:
auch wenn ich 0% davon verstehe hat es unter Visual Studio prima geklappt ^^ unter Eclipse leider nicht.
In dem Code hat der ja keine Main-Funktion sondern nur eine WinMain, ich glaub damit kommt mein MinGW net klar. So sieht mein Buildlog aus:
Was mache ich falsch? Ich glaub, ich muss noch irgendwelche Bibliotheken (.dll ?) irgendwo einbinden, aber ich hab den Abend jetzt im Internet rumgesucht und nichts gefunden.
Sicher begehe ich irgend ein Anfängerfehler. Bei Visual Studio konnte ich immer so einfach auswählen "Konsolenanwendung" - "Gui Anwendung", geht das bei CDT auch irgendwo?
mfg
Thiele
so mein erster Beitrag - natürlich nicht ganz uneigennütig

Ich wollte heute anfangen mit C Windowsprogrammierung, hab mir eclipse, mingw gehohlt und alles installiert - ganz toll.
Nun wollte ich irgendwelche billigen Anwendungen schreiben, die die Win Api nutzen (und nur diese, kein gtk+, qt oder was es da noch gibt). Hab auf Wikipedia ein nettes Codebeispiel gefunden:
Code:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR const szAppName[] = TEXT("Klassenname");
HWND hWnd;
MSG msg;
WNDCLASSEX wndclassex;
wndclassex.cbSize = sizeof (WNDCLASSEX);
wndclassex.style = CS_HREDRAW | CS_VREDRAW;
wndclassex.lpfnWndProc = &WndProc;
wndclassex.cbClsExtra = 0;
wndclassex.cbWndExtra = 0;
wndclassex.hInstance = hInstance;
wndclassex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclassex.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclassex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclassex.lpszMenuName = NULL;
wndclassex.lpszClassName = szAppName;
wndclassex.hIconSm = wndclassex.hIcon;
if (!RegisterClassEx(&wndclassex))
{
MessageBox(NULL, TEXT("RegisterClassEx fehlgeschlagen!"),
szAppName, MB_OK | MB_ICONERROR);
return -1;
}
hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, // erweiterter Fensterstil
szAppName, // Name der Fensterklasse
TEXT("Fenstertitel"), // Fenstertitel
WS_OVERLAPPEDWINDOW, // Fensterstil
CW_USEDEFAULT, // X-Position des Fensters
CW_USEDEFAULT, // Y-Position des Fensters
CW_USEDEFAULT, // Fensterbreite
CW_USEDEFAULT, // Fensterhöhe
NULL, // übergeordnetes Fenster
NULL, // Menü
hInstance, // Programm-Kopiezähler (Programm-ID)
NULL); // zusätzliche Parameter
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
for (;;)
{
int ret = GetMessage(&msg, NULL, 0, 0);
if (ret == -1)
return -1;
else if (ret == 0)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnregisterClass(szAppName, hInstance);
return (int)msg.wParam;
}
// Die Hauptnachrichtenschleife
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 0, 0, TEXT("Hello World!"), 12);
EndPaint(hWnd, &ps);
return 0;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
auch wenn ich 0% davon verstehe hat es unter Visual Studio prima geklappt ^^ unter Eclipse leider nicht.
In dem Code hat der ja keine Main-Funktion sondern nur eine WinMain, ich glaub damit kommt mein MinGW net klar. So sieht mein Buildlog aus:
Code:
**** Build of configuration Debug for project ConsoleCalculate ****
**** Internal Builder is used for build ****
gcc -O0 -g3 -Wall -c -fmessage-length=0 -omain.o ..\main.c
gcc -oConsoleCalculate.exe main.o
main.o: In function `WinMain':
E:/eclipse/workspace/ConsoleCalculate/Debug/../main.c:21: undefined reference to `GetStockObject@4'
main.o: In function `WndProc':
E:/eclipse/workspace/ConsoleCalculate/Debug/../main.c:75: undefined reference to `TextOutA@20'
collect2: ld returned 1 exit status
Build error occurred, build is stopped
Time consumed: 434 ms.
Was mache ich falsch? Ich glaub, ich muss noch irgendwelche Bibliotheken (.dll ?) irgendwo einbinden, aber ich hab den Abend jetzt im Internet rumgesucht und nichts gefunden.
Sicher begehe ich irgend ein Anfängerfehler. Bei Visual Studio konnte ich immer so einfach auswählen "Konsolenanwendung" - "Gui Anwendung", geht das bei CDT auch irgendwo?
mfg
Thiele