關於 ListView GridLines (格線) 顯示的問題 |
尚未結案
|
Jack222
一般會員 發表:9 回覆:8 積分:3 註冊:2004-11-30 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Jack222 您好: 我個人認為您描述的狀況應該是該元件的 Bug,我的解決之道是攔截 ListView 調整欄位寬度的 Message,然後作 Refresh() 動作,迫使 ListView 重繪,我至今也未能確定這種作法是否為 "標準" 的解決之道,但是前述作法確實可以解決那個現象就是了。 當初為了瞭解 ListView 調整欄位寬度的觸發訊息,著實花了不少的時間在網上搜尋,結果可供參考的資訊實在不多,既然我描述的方式可以解決我的問題,或許您也可以試試看,您試著攔截 WM_NOTIFY 的 HDN_BEGINTRACKW, HDN_ENDTRACKW, HDN_ITEMCHANGINGW 訊息,然後送出 Refresh(),看看在您的環境裡是否可行?
|
Jack222
一般會員 發表:9 回覆:8 積分:3 註冊:2004-11-30 發送簡訊給我 |
謝謝您的回覆, 不過小弟我程度尚淺, 可否給我有關 WM_NOTIFY 應如何使用的 Sample Code, 如: public:
void __fastcall WMNotify(TWMNotify & Msg); protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_NOTIFY, TWMNotify, WMNotify)
END_MESSAGE_MAP(TForm) // ------------------------------------------------------------------
void __fastcall TForm1::WMNotify(TWMNotify & Msg)
{
// 是在這裡面攔截嗎? 如何寫呢? 我設了 Break Point, 但好像沒進來
}
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Jack222 您好: 以下是我的範例,您參考一下: .h 檔案宣告:
private: Controls::TWndMethod OldListViewWP; void __fastcall NewListViewWP(TMessage &Msg);------------------------------------------------- .cpp 檔案設定: void __fastcall TForm1::FormCreate(TObject *Sender) { OldListViewWP = ListView1->WindowProc; ListView1->WindowProc = NewListViewWP; } void __fastcall TForm1::NewListViewWP(TMessage &Msg) { if(Msg.Msg == WM_NOTIFY){ LPNMHDR lpnmhdr=(LPNMHDR)Msg.LParam; if(lpnmhdr->code == HDN_ENDTRACKW){ ListView1->Refresh(); }else if(lpnmhdr->code == HDN_BEGINTRACKW){ ListView1->Refresh(); }else if(lpnmhdr->code == HDN_ITEMCHANGINGW){ ListView1->Refresh(); } } if (Msg.Msg == WM_DESTROY) ListView1->WindowProc = OldListViewWP; OldListViewWP(Msg); } |
Jack222
一般會員 發表:9 回覆:8 積分:3 註冊:2004-11-30 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Jack222 您好: 不好意思,我寫該程式時因為偷懶而沿用以前的宣告設定,因為沒產生過錯誤,所以未做其它考量就直接將有關的宣告與設定貼上來,其實我這裡現在也無需加上 Controls:: 即可通過編譯,好在您自己試出來了,恭喜您解決問題。 雖然您說僅需要處理 HDN_BEGINTRACKW 消息即可,不過依據我的經驗,可能在某些動作之後,仍會有不顯示格線的狀況,因此把 HDN_ITEMCHANGINGW 也納入攔截對象處理一下可能會比較好些,但是呢~也有可能我們的 BCB 版本不同 (我使用 BCB4),執行結果也有些差異吧,您參考一下好了。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |