]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/utilsgui.cpp
move wxIsDragResultOk out of line to avoid problems with DLL-exported inline function...
[wxWidgets.git] / src / msw / utilsgui.cpp
index fc8b08f12d115e6aef6a1f124bd7277e28d5acf9..d1acea6ad5e2d32c31e485edd7d6bc7534810e4d 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     21.06.2003 (extracted from msw/utils.cpp)
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// License:     wxWindows license
+// License:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
@@ -30,6 +30,8 @@
     #include "wx/utils.h"
 #endif //WX_PRECOMP
 
+#include "wx/dynlib.h"
+
 #include "wx/msw/private.h"     // includes <windows.h>
 
 // ============================================================================
@@ -90,17 +92,17 @@ bool wxGetResource(const wxString& section, const wxString& entry, wxChar **valu
         int n = GetPrivateProfileString(section, entry, defunkt,
                                         buf, WXSIZEOF(buf), file);
         if (n == 0 || wxStrcmp(buf, defunkt) == 0)
-            return FALSE;
+            return false;
     }
     else
     {
         int n = GetProfileString(section, entry, defunkt, buf, WXSIZEOF(buf));
         if (n == 0 || wxStrcmp(buf, defunkt) == 0)
-            return FALSE;
+            return false;
     }
     if (*value) delete[] (*value);
     *value = wxStrcpy(new wxChar[wxStrlen(buf) + 1], buf);
-    return TRUE;
+    return true;
 }
 
 bool wxGetResource(const wxString& section, const wxString& entry, float *value, const wxString& file)
@@ -111,9 +113,9 @@ bool wxGetResource(const wxString& section, const wxString& entry, float *value,
     {
         *value = (float)wxStrtod(s, NULL);
         delete[] s;
-        return TRUE;
+        return true;
     }
-    else return FALSE;
+    else return false;
 }
 
 bool wxGetResource(const wxString& section, const wxString& entry, long *value, const wxString& file)
@@ -124,9 +126,9 @@ bool wxGetResource(const wxString& section, const wxString& entry, long *value,
     {
         *value = wxStrtol(s, NULL, 10);
         delete[] s;
-        return TRUE;
+        return true;
     }
-    else return FALSE;
+    else return false;
 }
 
 bool wxGetResource(const wxString& section, const wxString& entry, int *value, const wxString& file)
@@ -137,9 +139,9 @@ bool wxGetResource(const wxString& section, const wxString& entry, int *value, c
     {
         *value = (int)wxStrtol(s, NULL, 10);
         delete[] s;
-        return TRUE;
+        return true;
     }
-    else return FALSE;
+    else return false;
 }
 #endif // wxUSE_RESOURCES
 
@@ -157,7 +159,7 @@ extern HCURSOR wxGetCurrentBusyCursor()
 }
 
 // Set the cursor to the busy cursor for all windows
-void wxBeginBusyCursor(wxCursor *cursor)
+void wxBeginBusyCursor(const wxCursor *cursor)
 {
     if ( gs_wxBusyCursorCount++ == 0 )
     {
@@ -184,7 +186,7 @@ void wxEndBusyCursor()
     }
 }
 
-// TRUE if we're between the above two calls
+// true if we're between the above two calls
 bool wxIsBusy()
 {
   return gs_wxBusyCursorCount > 0;
@@ -194,7 +196,7 @@ bool wxIsBusy()
 // in long calculations.
 bool wxCheckForInterrupt(wxWindow *wnd)
 {
-    wxCHECK( wnd, FALSE );
+    wxCHECK( wnd, false );
 
     MSG msg;
     while ( ::PeekMessage(&msg, GetHwndOf(wnd), 0, 0, PM_REMOVE) )
@@ -203,7 +205,7 @@ bool wxCheckForInterrupt(wxWindow *wnd)
         ::DispatchMessage(&msg);
     }
 
-    return TRUE;
+    return true;
 }
 
 // MSW only: get user-defined resource from the .res file.
@@ -257,17 +259,17 @@ void wxGetMousePosition( int* x, int* y )
     GetCursorPos( & pt );
     if ( x ) *x = pt.x;
     if ( y ) *y = pt.y;
-};
+}
 
-// Return TRUE if we have a colour display
+// Return true if we have a colour display
 bool wxColourDisplay()
 {
 #ifdef __WXMICROWIN__
     // MICROWIN_TODO
-    return TRUE;
+    return true;
 #else
     // this function is called from wxDC ctor so it is called a *lot* of times
-    // hence we optimize it a bit but doign the check only once
+    // hence we optimize it a bit but doing the check only once
     //
     // this should be MT safe as only the GUI thread (holding the GUI mutex)
     // can call us
@@ -452,3 +454,50 @@ void wxDrawLine(HDC hdc, int x1, int y1, int x2, int y2)
 }
 
 
+// ----------------------------------------------------------------------------
+// Shell API wrappers
+// ----------------------------------------------------------------------------
+
+extern bool wxEnableFileNameAutoComplete(HWND hwnd)
+{
+#if wxUSE_DYNLIB_CLASS
+    typedef HRESULT (WINAPI *SHAutoComplete_t)(HWND, DWORD);
+
+    static SHAutoComplete_t s_pfnSHAutoComplete = NULL;
+    static bool s_initialized = false;
+
+    if ( !s_initialized )
+    {
+        s_initialized = true;
+
+        wxLogNull nolog;
+        wxDynamicLibrary dll(_T("shlwapi.dll"));
+        if ( dll.IsLoaded() )
+        {
+            s_pfnSHAutoComplete =
+                (SHAutoComplete_t)dll.GetSymbol(_T("SHAutoComplete"));
+            if ( s_pfnSHAutoComplete )
+            {
+                // won't be unloaded until the process termination, no big deal
+                dll.Detach();
+            }
+        }
+    }
+
+    if ( !s_pfnSHAutoComplete )
+        return false;
+
+    HRESULT hr = s_pfnSHAutoComplete(hwnd, 0x10 /* SHACF_FILESYS_ONLY */);
+    if ( FAILED(hr) )
+    {
+        wxLogApiError(_T("SHAutoComplete"), hr);
+        return false;
+    }
+
+    return true;
+#else
+    wxUnusedVar(hwnd);
+    return false;
+#endif // wxUSE_DYNLIB_CLASS/!wxUSE_DYNLIB_CLASS
+}
+