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