X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b815cf68d24508ab76ace1ef439a6d4feffbd487..43c42c18d36c703a88b1b7b697bac27fe5608eca:/src/msw/hyperlink.cpp diff --git a/src/msw/hyperlink.cpp b/src/msw/hyperlink.cpp index 4e1ec86e7e..cb8951c936 100644 --- a/src/msw/hyperlink.cpp +++ b/src/msw/hyperlink.cpp @@ -19,12 +19,15 @@ #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 "properly" + #include "wx/msw/private.h" + #include "wx/msw/missing.h" #endif // ---------------------------------------------------------------------------- @@ -39,6 +42,10 @@ #define LWS_RIGHT 0x0020 #endif +#ifndef WC_LINK + #define WC_LINK L"SysLink" +#endif + // ---------------------------------------------------------------------------- // Helper functions // ---------------------------------------------------------------------------- @@ -47,13 +54,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("" - + wxStaticText::RemoveMarkup(text) + ""; + // Any "&"s in the text should appear on the screen and not be (mis) + // interpreted as mnemonics. + return wxString::Format("%s", + url, + wxControl::EscapeMnemonics(text)); } } @@ -143,7 +156,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 +182,4 @@ bool wxHyperlinkCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) return wxGenericHyperlinkCtrl::MSWOnNotify(idCtrl, lParam, result); } -#endif // wxUSE_HYPERLINKCTRL +#endif // wxUSE_HYPERLINKCTRL && wxUSE_UNICODE