现在的位置: 首页 > 综合 > 正文

获得系统光标

2013年08月06日 ⁄ 综合 ⁄ 共 1102字 ⁄ 字号 评论关闭

SetCursor(AfxGetApp()->LoadCursor(IDC_ARROW));//为什么不能加载
SetCursor(LoadCursor(NULL,IDC_ARROW));//这样却可以

两句有什么区别?


第一句中LoadCursor(IDC_ARROW)中的IDC_ARROW是LPCTSTR类型 ,表示系统默认光标,而LoadCursor中的参数是UINT,当然不行
第二句中LoadCursor是API函数,它要求传入一个应用程序实例句柄和LPCTSTR的光标资源名称,当第一个参数为NULL时,表示加载的是系统光标,而非应用程序中的资源,这样一来,第一个参数,传入IDC_ARROW,正好可以加载系统光标。


获取系统光标需使LoadCursor()的参数hInstance=NULL:
HCURSOR hCursor = ::LoadCursor(NULL , IDC_HAND);
所以不能使用如下形式:AfxGetApp()->LoadCursor(IDC_HAND);

获取自定义光标:
HCURSOR hCursor = AfxGetApp()->LoadCursor(MAKEINTRESOURCE(IDC_MYCURSOR));
或::LoadCursor(AfxGetApp()->m_hInstance , MAKEINTRESOURCE(IDC_MYCURSOR) );


BOOL CTestDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	BOOL result;

	HCURSOR hCursor = ::LoadCursor(NULL , IDC_HAND);
	if(hCursor)
	{
		::SetCursor(hCursor);
		result = TRUE;
	}
	else
	{
		result = CDialog::OnSetCursor(pWnd, nHitTest, message);
	}

	return result;	
}

判断光标在不在矩形区域内

BOOL CMouseCursorView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
	CPoint pt;

	if (::GetCursorPos(&pt))
	{
		ScreenToClient(&pt);
		if (m_rc.PtInRect(pt))
		{
			::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));
			return TRUE;
		}
		else return CView::OnSetCursor(pWnd, nHitTest, message);
	}
}

抱歉!评论已关闭.