我想在我的应用程序里改变鼠标形状,该怎么做?
我想在我的应用程序里改变鼠标形状,使其变为64x64的自定义形状,我该怎么做?各位大侠帮帮忙。 问题点数:100、回复次数:19Top
1 楼qybao(阿宝)回复于 2006-03-06 08:15:48 得分 5
Win API
HCURSOR SetCursor(HCURSOR hCursor);
Top
2 楼qybao(阿宝)回复于 2006-03-06 08:17:19 得分 5
SetCursor(LoadCursor(NULL,ID_XXX));//ID_XXX是你自己的资源图标IDTop
3 楼xieqidong(广州)回复于 2006-03-06 09:26:23 得分 5
来晚了。Top
4 楼lisypro()回复于 2006-03-06 09:48:41 得分 5
HCURSOR SetCursor(HCURSOR hCursor);
SetCursor(LoadCursor(NULL,ID_XXX));//ID_XXX是你自己的资源图标ID
Top
5 楼sinkileu(小心)回复于 2006-03-06 11:36:14 得分 5
过Top
6 楼LongLongAgoImBoy(ThereIsAMe)回复于 2006-03-06 11:58:09 得分 5
HCURSOR hCursor;
hCursor=AfxGetApp()->LoadCursor(IDC_HAND);//系统默认的鼠标资源
//将鼠标设为小手状
SetCursor(hCursor);Top
7 楼bobzhu2002()回复于 2006-03-06 12:52:57 得分 10
我来总结一下,假设是在对话框上定义了8个picture控件,当程序启动时,mouse移到这8个显示区块,就显示mouse成"小手"的形状
具体操作和代码如下
1)给工程添加"小手"的光标文件
2)用classwizard选择SetCursor消息处理函数
3)自己在改消息处理成员函数中添加如下代码
运行试试看,OK了吧?
// here codes is for set cursor shape
BOOL CTestDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
CPoint pt;
GetCursorPos(&pt);
RECT pic1, pic2, pic3, pic4, pic5, pic6, pic7, pic8;
GetDlgItem( IDC_PIC1 )->GetWindowRect( &pic1 );
GetDlgItem( IDC_PIC2 )->GetWindowRect( &pic2 );
GetDlgItem( IDC_PIC3 )->GetWindowRect( &pic3 );
GetDlgItem( IDC_PIC4 )->GetWindowRect( &pic4 );
GetDlgItem( IDC_PIC5 )->GetWindowRect( &pic5 );
GetDlgItem( IDC_PIC6 )->GetWindowRect( &pic6 );
GetDlgItem( IDC_PIC7 )->GetWindowRect( &pic7 );
GetDlgItem( IDC_PIC8 )->GetWindowRect( &pic8 );
if ( ( pt.x >= pic1.left && pt.x <= pic1.right && pt.y >= pic1.top && pt.y <= pic1.bottom ) ||
( pt.x >= pic2.left && pt.x <= pic2.right && pt.y >= pic2.top && pt.y <= pic2.bottom ) ||
( pt.x >= pic3.left && pt.x <= pic3.right && pt.y >= pic3.top && pt.y <= pic3.bottom ) ||
( pt.x >= pic4.left && pt.x <= pic4.right && pt.y >= pic4.top && pt.y <= pic4.bottom ) ||
( pt.x >= pic5.left && pt.x <= pic5.right && pt.y >= pic5.top && pt.y <= pic5.bottom ) ||
( pt.x >= pic6.left && pt.x <= pic6.right && pt.y >= pic6.top && pt.y <= pic6.bottom ) ||
( pt.x >= pic7.left && pt.x <= pic7.right && pt.y >= pic7.top && pt.y <= pic7.bottom ) ||
( pt.x >= pic8.left && pt.x <= pic8.right && pt.y >= pic8.top && pt.y <= pic8.bottom ) )
{
::SetCursor( hCursor );
bSelect = true;
return true;
}
bSelect = false;
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
Top
8 楼xx_jj()回复于 2006-03-06 13:10:52 得分 5
楼上的很详细了Top
9 楼insanehh(有一个美麗的小豆豆)回复于 2006-03-06 13:14:11 得分 5
學習Top
10 楼cat_dog(东方软件)回复于 2006-03-06 14:20:20 得分 0
但是这些只能改变形状,不能改变其大小.我想要64x64的。Top
11 楼wawaku(一堆裤衩!)回复于 2006-03-06 14:30:44 得分 50
1,在资源菜单中Ctrl+R
2.新建Cursor资源
3.可以看到新建的资源IDC_CURSOR1,在画布的上面有它的属性框,一般为(单色32*32)
在这个框的右边有一个按扭,点下,有对话框弹出,可以自定义大小.
4.在它右边还有一个没有图标的按扭,叫做"热点",可以来设置鼠标的点击热点.Top
12 楼cat_dog(东方软件)回复于 2006-03-08 08:17:08 得分 0
hCursor=AfxGetApp()->LoadCursor(IDC_HAND);时返回 NULL,GetSystemMetrics(SM_CXCURSOR)和GetSystemMetrics(SM_CXCURSOR)都返回32,是不是我的系统不支持64x64的Cursor?Top
13 楼cat_dog(东方软件)回复于 2006-03-08 12:33:14 得分 0
To wawaku(挣钱啦挣钱啦 娶个媳妇盖房啦) :
按你的做法后,IDC_CURSOR里有两个Cursor,一个是Monochrome(32x32),一个是64x64,2colors,我怎么选择64x64那个Cursor,默认是Monochrome(32x32),Top
14 楼nkwesley(江南丝竹)回复于 2006-03-08 17:22:13 得分 0
建议使用32x32Top
15 楼wawaku(一堆裤衩!)回复于 2006-03-08 17:26:07 得分 0
删掉你的那个Monochrome(32x32)的,不再用IDC_CURSOR这外名字,换个名字用,引用的时候也换就是了Top
16 楼duanhuicen(sanlang)回复于 2006-03-08 18:04:45 得分 0
学习Top
17 楼cat_dog(东方软件)回复于 2006-03-08 19:39:06 得分 0
To wawaku(挣钱啦挣钱啦 娶个媳妇盖房啦):
Monochrome(32x32)删不掉的,还有IDC_CURSOR我也改了,也没有用。Top
18 楼cat_dog(东方软件)回复于 2006-03-08 22:12:50 得分 0
UpTop
19 楼wawaku(一堆裤衩!)回复于 2006-03-09 08:16:23 得分 0
那我没辙了,我一直都是这样做的,只要
SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE));
里引用的是正确的ID名就没问题呀,呵,我想你是把这个工程的资源弄乱了,看得懂就编辑一下XXX.RC里的东西吧,图方便就再建个工程拷代码喽
东西都是自己研究的,VC里就是有很多不爽的地方,克服一下了Top




