Index: gcc.sgml =================================================================== RCS file: /cvs/src/src/winsup/doc/gcc.sgml,v retrieving revision 1.2 diff -u -p -r1.2 gcc.sgml --- gcc.sgml 4 Dec 2001 04:20:30 -0000 1.2 +++ gcc.sgml 26 Apr 2003 14:04:32 -0000 @@ -38,17 +38,6 @@ int foo (int i) -For most cases, you can just remove the __export and leave it at -that. For convenience sake, you might want to include the following -code snippet when compiling GUI programs. If you don't, you will want -to add "-e _mainCRTStartup" to your link line in your Makefile. - - -#ifdef __CYGWIN__ -WinMainCRTStartup() { mainCRTStartup(); } -#endif - - The Makefile is similar to any other UNIX-like Makefile, and like any other Cygwin makefile. The only difference is that you use gcc -mwindows to link your program into a GUI @@ -73,6 +62,93 @@ compatibility with the many examples tha handle Windows resource files directly, we maintain the .res naming convention. For more information on windres, consult the Binutils manual. + + +The following is a simple GUI-mode "Hello, World!" program to help +get you started: + +/*-------------------------------------------------*/ +/* hellogui.c - gui hello world */ +/* build: gcc -mwindows hellogui.c -o hellogui.exe */ +/*-------------------------------------------------*/ +#include <windows.h> + +char glpszText[1024]; + +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); + +int APIENTRY WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) +{ + sprintf(glpszText, + "Hello World\nGetCommandLine(): [%s]\n" + "WinMain lpCmdLine: [%s]\n", + lpCmdLine, GetCommandLine() ); + + WNDCLASSEX wcex; + + wcex.cbSize = sizeof(wcex); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = NULL; + wcex.lpszClassName = "HELLO"; + wcex.hIconSm = NULL; + + if (!RegisterClassEx(&wcex)) + return FALSE; + + HWND hWnd; + hWnd = CreateWindow("HELLO", "Hello", WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); + + if (!hWnd) + return FALSE; + + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + MSG msg; + while (GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return msg.wParam; +} + +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + HDC hdc; + + switch (message) + { + case WM_PAINT: + hdc = BeginPaint(hWnd, &ps); + RECT rt; + GetClientRect(hWnd, &rt); + DrawText(hdc, glpszText, strlen(glpszText), &rt, DT_TOP | DT_LEFT); + EndPaint(hWnd, &ps); + break; + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + +