方法1:动态加载;(有一个缺点:生成的exe文件要与res目录一起放在同一目录下,且res中有此光标文件,否则会看不到鼠标指针)
///1)
HCURSOR m_hCursor; //成员变量;
////2) 在OnInitDlg中赋值;
m_hCursor = LoadCursorFromFile("res\\pointer2.cur");
////3) 针对Dialog对话框添加SetCursor事件:
BOOL CMinderDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
::SetCursor(m_hCursor);
//return CDialog::OnSetCursor(pWnd, nHitTest, message); //这个是系统自动产生的,一定要删除或注释掉;
return TRUE;
}
////4) 这里一定要注意:
在其App类中的App.cpp中一定要添加释放语句,否则关闭时会因内存泄露而弹错:
BOOL CMinderApp::InitInstance()
{
//........(代码省略)
CMinderDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置处理何时用“确定”来关闭
//对话框的代码
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置处理何时用“取消”来关闭
//对话框的代码
}
// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
// 而不是启动应用程序的消息泵。
::DestroyCursor(dlg.m_hCursor); //-----注:要添加的就是这句(不能是m_pMainWnd->,因为m_hCursor不是它的成员);
return FALSE;
}
方法2:静态加载;(导入资源文件) //不要第4)步,不会资源泄露;
1)
HCURSOR m_hCursor; //成员变量;
2)
m_hCursor = AfxGetApp()->LoadCursor(IDC_POINTER);//初始化中设置;(IDC_POINTER是通过加载光标资源至工程的光标ID号,要.cur后缀的图片)
3)和方法1一样,但不要第4)步;
评论