我在做什麼:我目前在我的WPF應用程序中託管了OpenTK glControl(通過WindowsFormsHost
)。該應用程序有很多按鈕,但我們將專注於暫停和播放按鈕。我使用VBO的,這是我如何動畫GL.DrawArrays(PrimitiveType.LineStrip, 0, frameCount);
。它正在繪製從0到framecount
的頂點範圍,所以當我玩遊戲時,它只是開始遞增framecount
,開始動畫。當使用鼠標時,一切都很完美。OpenTK讓觸摸按鈕提升點擊事件與鼠標不同
問題:我的應用程序需要具有觸摸屏也(FWIW,當我說觸摸,WPF是看到它作爲一個手寫筆,不碰)工作。當應用程序不是動畫時,觸摸就像它應該那樣工作,我不處理觸摸事件,所以觸摸按鈕剛剛引發了事件Click
。如果我們不是動畫,我沒有任何問題。因此,當我使用我的鼠標Click
播放按鈕時,用戶界面仍然響應我的鼠標(點擊工作,懸停改變顏色,因爲它應該等),但接觸似乎忽略了一段時間。我必須在它做它應該(如暫停)之前觸摸按鈕3到5次。讓我們回去,現在我們不是動畫,這一次,如果我觸摸播放按鈕來提高事件,它會開始動畫,但現在我的觸摸有相同的問題,不得不多次觸摸以提高事件,最重要的是,用戶界面現在不響應鼠標(WindowsFormsHost仍然對鼠標事件做出正確反應)。點擊按鈕或懸停在按鈕上不會執行任何操作。直到我可以讓動畫再次暫停,UI再次響應鼠標。
什麼我都試過,什麼(我想)我知道:當UI停止響應鼠標輸入和觸摸輸入messsed起來,如果我使用鼠標或觸摸到的任何地方點擊我的應用程序之外,它的工作原理如預期。這導致我相信這不是觸摸屏驅動程序問題或任何其他問題。我還使用Snoop來查看正在發生什麼事件(或不發生),以查看手寫筆和鼠標被捕獲和釋放以及焦點。我找不到一個沒有發佈的實例。如果有人願意,我可以發佈顯示鼠標和觸摸點擊之間差異的Snoop結果。我嘗試在MainWindow上放置一個預覽鼠標,但在觸摸播放後,沒有鼠標單擊會引發此事件,並且在觸摸播放按鈕之後的第一個觸摸隨機觸摸將觸發此事件。我也嘗試隱藏WindowsFormsHost,鼠標和觸摸點擊所有的工作,像他們應該減去glControl。因爲我隱藏了WindowsFormsHost,繪畫事件永遠不會被解僱,導致我相信繪畫功能可能存在問題。我知道這個錯誤WPF Touch Bug,但我真的不認爲這是我的問題。有些事告訴我互操作性是給我的問題,但我不確定。
我的代碼:
private void playFwdFunc()
{
//disable undrawing and enable drawing
undraw = false;
draw = true;
//unpause animation
paused = false;
//enable/disable appropriate buttons
pauseBtn.IsEnabled = true;
stepBackBtn.IsEnabled = false;
stepFwdBtn.IsEnabled = false;
clearStart.IsEnabled = true;
clearCurrent.IsEnabled = true;
//refresh control
glControl1.Invalidate();
}
private void playFwdClick(object sender, RoutedEventArgs e)
{
playFwdFunc();
}
在我glPaint事件:
if (frameCount < vertices.Length && !paused)
{
//draw more vertices
if (draw)
{
if (0 < (int)(vertices.Length/(25000/speedTrack.Value)))
frameCount += (int)(vertices.Length/(25000/speedTrack.Value));
else
frameCount++;
}
//draw less vertices
else if (undraw)
{
if (0 < (int)(vertices.Length/(25000/speedTrack.Value)))
frameCount -= (int)(vertices.Length/(25000/speedTrack.Value));
else
frameCount--;
}
//make sure we dont have a negative framecount (null pointer)
if (frameCount < 0)
{
paused = true;
frameCount = 0;
// manageCodeBox();
}
//make sure we dont exceed # of vertices (null pointer)
else if (frameCount > vertices.Length)
{
frameCount = vertices.Length;
paused = true;
// manageCodeBox();
}
}
我的問題:爲什麼點擊鼠標使UI按鈕的反應不同於觸摸按鈕,即使他們提出了同樣的事件?任何輸入讚賞。