]> git.saurik.com Git - wxWidgets.git/commitdiff
attempts to fix virtual list control with Unicode and MSLU
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 10 Sep 2003 13:20:04 +0000 (13:20 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 10 Sep 2003 13:20:04 +0000 (13:20 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23474 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/listctrl.cpp

index af488d4e4122621c8aaf21f11a8e5d18ad06c0e2..3c9adee6387dacdea63ee7e9d14f5a4dee710bfc 100644 (file)
@@ -2145,6 +2145,10 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
                 }
                 break;
 
+                // when using MSLU we get ANSI messages sometimes, apparently
+#if wxUSE_UNICODE_MSLU
+            case LVN_GETDISPINFOA:
+#endif // wxUSE_UNICODE_MSLU
             case LVN_GETDISPINFO:
                 if ( IsVirtual() )
                 {
@@ -2156,7 +2160,29 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
                     if ( lvi.mask & LVIF_TEXT )
                     {
                         wxString text = OnGetItemText(item, lvi.iSubItem);
-                        wxStrncpy(lvi.pszText, text, lvi.cchTextMax);
+#if wxUSE_UNICODE_MSLU
+                        if ( nmhdr->code == LVN_GETDISPINFOA )
+                        {
+                            if ( !::WideCharToMultiByte
+                                    (
+                                        CP_ACP,
+                                        0,          // no flags
+                                        text,
+                                        text.length() + 1,
+                                        (char *)lvi.pszText,
+                                        lvi.cchTextMax,
+                                        NULL,       // default character
+                                        NULL        // [out] def char used flag
+                                    ) )
+                            {
+                                wxLogLastError(_T("WideCharToMultiByte()"));
+                            }
+                        }
+                        else 
+#endif // wxUSE_UNICODE_MSLU
+                        {
+                            wxStrncpy(lvi.pszText, text, lvi.cchTextMax);
+                        }
                     }
 
                     // see comment at the end of wxListCtrl::GetColumn()