[問題] 有沒有專門講 Windows common controls 客製化的資料?

看板C_and_CPP (C/C++)作者 (= ̄ω ̄=)時間15年前 (2010/12/15 00:47), 編輯推噓2(207)
留言9則, 2人參與, 最新討論串1/1
開發平台(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

12/15 01:08, , 1F
我也很嫩,提供點看法,如果是MFC包裝的CListView,透過OO
12/15 01:08, 1F

12/15 01:09, , 2F
去override訊息迴圈,先自己處理WM_MOUSEMOVE從游標位置
12/15 01:09, 2F

12/15 01:09, , 3F
自己算感應方面的東西,再把控制權還給原本的訊息處理機制
12/15 01:09, 3F

12/15 01:10, , 4F
CodeProject有很多自訂control文章,但多是MFC就是
12/15 01:10, 4F

12/15 01:46, , 5F
我錯了..是用 RegisterClass() 來讓 DispatchMessage() 把
12/15 01:46, 5F

12/15 01:47, , 6F
WM_MOUSEMOVE訊息送給自訂的 WndProc 才對,不用 override
12/15 01:47, 6F

12/15 10:30, , 7F
可是自訂的 WndProc 跟 ListView 有什麼關係呢?
12/15 10:30, 7F

12/15 10:32, , 8F
把 message 導向自訂的 WndProc 應該不能影響其他控制項
12/15 10:32, 8F

12/15 10:33, , 9F
的行為吧?
12/15 10:33, 9F
文章代碼(AID): #1D1v-kG1 (C_and_CPP)
文章代碼(AID): #1D1v-kG1 (C_and_CPP)