http://bkclass.web.fc2.com
B class impostor of information technology...
 
   
   
 

wxWidgetsのカーソル

注意事項

  • wxWidgets Version 2.8.9においての値です。
  • サンプルの画像はWindowsがXP SP3、LinuxがUbuntu 8.10 GNOMEのDMZです。

定義済みカーソル

以下のカーソルが標準で定義されています。

オブジェクト

名前 説明
wxNullCursor ヌルカーソル
  • オブジェクトの形式はwxCursorです。

ポインタ

名前 Windows Linux 説明
wxSTANDARD_CURSOR 標準
wxHOURGLASS_CURSOR 砂時計
wxCROSS_CURSOR 十字
  • ポインタの形式はwxCursor*です。
  • 使用例:
    SetCursor(*wxSTANDARD_CURSOR);
    

ID

以下のカーソルIDが定義されており、wxCursorのオブジェクト作成時に使用する事ができます。

名前 Windows Linux 説明
wxCURSOR_ARROW 標準の矢
wxCURSOR_RIGHT_ARROW 右向きの標準の矢
wxCURSOR_BLANK ブランク (透明)
wxCURSOR_BULLSEYE 標的
wxCURSOR_CHAR 長方形の文字
wxCURSOR_CROSS 十字
wxCURSOR_HAND
wxCURSOR_IBEAM アイビーム (縦線)
wxCURSOR_LEFT_BUTTON 左ボタン
wxCURSOR_MAGNIFIER 拡大鏡
wxCURSOR_MIDDLE_BUTTON 中ボタン
wxCURSOR_NO_ENTRY 入力禁止
wxCURSOR_PAINT_BRUSH ブラシ
wxCURSOR_PENCIL 鉛筆
wxCURSOR_POINT_LEFT 左向き
wxCURSOR_POINT_RIGHT 右向き
wxCURSOR_QUESTION_ARROW ヘルプ
wxCURSOR_RIGHT_BUTTON 右ボタン
wxCURSOR_SIZENESW 斜めに拡大/縮小 (北東-南西)
wxCURSOR_SIZENS 上下に拡大/縮小 (北-南)
wxCURSOR_SIZENWSE 斜めに拡大/縮小 (北西-南東)
wxCURSOR_SIZEWE 左右に拡大/縮小 (西-東)
wxCURSOR_SIZING 拡大/縮小
wxCURSOR_SPRAYCAN スプレー缶
wxCURSOR_WAIT 待ち状態
wxCURSOR_WATCH 時計
wxCURSOR_ARROWWAIT バックグラウンドで作業中
  • 使用例:
    SetCursor(wxCursor(wxCURSOR_ARROW));
    

ビジーカーソル

wxBusyCursorのオブジェクトを生成すると、それが有効な間はカーソルが砂時計(wxHOURGLASS_CURSOR)になり、簡単に処理中の状態を表す事ができます。

  • 使用例:
    void foo::bar() {
        wxBusyCursor wait;
    
        for (int i = 0; i < 100000; i++) {
            DoCalculation();
        }
    }
    

wxBusyCursorはwxBeginBusyCursorとwxEndBusyCursorで実装され、コンストラクタとデストラクタでそれらがコールされています。 また、wxBusyCursorが有効かどうか(wxBeginBusyCursorがコールされたビジー状態かどうか)はwxIsBusyでチェックする事ができます。

独自カーソルの作成

独自のカーソルを作成するには、画像データを元にwxCorsorオブジェクトを生成し、それをSetCursorメソッドでセットします。 wxCursorのヘルプにはその例が付記されています。(以下のコードは多少手直しがしてあります)

/* カーソルの画像データ */
static const unsigned char down_bits[] = {
    255, 255, 255, 255,  31, 255, 255, 255,
     31, 255, 255, 255,  31, 255, 255, 255,
     31, 255, 255, 255,  31, 255, 255, 255,
     31, 255, 255, 255,  31, 255, 255, 255,
     31, 255, 255, 255,  25, 243, 255, 255,
     19, 249, 255, 255,   7, 252, 255, 255,
     15, 254, 255, 255,  31, 255, 255, 255,
    191, 255, 255, 255, 255, 255, 255, 255,
    255, 255, 255, 255, 255, 255, 255, 255,
    255, 255, 255, 255, 255, 255, 255, 255,
    255, 255, 255, 255, 255, 255, 255, 255,
    255, 255, 255, 255, 255, 255, 255, 255,
    255, 255, 255, 255, 255, 255, 255, 255,
    255, 255, 255, 255, 255, 255, 255, 255,
    255, 255, 255, 255, 255, 255, 255, 255,
    255, 255, 255, 255, 255, 255, 255, 255
};

/* カーソルのマスク・データ */
static const unsigned char down_mask[] = {
    240,  1, 0, 0, 240,  1, 0, 0,
    240,  1, 0, 0, 240,  1, 0, 0,
    240,  1, 0, 0, 240,  1, 0, 0,
    240,  1, 0, 0, 240,  1, 0, 0,
    255, 31, 0, 0, 255, 31, 0, 0,
    254, 15, 0, 0, 252,  7, 0, 0,
    248,  3, 0, 0, 240,  1, 0, 0,
    224,  0, 0, 0,  64,  0, 0, 0,
      0,  0, 0, 0,   0,  0, 0, 0,
      0,  0, 0, 0,   0,  0, 0, 0,
      0,  0, 0, 0,   0,  0, 0, 0,
      0,  0, 0, 0,   0,  0, 0, 0,
      0,  0, 0, 0,   0,  0, 0, 0,
      0,  0, 0, 0,   0,  0, 0, 0,
      0,  0, 0, 0,   0,  0, 0, 0,
      0,  0, 0, 0,   0,  0, 0, 0
};

#ifdef __WXMSW__
    /* Windowsでのカーソル生成 */
    wxBitmap down_bitmap((const char*)down_bits, 32, 32);
    wxBitmap down_mask_bitmap((const char*)down_mask, 32, 32);

    down_bitmap.SetMask(new wxMask(down_mask_bitmap, *wxBLACK));
    wxImage down_image = down_bitmap.ConvertToImage();
    down_image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, 6);
    down_image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y, 14);
    wxCursor down_cursor = wxCursor(down_image);
#else
    /* Linuxなどでのカーソル生成 */
    wxCursor down_cursor = wxCursor(
            (const char*)down_bits, 32, 32, 6, 14,
            (const char*)down_mask, wxBLACK, wxWHITE);
#endif

    /* カーソル設定 */
    SetCursor(down_cursor);


上記のコードを実行すると次のようなカーソルが表示されます。

 
   
  Copyright © 1998-2015 m,KATO. | Web template created with doTemplate.  
     
inserted by FC2 system