1. 程式人生 > >Windows 觸控式螢幕的 LBUTTONDOWN不單獨響應,必須先有MOUSEMOVE訊息,才會有LBUTTONDOWN

Windows 觸控式螢幕的 LBUTTONDOWN不單獨響應,必須先有MOUSEMOVE訊息,才會有LBUTTONDOWN

自己的程式是一個影象處理軟體,裡面要實現影象的拖動功能,程式在滑鼠操作的情況下,完全正常。當滑鼠點選在一張圖片上,然後移動,則選中的影象會跟隨滑鼠移動。但是用手指在觸控式螢幕上操作的時候,圖片無法移動。仔細觀察現象後,發現是因為手指單擊這訊息沒有響應,所以後續移動操作自然無法成功。面對這個現象,非常不解,為何滑鼠的LBUTTONDOWN訊息可以響應,而手指操作時,LBUTTONDOWN就無法響應呢,一開始以為是觸控式螢幕驅動的問題,詢問廠家後,得到的答覆是,windows下操作正常就說明觸控式螢幕本身沒有問題,如果非要解決,那就需要提交一個報告,然後廠家要調研,公關。。。

時間等不起,只能自己想辦法琢磨了,後來經過仔細除錯以後發現,windows下資料夾在手指觸控的時候可以正常拖動,但是手指單擊的時候,也是沒有響應的,就是說,windows下手指單擊這個操作,沒有任何的訊息響。那為何資料夾可以移動呢?在Debug下斷點除錯後發現,原來,在手指單擊螢幕的時候,確實沒有訊息響應,但當手指單擊並移動的時候,便產生訊息響應,順序是MOUSEMOVE->LBUTTONDOWN->MOUSEMOVE,原來只有手指單擊並移動,才會產生LBUTTONDOWN的訊息。可是,即使是這樣,我的程式在手指觸控的操作下應該也能正常工作呀,必行LBUTTONDOWN 和MOUSEMOVE的訊息確實已經都響應了,為何圖片不能被手指拖動呢,仔細除錯後發現,程式中MOUSEMVOE->LBUTTONDOWN->MOUSEMOVE中的那個LBUTTONDOWN訊息後面的一個重新整理螢幕的指令“Invalidate()”沒有起到作用,因為Invalidate()只是將WM_PAINT訊息放入訊息佇列,便立即返回,而實際中這個WM_PAINT居然沒有被響應,於是換成SendMessage(WM_PAINT),則程式一切正常,滑鼠和手指觸控操作均沒有問題。

至於為何WM_PAINT訊息沒有被響應,還沒有想明白。。。