]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/listctrl.cpp
include wx/crt.h needed for wxFprintf() (closes #9509)
[wxWidgets.git] / src / msw / listctrl.cpp
index a32c13669629cdab8e934e580dbff383f8b0ad93..ab90123b9a2c26286216f9e5772a2858519936f2 100644 (file)
@@ -353,7 +353,11 @@ void wxListCtrl::MSWSetExListStyles()
         ::SendMessage
         (
             GetHwnd(), LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
+            // LVS_EX_LABELTIP shouldn't be used under Windows CE where it's
+            // not defined in the SDK headers
+#ifdef LVS_EX_LABELTIP
             LVS_EX_LABELTIP |
+#endif
             LVS_EX_FULLROWSELECT |
             LVS_EX_SUBITEMIMAGES |
             // normally this should be governed by a style as it's probably not
@@ -537,7 +541,7 @@ void wxListCtrl::SetWindowStyleFlag(long flag)
 {
     if ( flag != m_windowStyle )
     {
-        m_windowStyle = flag;
+        wxControl::SetWindowStyleFlag(flag);
 
         UpdateStyle();
 
@@ -1863,15 +1867,12 @@ bool wxListCtrl::MSWCommand(WXUINT cmd, WXWORD id_)
 // utility used by wxListCtrl::MSWOnNotify and by wxDataViewHeaderWindowMSW::MSWOnNotify
 int WXDLLIMPEXP_CORE wxMSWGetColumnClicked(NMHDR *nmhdr, POINT *ptClick)
 {
-    wxASSERT(nmhdr && ptClick);
-
-    // find the column clicked: we have to search for it
-    // ourselves as the notification message doesn't provide
-    // this info
+    // find the column clicked: we have to search for it ourselves as the
+    // notification message doesn't provide this info
 
     // where did the click occur?
 #if defined(__WXWINCE__) && !defined(__HANDHELDPC__) && _WIN32_WCE < 400
-    if (nmhdr->code == GN_CONTEXTMENU)
+    if ( nmhdr->code == GN_CONTEXTMENU )
     {
         *ptClick = ((NMRGINFO*)nmhdr)->ptAction;
     }
@@ -1882,19 +1883,27 @@ int WXDLLIMPEXP_CORE wxMSWGetColumnClicked(NMHDR *nmhdr, POINT *ptClick)
         wxLogLastError(_T("GetCursorPos"));
     }
 
-    if ( !::ScreenToClient(nmhdr->hwndFrom, ptClick) )
+    // we need to use listctrl coordinates for the event point so this is what
+    // we return in ptClick, but for comparison with Header_GetItemRect()
+    // result below we need to use header window coordinates
+    POINT ptClickHeader = *ptClick;
+    if ( !::ScreenToClient(nmhdr->hwndFrom, &ptClickHeader) )
     {
-        wxLogLastError(_T("ScreenToClient(header)"));
+        wxLogLastError(_T("ScreenToClient(listctrl header)"));
     }
 
-    int colCount = Header_GetItemCount(nmhdr->hwndFrom);
+    if ( !::ScreenToClient(::GetParent(nmhdr->hwndFrom), ptClick) )
+    {
+        wxLogLastError(_T("ScreenToClient(listctrl)"));
+    }
 
-    RECT rect;
+    const int colCount = Header_GetItemCount(nmhdr->hwndFrom);
     for ( int col = 0; col < colCount; col++ )
     {
+        RECT rect;
         if ( Header_GetItemRect(nmhdr->hwndFrom, col, &rect) )
         {
-            if ( ::PtInRect(&rect, *ptClick) )
+            if ( ::PtInRect(&rect, ptClickHeader) )
             {
                 return col;
             }
@@ -2792,7 +2801,7 @@ void wxListCtrl::OnPaint(wxPaintEvent& event)
     // Reset the device origin since it may have been set
     dc.SetDeviceOrigin(0, 0);
 
-    wxPen pen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT), 1, wxSOLID);
+    wxPen pen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT));
     dc.SetPen(pen);
     dc.SetBrush(* wxTRANSPARENT_BRUSH);