0

私は 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);

次のようになります。

窓

上部にバーが表示されます。これは、ドラッグできるようにしたいものです。

4

1 に答える 1

0

私はこれを試していませんが、同様のことがうまくいくはずです:

  1. eg というブール値を宣言し、isDraggingそれを false に設定します。
  2. のハンドラでWM_LBUTTONDOWNisDraggingが false で、マウスがビットマップ バー上にある場合 ( を使用PtInRect)、isDraggingtrue に設定し、 を呼び出してカーソルをビットマップの四角形に制限しますClipCursor。ウィンドウの左上隅に対するカーソルの位置を保存します。
  3. のハンドラーでWM_MOUSEMOVE、 が true の場合、ウィンドウを移動 (またはをisDragging呼び出し) して、カーソルに対する位置を復元します。MoveWindowSetWindowPos
  4. のハンドラで、が true のWM_LBUTTONUP場合は false に設定し、適切に呼び出してカーソルを解放します。isDraggingClipCursor

(常にクライアント座標とスクリーン座標の違いを考慮してください。)

于 2012-11-19T22:26:41.433 に答える