空の赤い矩形があり、マウスが矩形の上半分の枠を移動するたびにカーソルが閉じた簡単なアプリケーションを作成しようとしています。NSViewでマウス移動イベントが検出されない
私は、透明なNSWindow
を作り、矩形でそれにNSView
を埋め込みました。マウスで移動したイベントを受け入れるためのウィンドウを作成しました(方法:-setAcceptsMouseMovedEvents
)。私は-canBecomeKeyWindow
と-canBecomeMainWindow
のウィンドウをオーバーライドしてYESを返しました。しかし、何とか-mouseMoved
イベントのどれもがNSView
によって受信されていません。
ココアアプリケーションプロジェクトを作成し、-applicationDidFinishLaunching
メソッドでウィンドウを作成すると、私のビューは-mouseMoved
イベントを受け取ることができました。
私はfoundationコマンドラインユーティリティプロジェクトを使用するとマウス移動イベントを受信しないのはなぜですか?
私は、Foundation cmdラインユーティリティプロジェクトを使ってウィンドウ(カーボンまたはココア)を作成するたびに、タイトルバーをクリックしてもウィンドウがキーにならないことも観察しました。タイトルバーの色をクリックすると、暗い灰色になる。なぜこうなった?
私は-canBecomeKeyWindow
と-canBecomeMainWindow
をNSwindow
に置き換えてYESを返しました。
ジョシュアの私のビューは、mouseDownやmouseDraggedのような他のイベントを受け取ることができます。唯一の問題は、mousesMovedイベントを受信することです。 実際には、アプリケーションをCarbonからCocoaに移行する作業を進めています。インタフェースビルダーとnibファイルは、元のCarbonコードでは使用されていないため使用できません。 透明なキャプチャウィンドウを作成しようとしたときに、この問題が発生しました。マウスポインタを四角形の境界線の上に移動させると、マウスポインタがclosedHandカーソルに変わり、ユーザがウィンドウを移動できることが示されます。 –
あなたは、「タイトルバーの色をクリックすると、暗い灰色に変わるのではなく、明るい灰色のままです。問題は残っています。つまり、ウィンドウサーバーと正しくインターフェイスしていません。コマンドラインツールは、これを行うためのものではありません。私はあなたが新しい、通常のCocoaアプリケーションを作成し、適切なCocoaデザインパターンを使用してアプリケーションを再構築するほうがはるかに優れていることをさらに助言したいと思います。あなたは、既存のコードをコマンドラインプログラムのスリルで叩くことによって、Carbonアプリケーションのまっすぐな「ポート」をしようとする苦痛の世界*を求めています。これは悪いアドバイスより悪いです。 –