目次に戻る
一覧ページに戻る
CPWindow::CreateCursor
2002/10/01 update.
Ver 1.10
マウスカーソルの形状を作成します。

書式

  int CreateCursor(unsigned char *pBuff,unsigned char *pMaskBuff,int cx,int cy);

パラメータ


pBuff
16*16ドットのマウスカーソル形状を16進数で作成し、pBuffに先頭のバッファのポインタを渡します。
マウスカーソルの形状は、2*16=32バイトのunsigned char型配列です。
各ピクセルで白色にする部分を1、黒にする部分を0とした2進数のマップを作成し、これを16進数に置き換えて配列に格納するようにしてください。
pMaskBuff
16*16ドットのマウスカーソル形状のマスクを16進数で作成し、pMaskBuffに先頭のバッファのポインタを渡します。
マウスカーソルのマスク形状は、2*16=32バイトのunsigned char型配列です。
各ピクセルで背景に相当する部分を1、カーソル形状に相当する部分を0とした2進数のマップを作成し、これを16進数に置き換えて配列に格納するようにしてください。
cx
16*16ドットのマウスカーソル形状内の、カーソル左上を(0,0)としたときの中心位置のX(水平)値を指定します。
0-15の間の整数値を指定します。
cy
16*16ドットのマウスカーソル形状内の、カーソル左上を(0,0)としたときの中心位置のY(垂直)値を指定します。
0-15の間の整数値を指定します。
戻り値
カーソル番号として、100以上の整数値が返されます

解説


マウスカーソルの形状を作成します。
引数にマウスカーソル形状とマスク、中心位置を指定します。
戻り値として、カーソル番号が返され、「CPWindow::SetCursor」にてこのカーソル番号を指定することで、 ウィンドウ上のマウスカーソル形状を、好きな形状に置き換えることができるようになります。
なお、ここで作成できるマウスカーソルは、白と黒のモノクロのみです。カラーマウスカーソルは作成できません。
最大32個までのカスタムカーソルを作成・保持できます。






CPWindow win;
int curNum;

//マウスイベントを受け取る
static void OnMouseEvent(CPWindow *lpWin,CPSTMouseEvent ev)
{
    //マウスカーソル形状を割り当て
    lpWin->SetCursor(curNum);
}

void main()
{
    //ダイアログを生成する
    win.Clear();
    win.CreateNewDialog("TestDialog",120,120,120,120);

    //カスタムカーソルの作成(16*16 dot固定)	
    //カーソルで白くなる部分の形状を指定
    //  0 ... 白の部分
    //  1 ... 背景・黒になる部分
    //
    // 00000000 00000000
    // 00000001 10000000
    // 00011001 10110000
    // 00011001 10110000
    // 00001101 10110010
    // 00001101 10110110
    // 00000111 11110110
    // 01100111 11111110
    // 01110111 11111110
    // 00111111 11111100
    // 00011111 11111100
    // 00011111 11111100
    // 00001111 11111000
    // 00000111 11111000
    // 00000011 11110000
    // 00000011 11110000
    //
    // 上記を16進数になおしたのが以下になる
    //
    unsigned char cBuff[2*16]={
      0x00,0x00,  0x01,0x80,
      0x19,0xb0,  0x19,0xb0,
      0x0d,0xb2,  0x0d,0xb6,
      0x07,0xf6,  0x67,0xfe,
      0x77,0xfe,  0x3f,0xfc,
      0x1f,0xfc,  0x1f,0xfc,
      0x0f,0xf8,  0x07,0xf8,
      0x03,0xf0,  0x03,0xf0
    };

    //  カスタムカーソルの作成(16*16 dot固定)
    //  マスク部分の形状を指定
    //  0 ... くりぬく部分
    //  1 ... マスク(背景)の部分
    //
    //  11111110 01111111
    //  11100100 00001111
    //  11000000 00000111
    //  11000000 00000101
    //  11100000 00000000
    //  11100000 00000000
    //  10000000 00000000
    //  00000000 00000000
    //  00000000 00000000
    //  10000000 00000001
    //  11000000 00000001
    //  11000000 00000001
    //  11100000 00000011
    //  11110000 00000011
    //  11111000 00000111
    //  11111000 00000111
    //
    //  上記を16進数になおしたのが以下になる
    //
    unsigned char cMaskBuff[2*16]={
      0xfe,0x7f,  0xe4,0x0f,
      0xc0,0x07,  0xc0,0x05,
      0xe0,0x00,  0xe0,0x00,
      0x80,0x00,  0x00,0x00,
      0x00,0x00,  0x80,0x01,
      0xc0,0x01,  0xc0,0x01,
      0xe0,0x03,  0xf0,0x03,
      0xf8,0x07,  0xf8,0x07
    };

    //マウスカーソル形状の作成
    curNum=win.CreateCursor(cBuff,cMaskBuff,8,8);

    //マウスカーソル形状を割り当て
    win.SetCursor(curNum);

    //マウスイベントの登録
    win.AttachMouseEvent(&OnMouseEvent);

    //ダイアログの表示・イベントループの開始
    win.DoModal();
}

cBuffにマウスカーソル形状・cMaskBuffにマウスカーソルのマスク形状を作成し、「CreateCursor」で16*16ドットのマウスカーソルを作成しています。
「SetCursor」により、マウスカーソルを反映しています。
また、マウスイベント関数を「AttachMouseEvent」で登録し、コールバック関数「OnMouseEvent」内でも「SetCursor」でマウスカーソルを「SetCursor」指定しています。
これにより、マウスカーソルが移動したなどのイベントが発生するたびに「SetCursor」にてカーソル形状が設定されます。
マウスイベントと組み合わせることにより、たとえば特定の領域内だけマウスカーソルを変更する、などのことができるようになります。


ビルド時に必要なファイル


ライブラリ :CPartsLib.lib (Macintoshの場合は、CPartsCW.a)
ヘッダ :CPWindow.h


関連リンク


CPWindowクラス
CPWindow::AttachMouseEvent
CPWindow::GetCursor
CPWindow::SetCursor