2012-11-19 52 views
0

我正在開發一個自定義窗口邊界的C++,嗯,我想這就是它。我不知道我是否以正確的方式來做這件事,但是我會很感激知道如何通過位圖製作一個可拖動的窗口。C++窗口可以通過位圖拖動

有一個位圖條我在Photoshop中製作並添加到客戶區,我希望能夠通過位圖將其拖動。目前,你可以在任何地方的客戶區使用此代碼拖動:

case WM_NCHITTEST: { 
    LRESULT hit = DefWindowProc(hWnd, message, wParam, lParam); 
    if(hit == HTCLIENT) hit = HTCAPTION; 
    return hit; 
    } 
    break; 

我在油漆部分使用此代碼提請位圖:

DrawBitmap(hdc,"header-bar-1.bmp", 2, 4); 

,它看起來像這樣:

window

你可以看到頂部的酒吧,這是我想能夠拖動它。

+2

你得到這個消息的鼠標位置,lParam參數。只要檢查它是否匹配位圖位置。 –

回答

0

我沒有試過,但是類似的事情應該工作:

  1. 聲明例如稱爲布爾值isDragging並將其設置爲false。
  2. WM_LBUTTONDOWN處理程序中,如果isDragging爲假並且鼠標位於所述位圖巴(使用PtInRect),設置isDragging爲真,並通過調用ClipCursor限制光標移動到所述位圖的矩形。保存光標相對於窗口左上角的位置。
  3. WM_MOUSEMOVE的處理程序中,如果isDragging爲真,請移動該窗口(調用MoveWindowSetWindowPos)以恢復其相對於光標的位置。
  4. WM_LBUTTONUP的處理程序中,如果isDragging爲true,則將其設置爲false,並通過適當地調用ClipCursor釋放遊標。

(客戶端之間的座標和屏幕座標考慮始終走差異。)