summaryrefslogtreecommitdiff
path: root/pjlib/src/pjlib-test/main_win32.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjlib/src/pjlib-test/main_win32.c')
-rw-r--r--pjlib/src/pjlib-test/main_win32.c211
1 files changed, 211 insertions, 0 deletions
diff --git a/pjlib/src/pjlib-test/main_win32.c b/pjlib/src/pjlib-test/main_win32.c
new file mode 100644
index 0000000..fd107c3
--- /dev/null
+++ b/pjlib/src/pjlib-test/main_win32.c
@@ -0,0 +1,211 @@
+/* $Id: main_win32.c 3553 2011-05-05 06:14:19Z nanang $ */
+/*
+ * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
+ * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#include "test.h"
+
+#include <pj/string.h>
+#include <pj/unicode.h>
+#include <pj/sock.h>
+#include <pj/log.h>
+
+#define WIN32_LEAN_AND_MEAN
+#define NONAMELESSUNION
+#include <windows.h>
+#include <commctrl.h>
+#include <tchar.h>
+
+#define MAX_LOADSTRING 100
+#define THIS_FILE "main_win32.c"
+
+#define IDC_HELLO_WINCE 3
+#define ID_LOGWINDOW 104
+
+
+ATOM MyRegisterClass (HINSTANCE, LPTSTR);
+BOOL InitInstance (HINSTANCE, int);
+LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
+
+
+extern int param_log_decor; // in test.c
+
+static HINSTANCE hInst;
+static HWND hwndLog;
+static HFONT hFixedFont;
+
+
+static void write_log(int level, const char *data, int len)
+{
+ PJ_DECL_UNICODE_TEMP_BUF(wdata,256);
+
+ PJ_UNUSED_ARG(level);
+ PJ_UNUSED_ARG(len);
+ SendMessage(hwndLog, EM_REPLACESEL, FALSE,
+ (LPARAM)PJ_STRING_TO_NATIVE(data,wdata,256));
+}
+
+
+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
+ LPTSTR lpCmdLine, int nCmdShow)
+{
+ MSG msg;
+
+ PJ_UNUSED_ARG(lpCmdLine);
+ PJ_UNUSED_ARG(hPrevInstance);
+
+
+ if (!InitInstance (hInstance, nCmdShow))
+ return FALSE;
+
+ pj_log_set_log_func( &write_log );
+ param_log_decor = PJ_LOG_HAS_NEWLINE | PJ_LOG_HAS_CR;
+
+ // Run the test!
+ test_main();
+
+ PJ_LOG(3,(THIS_FILE,""));
+ PJ_LOG(3,(THIS_FILE,"Press ESC to quit"));
+
+ // Message loop, waiting to quit.
+ while (GetMessage(&msg, NULL, 0, 0)) {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+
+ DeleteObject(hFixedFont);
+ return msg.wParam;
+}
+
+
+#ifdef _CONSOLE
+int main()
+{
+ return WinMain(GetModuleHandle(NULL), NULL, NULL, SW_SHOW);
+}
+#endif
+
+
+ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
+{
+ WNDCLASS wc;
+
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+ wc.lpfnWndProc = (WNDPROC) WndProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = hInstance;
+ ///wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_HELLO_WINCE));
+ wc.hIcon = NULL;
+ wc.hCursor = 0;
+ wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
+ wc.lpszMenuName = 0;
+ wc.lpszClassName = szWindowClass;
+
+ return RegisterClass(&wc);
+}
+
+
+BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
+{
+ HWND hWnd;
+ TCHAR *szTitle = _T("PJSIP Test");
+ TCHAR *szWindowClass = _T("PJSIP_TEST");
+ LOGFONT lf;
+
+
+ memset(&lf, 0, sizeof(lf));
+ lf.lfHeight = 13;
+#if PJ_NATIVE_STRING_IS_UNICODE
+ wcscpy(lf.lfFaceName, _T("Courier New"));
+#else
+ strcpy(lf.lfFaceName, "Lucida Console");
+#endif
+
+ hFixedFont = CreateFontIndirect(&lf);
+ if (!hFixedFont)
+ return FALSE;
+
+ hInst = hInstance;
+
+ MyRegisterClass(hInstance, szWindowClass);
+
+ hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
+ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+ CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
+
+ if (!hWnd)
+ return FALSE;
+
+ ShowWindow(hWnd, nCmdShow);
+ UpdateWindow(hWnd);
+
+ if (hwndLog) {
+ SendMessage(hwndLog, WM_SETFONT, (WPARAM) hFixedFont, (LPARAM) 0);
+ ShowWindow(hwndLog, TRUE);
+ }
+
+ return TRUE;
+}
+
+
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ RECT rt;
+ DWORD dwStyle;
+
+ switch (message)
+ {
+ case WM_CREATE:
+ // Create text control.
+ GetClientRect(hWnd, &rt);
+ dwStyle = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |
+ WS_BORDER | ES_LEFT | ES_MULTILINE | ES_NOHIDESEL |
+ ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY;
+ hwndLog = CreateWindow( TEXT("edit"), // class
+ NULL, // window text
+ dwStyle, // style
+ 0, // x-left
+ 0, // y-top
+ rt.right-rt.left, // w
+ rt.bottom-rt.top, // h
+ hWnd, // parent
+ (HMENU)ID_LOGWINDOW,// id
+ hInst, // instance
+ NULL); // NULL for control.
+ break;
+ case WM_ACTIVATE:
+ if (LOWORD(wParam) == WA_INACTIVE)
+ DestroyWindow(hWnd);
+ break;
+ case WM_CHAR:
+ if (wParam == 27) {
+ DestroyWindow(hWnd);
+ }
+ break;
+ case WM_CLOSE:
+ DestroyWindow(hWnd);
+ break;
+ case WM_DESTROY:
+ PostQuitMessage(0);
+ break;
+ default:
+ return DefWindowProc(hWnd, message, wParam, lParam);
+ }
+ return 0;
+}
+