diff --git a/winsup/doc/ChangeLog b/winsup/doc/ChangeLog index fad87057b..2a957d5f8 100644 --- a/winsup/doc/ChangeLog +++ b/winsup/doc/ChangeLog @@ -1,3 +1,8 @@ +2003-04-26 Joshua Daniel Franklin + + * gcc.sgml: Remove outdated "WinMainCRTStartup" references. Add a + hellogui.c example. + 2003-03-26 Joshua Daniel Franklin * setup-net.sgml: Make suggested additions to setup.exe documentation diff --git a/winsup/doc/gcc.sgml b/winsup/doc/gcc.sgml index 238babfa3..a67865de3 100644 --- a/winsup/doc/gcc.sgml +++ b/winsup/doc/gcc.sgml @@ -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 @@ -74,5 +63,92 @@ 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; +} + + +