カーソルの形を変える
概要
カーソルの形を変更するにはGdk::Window::set_cursor()でカーソル( Gdk::Cursor )を指定する。
カーソルのタイプは enum Gdk::CursorType で定義されている。
ソース
setcursor.cpp
#include <gtkmm.h>
class MainWin : public Gtk::Window
{
Gtk::Button m_button1, m_button2, m_button3;;
Gtk::Label m_label;
Gtk::HBox m_hbox;
Gtk::VBox m_vbox;
public:
MainWin();
private:
void on_bt1_clicked();
void on_bt2_clicked();
void on_bt3_clicked();
};
MainWin::MainWin() :
m_label( "カーソル変更テスト" ),
m_button1( "カーソル1" ),
m_button2( "カーソル2" ),
m_button3( "元に戻す" )
{
m_hbox.pack_start( m_button1, Gtk::PACK_SHRINK );
m_hbox.pack_start( m_button2, Gtk::PACK_SHRINK );
m_hbox.pack_start( m_button3, Gtk::PACK_SHRINK );
m_vbox.pack_start( m_label );
m_vbox.pack_start( m_hbox, Gtk::PACK_SHRINK );
m_button1.signal_clicked().connect( sigc::mem_fun( *this, &MainWin::on_bt1_clicked ) );
m_button2.signal_clicked().connect( sigc::mem_fun( *this, &MainWin::on_bt2_clicked ) );
m_button3.signal_clicked().connect( sigc::mem_fun( *this, &MainWin::on_bt3_clicked ) );
add( m_vbox );
show_all_children();
resize( 200, 200 );
}
void MainWin::on_bt1_clicked()
{
get_window()->set_cursor( Gdk::Cursor( Gdk::HAND1 ) );
}
void MainWin::on_bt2_clicked()
{
get_window()->set_cursor( Gdk::Cursor( Gdk::WATCH ) );
}
void MainWin::on_bt3_clicked()
{
// 元に戻すときは引数無しでset_cursor()を呼ぶ
get_window()->set_cursor();
}
int main( int argc, char *argv[] )
{
Gtk::Main kit( argc, argv );
MainWin mainwin;
Gtk::Main::run( mainwin );
return 0;
}
コンパイル
必要なコンパイルオプションは pkg-config を使って取得する。
g++ setcursor.cpp -o setcursor `pkg-config gtkmm-2.4 --cflags --libs`
結果
ボタンを押すとカーソルの形が変わる。