]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/hyperlink.cpp
Don't use DDEExec registry key in wxMSW wxExecute() if it's empty.
[wxWidgets.git] / src / msw / hyperlink.cpp
index 4e1ec86e7e1845d151460f0d51fdfc07efbc3702..f39d94ae17f092ae121b70fbc660b22fba07b153 100644 (file)
@@ -3,7 +3,6 @@
 // Purpose:     Hyperlink control
 // Author:      Rickard Westerlund
 // Created:     2010-08-03
-// RCS-ID:      $Id$
 // Copyright:   (c) 2010 wxWidgets team
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
     #pragma hdrstop
 #endif
 
-#if wxUSE_HYPERLINKCTRL
+#if wxUSE_HYPERLINKCTRL && wxUSE_UNICODE
 
 #include "wx/hyperlink.h"
 
 #ifndef WX_PRECOMP
-    #include "wx/stattext.h"
+    #include "wx/app.h"
+    #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
+    #include "wx/msw/private.h"
+    #include "wx/msw/missing.h"
 #endif
 
 // ----------------------------------------------------------------------------
     #define LWS_RIGHT 0x0020
 #endif
 
+#ifndef WC_LINK
+    #define WC_LINK L"SysLink"
+#endif
+
 // ----------------------------------------------------------------------------
 // Helper functions
 // ----------------------------------------------------------------------------
@@ -47,13 +53,19 @@ namespace
 {
     bool HasNativeHyperlinkCtrl()
     {
-        return wxGetWinVersion() >= wxWinVersion_XP;
+        // Notice that we really must test comctl32.dll version and not the OS
+        // version here as even under Vista/7 we could be not using the v6 e.g.
+        // if the program doesn't have the correct manifest for some reason.
+        return wxApp::GetComCtl32Version() >= 600;
     }
 
     wxString GetLabelForSysLink(const wxString& text, const wxString& url)
     {
-        return wxString("<A HREF=\"") + wxStaticText::RemoveMarkup(url) + "\">"
-            + wxStaticText::RemoveMarkup(text) + "</A>";
+        // Any "&"s in the text should appear on the screen and not be (mis)
+        // interpreted as mnemonics.
+        return wxString::Format("<A HREF=\"%s\">%s</A>",
+                                url,
+                                wxControl::EscapeMnemonics(text));
     }
 }
 
@@ -143,7 +155,7 @@ wxSize wxHyperlinkCtrl::DoGetBestClientSize() const
 {
     // LM_GETIDEALSIZE only exists under Vista so use the generic version even
     // when using the native control under XP
-    if ( wxGetWinVersion() < wxWinVersion_6 )
+    if ( !HasNativeHyperlinkCtrl() || (wxGetWinVersion() < wxWinVersion_6) )
         return wxGenericHyperlinkCtrl::DoGetBestClientSize();
 
     SIZE idealSize;
@@ -169,4 +181,4 @@ bool wxHyperlinkCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
    return wxGenericHyperlinkCtrl::MSWOnNotify(idCtrl, lParam, result);
 }
 
-#endif // wxUSE_HYPERLINKCTRL
+#endif // wxUSE_HYPERLINKCTRL && wxUSE_UNICODE