aboutsummaryrefslogtreecommitdiff
path: root/win32/examples
diff options
context:
space:
mode:
authorbellard <bellard>2005-04-14 23:49:21 +0000
committerbellard <bellard>2005-04-14 23:49:21 +0000
commit4821702fb49c72216c307341dc3dfd5a3984cf83 (patch)
treea26b97b558b47f741a1aebdc8a9962dd86b7436b /win32/examples
parentd733dc752e8d19bdebca46678c70d04d4d1f6f76 (diff)
downloadtinycc-4821702fb49c72216c307341dc3dfd5a3984cf83.tar.gz
tinycc-4821702fb49c72216c307341dc3dfd5a3984cf83.tar.bz2
win32 merge
Diffstat (limited to 'win32/examples')
-rw-r--r--win32/examples/dll.c15
-rw-r--r--win32/examples/dll.def6
-rw-r--r--win32/examples/fib.c23
-rw-r--r--win32/examples/hello_dll.c19
-rw-r--r--win32/examples/hello_win.c159
5 files changed, 222 insertions, 0 deletions
diff --git a/win32/examples/dll.c b/win32/examples/dll.c
new file mode 100644
index 0000000..0736459
--- /dev/null
+++ b/win32/examples/dll.c
@@ -0,0 +1,15 @@
+//+---------------------------------------------------------------------------
+//
+// dll.c - Windows DLL example - dynamically linked part
+//
+
+#include <windows.h>
+
+#define DLL_EXPORT __declspec(dllexport)
+
+
+DLL_EXPORT void HelloWorld (void)
+{
+ MessageBox (0, "Hello World!", "From DLL", MB_ICONINFORMATION);
+}
+
diff --git a/win32/examples/dll.def b/win32/examples/dll.def
new file mode 100644
index 0000000..14d7349
--- /dev/null
+++ b/win32/examples/dll.def
@@ -0,0 +1,6 @@
+; Windows DLL example - export definition for the DLL
+
+LIBRARY dll.dll
+
+EXPORTS
+HelloWorld
diff --git a/win32/examples/fib.c b/win32/examples/fib.c
new file mode 100644
index 0000000..dcdc270
--- /dev/null
+++ b/win32/examples/fib.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+
+int fib(n)
+{
+ if (n <= 2)
+ return 1;
+ else
+ return fib(n-1) + fib(n-2);
+}
+
+int main(int argc, char **argv)
+{
+ int n;
+ if (argc < 2) {
+ printf("usage: fib n\n"
+ "Compute nth Fibonacci number\n");
+ return 1;
+ }
+
+ n = atoi(argv[1]);
+ printf("fib(%d) = %d\n", n, fib(n, 2));
+ return 0;
+}
diff --git a/win32/examples/hello_dll.c b/win32/examples/hello_dll.c
new file mode 100644
index 0000000..d739758
--- /dev/null
+++ b/win32/examples/hello_dll.c
@@ -0,0 +1,19 @@
+//+---------------------------------------------------------------------------
+//
+// HELLO_DLL.C - Windows DLL example - main application part
+//
+
+#include <windows.h>
+
+void HelloWorld (void);
+
+int WINAPI WinMain(
+ HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine,
+ int nCmdShow)
+{
+ HelloWorld();
+ return 0;
+}
+
diff --git a/win32/examples/hello_win.c b/win32/examples/hello_win.c
new file mode 100644
index 0000000..f4becb8
--- /dev/null
+++ b/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
+ );
+}
+
+//+---------------------------------------------------------------------------