發表於:2007-07-20 11:45:38
使用環境和現象都跟http://topic.csdn.net/t/20010509/15/115868.html描述的一樣。那裏只是說“有時”會出現這種情況,我這裏試驗的結果是:如果List Control沒有獲得焦點,一切正常。只要獲得了焦點,無論有沒有記錄被選中,當用其它窗口覆蓋後,或者最小化再恢復,都不會顯示了。
我試過很多辦法,發現響應List Control的NM_SETFOCUS通知消息,在裏面調用該Control的Invalidate(),可以將它顯示出來。
ON_NOTIFY(NM_SETFOCUS, IDC_LIST_DEV_SERV, OnSetfocusListDevServ)
void DevServiceDlg::OnSetfocusListDevServ(NMHDR* pNMHDR, LRESULT* pResult)
{
m_devSvc.Invalidate();
*pResult = 0;
}
但這樣的結果是邊框沒有了,就跟沒選WS_BORDER風格一樣,看起來很不舒服。我Spy++了一下,感覺應該是沒有收到WM_NCPAINT,沒有重繪非客戶區域所致。
於是我找了一下哪些操作會發WM_NCPAINT,試了一下RedrawWindow()和ShowWindow(SW_SHOWNOACTIVATE),發現非但沒有解決問題,反而回到最初的情況,整個List Control都不顯示了。
但如果切換Tab再換回來,是可以顯示的。這裏的流程是:
ShowWindow(SW_SHOW);
UpdateWindow();
Invalidate();
我如法炮製,沒有效果,因爲窗口原來就是Visible的,ShowWindow()似乎不起作用。而我如果在前面加上ShowWindow(SW_HIDE),焦點又失去了。
對窗口和消息還是不熟悉,現在都在Program by Coincidence了,希望大牛們給予一定的提示。
- Big_Stone
- 等 級:
#1樓 得分:0回覆於:2007-07-20 12:19:06
沒有看清楚問題,你整理下再提問吧
精華推薦:來討論UTF-8編碼問題,來者都送分
- merlinran
- (天行者)
- 等 級:
#2樓 得分:0回覆於:2007-07-20 12:51:33
那我把http://topic.csdn.net/t/20010509/15/115868.html裏的描述整理一點過來吧:
我的窗口裏有個CTabCtrl,通過這個控制顯示幾個CListCtrl,有時窗口切換時類表框沒有顯示,但單擊時顯示選中的一條.不知有沒有辦法解決?
當窗口切換---從另一個程序窗口切換到這個程序的窗口或本程序的模式對話框關閉,本窗口成爲活動窗口時,列表框 "有時 "不顯示.
然後就可以接上我的解釋了。
精華推薦:關於FFT變換程序
- WindAndSnow
- ( 清風和白雲遊戲)
- 等 級:
#3樓 得分:0回覆於:2007-07-20 18:22:31
我的窗口裏有個CTabCtrl,通過這個控制顯示幾個CListCtrl,有時窗口切換時類表框沒有顯示,但單擊時顯示選中的一條.不知有沒有辦法解決?
這個問題應該是背景色和你文本色一致造成的.因爲你點中時它會顯示和文本色不一樣來表示選中和獲得焦點.建議你重新設置背景色和文本色.SetBkColor()和SetTextColor()方法
精華推薦:請問牛人:如何測量某個端口或者某個運行中的進程的網絡流量?
- xfinal2006
- 等 級:
#4樓 得分:0回覆於:2007-07-20 20:46:01
我的方法是在ctabctrl中選中一個clistctrl時,就對它ShowWindow(SW_SHOW),其餘的clistctrl()全部ShowWindow(SW_HIDE),沒有手動去重繪.
精華推薦:iocp的問題,這次100分只給一個人
- merlinran
- (天行者)
- 等 級:
#5樓 得分:0回覆於:2007-07-23 12:43:26
說來我的情況還是不同。我用的是在VCKBase上找到的一個CCoolTabCtrl,類似於CPropertyPage一樣,直接往上AddPage就可以了,但它可以把任何CWnd作爲其Page。我往它的例子程序里加了個CListCtrl,卻沒有這個問題。
精華推薦:將bmp圖像繪製到多個picture上出現問題,爲什麼呢?
- husoso
- (天使的貓也一樣)
- 等 級:
#6樓 得分:0回覆於:2008-05-16 17:02:25
同樣遇到這個問題,父對話框重繪而子對話框的control沒有重繪
- nietsche
- (nietsche)
- 等 級:
#7樓 得分:0回覆於:2009-09-25 14:51:52
遇到一模一樣的情況,不知樓主有解決了嗎?還有,如果把主Dlg的ClipChildren屬性選擇,就不會出現這種情況,可是dlg獲得焦點時,第一頁卻不能顯示了;並且背景也變了,不知不知呀!
- wudi_baozi_tou
- (wudi_baozi_tou)
- 等 級:
#8樓 得分:0回覆於:2010-03-16 12:28:18
兩年了, 看來這問題真是老大難, MS也是雜就不修正一下!
我這兩天寫播放器同樣遇到此問題, 網上搜無果只有自己動手了.
第1個辦法有點笨, 就是在父窗口的onpaint裏計算無效rect和clistctrl的窗口rect是否存在
交集, 如果有則計算交集rect, 然後invalidaterect之.
第2個辦法是經過反覆觀察的結果, 我發現只有當父窗口重新得到焦點時clistctrl才出毛病.
所以在父窗口的wm_activate中強制刷新就好拉, 這個超簡單哦, clistctrl::invalidaterect(NULL);
版本4.7, 把解決辦法發出來別讓其他同學和咱們一樣浪費大把時間了.....