2016-03-16 84 views
-1

我有兩個函數draw1()和draw2(),它將位圖繪製爲DC。我需要一個接一個地給他們打電話。所以我做的,同時在MFC C++程序中的OnPaint()和MouseMove事件

void CDlg::OnPaint() 
{ 
for(int i=0;i<10;i++) 
    { 
    draw1(); 
    draw2(); 
    } 
} 

我還想添加clickmouse事件,即,當我點擊鼠標左鍵,光標就會消失。所以我做的,

void CDlg::OnLButtonUp(UINT nFlags, CPoint point) { 
    ShowCursor(FALSE); 
} 

但沒有發生單擊鼠標事件,除非「for循環」中的OnPaint()沒有完成。

我希望for循環繼續,同時單擊鼠標應該發生而不中斷for循環。

如何進行更改或添加以獲得結果?

編輯:爲什麼要for循環? draw1()& draw2(),我正在分別讀取兩個YUV文件的第一幀,轉換爲位圖,然後將其繪製到DC。 1秒後我在兩個位圖之間切換。例如,像一個屏幕保護程序。因此,for循環。

+1

爲什麼會出現'for'循環? – cha

+0

你需要多任務 –

+1

你需要把你的循環放入一個線程中。但我不確定你爲什麼不止一次畫畫。 –

回答

0

你還沒有初始化變量。

for(int i=;i<10;i++) 

初始化變量

for(int i=0;i<10;i++)// initialize with any value 
+0

這是一個錯字。 – mrudulaw

-1

多任務。

我開始在OnPaint()方法線程 - )AfxBeginThread(Process, this, THREAD_PRIORITY_NORMAL, 0, 0, NULL);

在步驟( - 所謂的for循環的功能。

現在工作。

謝謝。

+0

多線程和GUI編程是正交的。雖然可以在線程中正確地序列化呈現,但您沒有做任何事情。這不是一個答案。 – IInspectable

+0

這絕對解決了我的問題。 – mrudulaw

+0

你甚至沒有掌握創建的havok的數量。祝你好運,當事情開始打破最不可剝奪的方式。這不是你的問題的答案。另一方面,使用計時器的單線程應用程序是一種解決方案。它要求您瞭解Windows應用程序的基於事件的特性。 – IInspectable