You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/10/14 08:43:55 UTC
svn commit: r825029 - in
/commons/sandbox/runtime/trunk/src/main/native/os/win32: gui.c main.rc
Author: mturk
Date: Wed Oct 14 06:43:54 2009
New Revision: 825029
URL: http://svn.apache.org/viewvc?rev=825029&view=rev
Log:
Add few Windows GUI methods
Modified:
commons/sandbox/runtime/trunk/src/main/native/os/win32/gui.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/main.rc
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/gui.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/gui.c?rev=825029&r1=825028&r2=825029&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/gui.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/gui.c Wed Oct 14 06:43:54 2009
@@ -25,5 +25,171 @@
#include "acr_tlsd.h"
#include "acr_vm.h"
+#include <commdlg.h>
+#include <commctrl.h>
+#include <objbase.h>
+#include <shlobj.h>
+#include <shlwapi.h>
+#include <shellapi.h>
+#include <zmouse.h>
+#include <richedit.h>
+
+#pragma comment(lib, "comctl32.lib")
+
/* GUI Windows functions
*/
+#define IDI_MAINICON 101
+#define MGUI_WINDOWS 32
+
+HICON gui_h16Icon = NULL;
+HICON gui_h32Icon = NULL;
+HICON gui_h48Icon = NULL;
+HMODULE gui_hMSHTML = NULL;
+HWND gui_DialogWnd = NULL;
+static HINSTANCE gui_hInstance = NULL;
+static HWND gui_hMainWnd = NULL;
+static HMODULE gui_hRichedit = NULL;
+
+static UINT gui_ucNumLines = 3;
+static CHAR gui_szWndClass[MAX_PATH];
+
+
+static HWND gui_Windows[MGUI_WINDOWS];
+
+int GuiRegisterWindow(HWND hWnd)
+{
+ int i;
+ for (i = 0; i < MGUI_WINDOWS; i++) {
+ if (!gui_Windows[i]) {
+ gui_Windows[i] = hWnd;
+ return i;
+ }
+ }
+ return -1;
+}
+
+void GuiUnregisterWindow(int nIndex)
+{
+ if (nIndex >= 0 && nIndex < MGUI_WINDOWS)
+ gui_Windows[nIndex] = NULL;
+}
+
+BOOL GuiInitialize()
+{
+ int i;
+ INITCOMMONCONTROLSEX stCmn;
+
+ CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
+ gui_hInstance = GetModuleHandle(NULL);
+ stCmn.dwSize = sizeof(INITCOMMONCONTROLSEX);
+ stCmn.dwICC = ICC_WIN95_CLASSES | ICC_USEREX_CLASSES |
+ ICC_COOL_CLASSES | ICC_NATIVEFNTCTL_CLASS |
+ ICC_INTERNET_CLASSES | ICC_PAGESCROLLER_CLASS |
+ ICC_BAR_CLASSES;
+
+ InitCommonControlsEx(&stCmn);
+ gui_hRichedit = LoadLibraryA("RICHED32.DLL");
+ gui_hMSHTML = LoadLibraryA("MSHTML.DLL");
+
+ gui_h16Icon = LoadImage(gui_hInstance, MAKEINTRESOURCE(IDI_MAINICON),
+ IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
+ gui_h32Icon = LoadImage(gui_hInstance, MAKEINTRESOURCE(IDI_MAINICON),
+ IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
+
+ SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0,
+ &gui_ucNumLines, 0);
+ for (i = 0; i < MGUI_WINDOWS; i++)
+ gui_Windows[i] = NULL;
+ return TRUE;
+}
+
+BOOL GuiTerminate()
+{
+ int i;
+ for (i = 0; i < MGUI_WINDOWS; i++) {
+ if (gui_Windows[i]) {
+ SendMessage(gui_Windows[i], WM_CLOSE, 0, 0);
+ gui_Windows[i] = NULL;
+ }
+ }
+ FreeLibrary(gui_hRichedit);
+ FreeLibrary(gui_hMSHTML);
+
+ return TRUE;
+}
+
+/**
+ * Load the resource string with the ID given, and return a
+ * pointer to it. Notice that the buffer is common memory so
+ * the string must be used before this call is made a second time.
+ */
+LPSTR GuiLoadResource(
+ UINT wID,
+ UINT nBuf)
+{
+ static CHAR szBuf[4][ACR_MBUFF_SIZ];
+ if (nBuf > 3)
+ return "";
+ if (LoadStringA(gui_hInstance, wID, szBuf[nBuf], ACR_MBUFF_LEN) > 0)
+ return szBuf[nBuf];
+ else
+ return "";
+}
+
+void GuiCenterWindow(HWND hWnd)
+{
+ RECT rc, rw;
+ int cw, ch;
+ int px, py;
+
+ /* Get the Height and Width of the child window */
+ GetWindowRect(hWnd, &rc);
+ cw = rc.right - rc.left;
+ ch = rc.bottom - rc.top;
+
+ /* Get the limits of the 'workarea' */
+ if (!SystemParametersInfo(SPI_GETWORKAREA,
+ sizeof(RECT),
+ &rw,
+ 0)) {
+ rw.left = rw.top = 0;
+ rw.right = GetSystemMetrics(SM_CXSCREEN);
+ rw.bottom = GetSystemMetrics(SM_CYSCREEN);
+ }
+
+ /* Calculate new X and Y position*/
+ px = (rw.right - cw) / 2;
+ py = (rw.bottom - ch) / 2;
+ SetWindowPos(hWnd, HWND_TOP, px, py, 0, 0,
+ SWP_NOSIZE | SWP_SHOWWINDOW);
+}
+
+BOOL GuiBrowseForFolderW(HWND hWnd, LPCWSTR szTitle,
+ LPWSTR szPath, int iFlags)
+{
+ BOOL rv = FALSE;
+
+ BROWSEINFOW bi;
+ ITEMIDLIST *il , *ir;
+ LPMALLOC pMalloc;
+
+ memset(&bi, 0, sizeof(BROWSEINFOW));
+ SHGetSpecialFolderLocation(hWnd, CSIDL_DRIVES, &il);
+
+ bi.lpszTitle = szTitle;
+ bi.pszDisplayName = szPath;
+ bi.hwndOwner = hWnd;
+ bi.ulFlags = iFlags;
+ bi.pidlRoot = il;
+ if ((ir = SHBrowseForFolderW(&bi)) != NULL) {
+ SHGetPathFromIDListW(ir, szPath);
+ rv = TRUE;
+ }
+
+ if (SHGetMalloc(&pMalloc)) {
+ pMalloc->lpVtbl->Free(pMalloc, il);
+ pMalloc->lpVtbl->Release(pMalloc);
+ }
+ return rv;
+}
+
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/main.rc
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/main.rc?rev=825029&r1=825028&r2=825029&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/main.rc (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/main.rc Wed Oct 14 06:43:54 2009
@@ -74,6 +74,7 @@
#define APP_FILEFLAGS STD_FILEFLAGS
#endif
+#define IDI_MAINICON 101
IDI_MAINICON ICON "apache.ico"
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "commonc.manifest"