2013-07-06 76 views
2

全部。


這是我在stackoverflow上的第一個問題,所以我希望我這樣做是正確的。無論如何,我的問題:
我已經創建了一個使用這些樣式的無邊界窗口:WS_VISIBLE | WS_POPUP | WS_OVERLAPPED
問題是窗口無法移動。我知道我可以做點什麼,比如點擊鼠標位置,然後計算窗口最終會在哪裏出現WM_MOUSEMOVE。但是這個解決方案並不穩定,因爲當我將鼠標移動得太快時,它就會離開窗口,然後它就不會反應。我不想設置鉤子,因爲它們太慢了。我搜查了互聯網,但沒有出現。

我最想做的是創建一個窗口,該窗口可以無邊框或標題移動,我不需要自己跟蹤鼠標,但是Windows爲我做了這些操作,比如使整個窗口標題。

WINAPI/C++:移動無邊框窗口

+0

爲什麼形式需要來響應你故意移動它快? –

+0

@AustinBrunkhorst因爲這就是人們期望窗戶行爲的方式。如果您開始拖動窗口,則窗口應該結束拖動結束的位置,而不是鼠標光標發生超出窗口的某個位置。 – jamesdlin

+0

可能的重複[如何實現使用其客戶區拖動窗口?](http://stackoverflow.com/questions/7773771/how-do-i-implement-dragging-a-window-using-its-client -area) –

回答

5

我知道我可以做這樣的事情讓鼠標點擊的位置,然後計算了窗口竟又每次總會有這種WM_MOUSEMOVE。但是這個解決方案並不穩定,因爲當我將鼠標移動得太快時,它就會離開窗口,然後它就不會反應。

當您收到鼠標單擊時,您可以通過調用SetCapture來解決該問題。即使鼠標光標離開窗口,您仍然會繼續收到WM_MOUSEMOVE。當用戶完成拖動並釋放鼠標光標時,您應該致電ReleaseCapture

我最想做的是創建一個窗口,該窗口可以無邊框或標題移動,我不需要自己跟蹤鼠標,但是Windows爲我做的那樣,就像使整個窗口成爲標題。

如果您確實想這樣做,您可以回覆WM_NCHITTEST消息並返回HTCAPTION

+0

如果整個窗口應該可拖動,第二個選項是贏家。這是解決拖動無邊框窗口問題的標準方法,您可以在整個網絡上找到建議/解決方案。確保你也處理'WM_SETCURSOR'來爲你的窗口的可拖動性提供正確的視覺暗示。 –

+0

謝謝你,第二個解決方案是完美的 - 正是我期待的。 – Lillesort131

+0

哦,我想給你+1,但我沒有足夠的聲譽,因爲這是我的第一個問題。:( – Lillesort131

-2

嘗試WM_LBUTTONDOWN

PostMessage的(HWND,WM_SYSCOMMAND,SC_SIZE + 9,0)
+1

什麼是SC_SIZE + 9應該是你的意思是'SC_MOVE'? – jamesdlin

+0

SC_SIZE + 9 = SC_DRAG,沒有記錄,只是嘗試它:-) – kero

+0

-1用於推薦違反程序員合同的未記錄功能,*特別是當有更好的,有文件記錄的方法來解決問題 –