2

gtkmm を使用してアプリケーションを作成しようとしていますが、フォーカスがあるときにマウス カーソルを非表示にしたいと考えています。私が試した最初のステップは、カーソルがウィンドウの上にあるときにマウスカーソルを非表示にすることです。これは成功しています。ただし、マウスがウィンドウの外に移動したときにマウスが表示されないようにするために、マウスカーソルを描画領域の中心に常にワープさせてマウスの動きを制限します。

これを行うには、ウィンドウの位置とウィンドウのサイズを知る必要があります。これらは、Gdk::Window::get_position と Gdk::Window::get_size を使用して簡単に取得できます。ただし、ウィンドウが移動された場合、get_position は更新された位置を返さないため、カーソルが間違った位置でフリーズします!

では、ここで必要な効果を達成するための代替手段は何ですか?

4

1 に答える 1

0

ポインタをつかむだけです。

//pass all events to window apart LEAVE_NOTIFY_MASK 
MainWindow->set_events(GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK | GDK_TOUCH_MASK | GDK_SMOOTH_SCROLL_MASK | GDK_TOUCHPAD_GESTURE_MASK);
MainWindow->set_modal(true);
auto display = MainWindow->get_display();
auto window = MainWindow->get_window();
auto grabSuccess = display->get_default_seat()->grab(window, Gdk::SEAT_CAPABILITY_ALL, true);
if(grabSuccess != Gdk::GRAB_SUCCESS)
{
    std::clog<<"grab failed: "<<grabSuccess<<std::endl;
}
于 2016-10-05T12:17:01.313 に答える