MFC基于對話框的應用程式,在主對話框宣告用SetTimer一個定時器,在定時器回應函式中繪圖。在主對話框上添加一個按鈕,點擊按鈕,彈出一個非模態對話框,非模態對話上有下拉串列控制元件。
以上為程式基本功能,程式編譯通過,開始運行,一切OK.。點擊按鈕,彈出非模態對話框。此時也一切OK,拖動非模態對話框或者點擊下拉串列控制元件,主對話框里定時器中繪圖作業就停止了,時間一長,程式直接卡死了都。
為解決這個問題,我把定時器去掉,在主程式中開一個執行緒來進行繪圖,成功解決這個問題。
但是,實際應用中必須用定時器(SetTimer)來進行繪圖,所以只能在非模態對話框上想辦法了,實在是沒招了,跪求論壇大牛指導。
uj5u.com熱心網友回復:
我之前也遇到這樣的問題。后面找到解決方法:在要需要調出對話框時先把定時器關掉 KillTimer,然后在子對話框的初始化函式里面,再獲取主對話框的指標,并將那個定時器開啟。
uj5u.com熱心網友回復:
定時器訊息優先度最低 !uj5u.com熱心網友回復:
繪圖操作應該全部寫在OnPaint函式里定時器只是修改引數呼叫Invalid來激活重繪
uj5u.com熱心網友回復:
不行啊 我在點擊按鈕的代碼中首先KillTimer(1) 然后再寫調出非模態對話框的代碼 然后在模態對話框的初始化函式OnInitDialog中重新啟動定時器 ::SetTimer(m_pDlg-〉m_hWnd,1,30,NULL) 自然不行啊 你看我這有哪里不對嗎?uj5u.com熱心網友回復:
試試使用多媒體定時器 timeSetEvent() 函式
uj5u.com熱心網友回復:
試過的 目前狀況是只必須用SetTimer 只能在非模態對話框這邊想辦法uj5u.com熱心網友回復:
1 其實,你的執行緒都實作了,執行緒時可以替換定時器的。2 試試 CreateWaitableTimer

uj5u.com熱心網友回復:
真理,不放在OnPaint里的繪圖都是瞎球畫。。。
uj5u.com熱心網友回復:
放OnPaint里試了 依然不行uj5u.com熱心網友回復:
你怎么試的?uj5u.com熱心網友回復:
繪圖代碼放在OnPaint里 定時器中呼叫重繪uj5u.com熱心網友回復:
聯系我,看看怎么解決。
主對話框的定時器,跟非模態對話框有什么關系!!!!
uj5u.com熱心網友回復:
你是視窗本覆寫了吧,被覆寫了的視窗在沒有修改前是沒有重繪操作的,為了節省資源uj5u.com熱心網友回復:
30 ms 定時器 太 短了, 改 3 秒 試試轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/73821.html
標籤:界面
上一篇:有沒有做過樣條曲線求交點的
