私はOS Xウィンドウをウィンドウのコンテンツ部分内の領域を使用してドラッグすることにより、つまりタイトルバーのドラッグ&ドロップ機能を複製して別の領域に移動するサポートを実装しました。OS Xの「Carbon」ウィンドウを移動するときに、マウスを_キャプチャするために使用できるAPIはどれですか?
私がまだ解決していない問題は、ユーザーがマウスをすばやくドラッグすると、ウィンドウ領域を離れてマウス移動イベントが受信されなくなることです。
このタイプの問題は、Win32メソッドのSetCapture()を呼び出すことによって簡単に修正できます。対応するOSXメソッドは何ですか?
このアプリケーションは、OS Xの特定の部品にCarbonを使用するクロスプラットフォームのC++アプリケーションです。 (そして、はい、私はCocoaのメリットについてすべて知っていますが、これは古いコードベースであり、現時点ではCocoaポートの時間もコストもありません)。 )私はこのアプリケーションのためにそれらを使用する方法を実際に見ることができません。リスト2-7では、http://developer.apple.com/legacy/mac/library/documentation/Carbon/Conceptual/Carbon_Event_Manager/Tasks/CarbonEventsTasks.html マウスがキャプチャされますが、TrackMouseLocation()ブロックは入力を待っているという問題があります。ブロッキングは、1秒間に何度も呼び出さなければならないフラッシュプレーヤーをホストしているため、このアプリケーションでは実行できないものです。
は基本的にこれを理解しようとしたとき、私が組み立てているprotototypeは次のようになります。
switch(GetEventKind(inEvent))
{
case kEventMouseDown:
// A silly test to make parts of the window border "draggable"
dragging = local_loc.v < 25 || local_loc.h < 25;
last_screen_loc = screen_loc;
break;
case kEventMouseUp:
dragging = false;
break;
case kEventMouseMoved:
break;
case kEventMouseDragged:
if (dragging) {
Rect rect;
GetWindowBounds (windowRef, kWindowContentRgn, &rect);
int dx = screen_loc.h - last_screen_loc.h;
int dy = screen_loc.v - last_screen_loc.v;
rect.left += dx;
rect.right += dx;
rect.top += dy;
rect.bottom += dy;
SetWindowBounds (windowRef, kWindowContentRgn, &rect);
}
last_screen_loc = screen_loc;
break;
任意のアイデアを高く評価しますか?
MacFindWindow()の問題は、カーソルが一度ウィンドウの外に出たときにウィンドウrefをヌルに戻し、問題自体が消えたイベント自体からwindow-refを抽出することで解消されました。 –