簡體   English   中英

C ++-在Windows XP上繪制的ListView自定義

[英]C++ - ListView Custom Drawn on Windows XP

我有ListView哪些項目是使用我的代碼完全繪制的。 當然,我主要使用NMLVCUSTOMDRAW提供的數據。 有兩個rects p-> nmcd.rc和p-> rcText,第一個帶有有效信息,另一個始終為0。這個問題是nmcd.rc在Windows XP上不包含有效rect,我得到0,1, 0,2之類的。

因為那不起作用,所以我嘗試使用ListView_GetItemIndexRect,它在Win XP上失敗,而在Win 7/10上起作用。

查看ListView_GetItemIndexRect的msdn頁面,我可以看到它顯然僅在Vista +上有效。 同時,在Windows XP上,其他列出為Vista +的ListView函數也可以正常工作。

Windows XP在我的程序用戶中很少見,但我仍然希望它能完美運行。 我自己繪制完整的列表視圖肯定可以解決該問題,但這是一個死胡同。

在此頁面上查看第一條評論:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb774778%28v=vs.85%29.aspx

在Windows XP(可能是所有Vista之前的系統嗎?)上處理子項塗裝前消息,處理程序在NMLVCUSTOMDRAW :: nmcd.rc中接收到錯誤的頂部和底部值,有時它們為零,有時由於先前的處理程序調用而未更新(因此基本上這個想法是讓comctl32調用者不初始化它們)。 為了獲得正確的子項位置,處理程序必須使用單獨的消息/調用顯式獲取矩形:

RECT Position; ListView.GetSubItemRect((INT) pHeader->nmcd.dwItemSpec, pHeader->iSubItem, LVIR_BOUNDS, &Position);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM