C++ Builder如何在游戏程序中自定义鼠标光标

转载自:http://blog.163.com/tab_98/blog/static/11924097201601585230552/ 
在应用程序中,几乎所有的Form、控件都有Cursor这个属性,这个Cursor即是光标,也就是鼠标在该窗口、控件上移动时的形状。系统提供该属性,表示你在设计时可以更改。系统提供了如下表所示的光标形式,如果这些形式还不够,那只有自己画光标了。

C++ Builder如何在游戏程序中自定义鼠标光标 - tab_98 - 死海微澜
 
这个表中,可以看出,它们的值都是负数。为什么呢?正数是为设计者准备的,一般情况下,设计光标时,首先要为它定义一个值,很自然会想到用正数值,系统为了避免与我们的习惯冲突,采用了负值,可见其用心良苦。

自定义鼠标光标的一般过程如下:
(1)用资源编辑器生成光标资源,例如C++ Builder自带的Image Editor,或第三方软件ArtCursors。ArtCursors可以替换图片中选取的某种颜色为透明色,可以设置光标的Hot Spot,就是光标相对于鼠标所在的(X,Y)点的位置。
(2)编写.rc资源文件,比如extrares.rc(文件名任意,扩展名为.rc表示资源脚本Resource   Script):
Malet CURSOR malet.cur
MaletDown CURSOR maletdow.cur
并将extrares.rc文件添加到工程中。
(3)声明光标常量,不要和已经存在的光标常量相同。比如在Unit1.h中:
const int crMaletUp    = 5;
const int crMaletDown  = 6;
(4)用Windows API函数LoadCursor获取新光标的句柄,设置Screen的Cursors属性(以声明的光标常量为索引):
Screen->Cursors[crMaletUp] = LoadCursor(HInstance, "Malet");
Screen->Cursors[crMaletDown] = LoadCursor(HInstance, "MaletDown");
(5)设置窗体或控件的Cursor属性,如:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    Screen->Cursors[crMaletUp] = LoadCursor(HInstance, "Malet");
    Screen->Cursors[crMaletDown] = LoadCursor(HInstance, "MaletDown");
    this->Cursor = crMaletUp;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    Screen->Cursor = TCursor(crMaletDown);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    Screen->Cursor = TCursor(crMaletUp);   
}

也可以不用资源的方式,直接:
Screen->Cursors[10] = LoadCursorFromFile("mycursor1.cur");
Button1->Cursor = (TCursor)10;

猜你喜欢

转载自blog.csdn.net/qq_23096723/article/details/79166186
今日推荐