Patched GUI mode doc
Joshua Daniel Franklin
joshuadfranklin@yahoo.com
Sat Apr 26 14:14:00 GMT 2003
I checked in this patch to update the User's Guide discussion of
building GUI Mode Applications.
2003-04-26 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
* gcc.sgml: Remove outdated "WinMainCRTStartup" references. Add a
hellogui.c example.
-------------- next part --------------
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)
</screen>
-<para>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.</para>
-
-<screen>
-#ifdef __CYGWIN__
-WinMainCRTStartup() { mainCRTStartup(); }
-#endif
-</screen>
-
<para>The Makefile is similar to any other UNIX-like Makefile,
and like any other Cygwin makefile. The only difference is that you use
<command>gcc -mwindows</command> 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
<filename>.res</filename> naming convention. For more information on
<filename>windres</filename>, consult the Binutils manual. </para>
+
+<para>
+The following is a simple GUI-mode "Hello, World!" program to help
+get you started:
+<screen>
+/*-------------------------------------------------*/
+/* 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;
+}
+</screen>
+</para>
</sect2>
</sect1>
More information about the Cygwin-patches
mailing list