summary refs log tree commit diff stats
path: root/tinyc/win32/examples/hello_win.c
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2010-08-28 22:33:07 +0200
committerAraq <rumpf_a@web.de>2010-08-28 22:33:07 +0200
commit47886978c79a3246295114a853a9cd945d368708 (patch)
treef006dc90bb9c8c166214ca751af3739b89a73621 /tinyc/win32/examples/hello_win.c
parentb2075302b10b88047ea16007895bff4e46a2fa9c (diff)
downloadNim-47886978c79a3246295114a853a9cd945d368708.tar.gz
tiny C support; cosmetic improvements for the docs
Diffstat (limited to 'tinyc/win32/examples/hello_win.c')
-rwxr-xr-xtinyc/win32/examples/hello_win.c159
1 files changed, 159 insertions, 0 deletions
diff --git a/tinyc/win32/examples/hello_win.c b/tinyc/win32/examples/hello_win.c
new file mode 100755
index 000000000..294b7279a
--- /dev/null
+++ b/tinyc/win32/examples/hello_win.c
@@ -0,0 +1,159 @@
+//+---------------------------------------------------------------------------
+//
+//  HELLO_WIN.C - Windows GUI 'Hello World!' Example
+//
+//+---------------------------------------------------------------------------
+
+#include <windows.h>
+
+#define APPNAME "HELLO_WIN"
+
+char szAppName[] = APPNAME; // The name of this application
+char szTitle[]   = APPNAME; // The title bar text
+char *pWindowText;
+
+HINSTANCE g_hInst;          // current instance
+
+void CenterWindow(HWND hWnd);
+
+//+---------------------------------------------------------------------------
+//
+//  Function:   WndProc
+//
+//  Synopsis:   very unusual type of function - gets called by system to
+//              process windows messages.
+//
+//  Arguments:  same as always.
+//----------------------------------------------------------------------------
+
+LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+	switch (message)
+	{
+		// ----------------------- first and last
+		case WM_CREATE:
+			CenterWindow(hwnd);
+			break;
+
+		case WM_DESTROY:
+			PostQuitMessage(0);
+			break;
+
+
+		// ----------------------- get out of it...
+		case WM_RBUTTONUP:
+			DestroyWindow(hwnd);
+			break;
+
+		case WM_KEYDOWN:
+			if (VK_ESCAPE == wParam)
+				DestroyWindow(hwnd);
+			break;
+
+
+		// ----------------------- display our minimal info
+		case WM_PAINT:
+		{
+			PAINTSTRUCT ps;
+			HDC         hdc;
+			RECT        rc;
+			hdc = BeginPaint(hwnd, &ps);
+
+			GetClientRect(hwnd, &rc);
+			SetTextColor(hdc, RGB(240,240,96));
+			SetBkMode(hdc, TRANSPARENT);
+			DrawText(hdc, pWindowText, -1, &rc, DT_CENTER|DT_SINGLELINE|DT_VCENTER);
+
+			EndPaint(hwnd, &ps);
+			break;
+		}
+
+		// ----------------------- let windows do all other stuff
+		default:
+			return DefWindowProc(hwnd, message, wParam, lParam);
+	}
+	return 0;
+}
+
+//+---------------------------------------------------------------------------
+//
+//  Function:   WinMain
+//
+//  Synopsis:   standard entrypoint for GUI Win32 apps
+//
+//----------------------------------------------------------------------------
+int APIENTRY WinMain(
+				HINSTANCE hInstance,
+				HINSTANCE hPrevInstance,
+				LPSTR     lpCmdLine,
+				int       nCmdShow)
+{
+	MSG msg;
+
+	WNDCLASS wc;
+
+	HWND hwnd;
+
+	// Fill in window class structure with parameters that describe
+	// the main window.
+
+	ZeroMemory(&wc, sizeof wc);
+	wc.hInstance     = hInstance;
+	wc.lpszClassName = szAppName;
+	wc.lpfnWndProc   = (WNDPROC)WndProc;
+	wc.style         = CS_DBLCLKS|CS_VREDRAW|CS_HREDRAW;
+	wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
+	wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
+	wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
+
+	if (FALSE == RegisterClass(&wc)) return 0;
+
+	// create the browser
+	hwnd = CreateWindow(
+		szAppName,
+		szTitle,
+		WS_OVERLAPPEDWINDOW|WS_VISIBLE,
+		CW_USEDEFAULT,
+		CW_USEDEFAULT,
+		360,//CW_USEDEFAULT,
+		240,//CW_USEDEFAULT,
+		0,
+		0,
+		g_hInst,
+		0);
+
+	if (NULL == hwnd) return 0;
+
+	pWindowText = lpCmdLine[0] ? lpCmdLine : "Hello Windows!";
+
+	// Main message loop:
+	while (GetMessage(&msg, NULL, 0, 0) > 0)
+	{
+		TranslateMessage(&msg);
+		DispatchMessage(&msg);
+	}
+
+	return msg.wParam;
+}
+
+//+---------------------------------------------------------------------------
+
+//+---------------------------------------------------------------------------
+
+void CenterWindow(HWND hwnd_self)
+{
+	RECT rw_self, rc_parent, rw_parent; HWND hwnd_parent;
+	hwnd_parent = GetParent(hwnd_self);
+	if (NULL==hwnd_parent) hwnd_parent = GetDesktopWindow();
+	GetWindowRect(hwnd_parent, &rw_parent);
+	GetClientRect(hwnd_parent, &rc_parent);
+	GetWindowRect(hwnd_self, &rw_self);
+	SetWindowPos(hwnd_self, NULL,
+		rw_parent.left + (rc_parent.right + rw_self.left - rw_self.right) / 2,
+		rw_parent.top  + (rc_parent.bottom + rw_self.top - rw_self.bottom) / 2,
+		0, 0,
+		SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE
+		);
+}
+
+//+---------------------------------------------------------------------------