看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, Gcc, Linux, ...) Visual C++ 2008 Express on Windows XP (使用 C 語言) 額外使用到的庫(Library Used) (Ex: OpenGL, ...) Platform SDK only 問題(Question): 最近在寫圖片瀏覽器的時候需要用到 ListView 控制項來顯示縮圖,希望可以呈現出 和 Vista 、 Win7 的 Windows Explorer 相似的外觀,也就是 cursor 移動到檔案 四周的一定範圍內的時候檔案周圍出現半透明的框框。通過攔截 LVN_HOTTRACK 訊息 我可以得到 cursor 在哪個 item 上,但是它的感應區域卻跟 ListView_GetItemRect() 所得到的不一樣,不知道有沒有辦法設定 item 的滑鼠感應區域大小。另外,我還需要 讓每個 item 的 label 只有一列並固定寬度,這樣顯示出來才會整齊。 原本以為直接調用 Windows API 來設計視窗程式可以做到最大自由的客製化,可是 實際上卻依然有很多限制,除了上面所列的兩個問題以外,其實還有很多跟 item 的 排版有關的小問題,沒辦法只靠 custom draw 來解決,希望有相關的資料可以參考。 餵入的資料(Input): 預期的正確結果(Expected Output): 自由設定 ListView item 的 cursor 感應區、paint area 、自由調整 label 大小、 調整 item 跟 client 區域邊界的空白大小。 錯誤結果(Wrong Output): 程式碼(Code): (請善用置底文標色功能) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.70.126.106
purpose:我也很嫩,提供點看法,如果是MFC包裝的CListView,透過OO 12/15 01:08
purpose:去override訊息迴圈,先自己處理WM_MOUSEMOVE從游標位置 12/15 01:09
purpose:自己算感應方面的東西,再把控制權還給原本的訊息處理機制 12/15 01:09
purpose:CodeProject有很多自訂control文章,但多是MFC就是 12/15 01:10
purpose:我錯了..是用 RegisterClass() 來讓 DispatchMessage() 把 12/15 01:46
purpose:WM_MOUSEMOVE訊息送給自訂的 WndProc 才對,不用 override 12/15 01:47
uziel:可是自訂的 WndProc 跟 ListView 有什麼關係呢? 12/15 10:30
uziel:把 message 導向自訂的 WndProc 應該不能影響其他控制項 12/15 10:32
uziel:的行為吧? 12/15 10:33