《MFC程序设计轻松入门》关于改变客户区光标为“I”型光标的一段程序:生成的程序上不显示光标。
MFC的单文档界面的应用程序,在classwizard里对CMainFrame类的WM_SETCURSOR消息添加响应函数OnSetCursor()。程序如下BOOLCM...
MFC的单文档界面的应用程序,在classwizard里对CMainFrame类的WM_SETCURSOR消息添加响应函数OnSetCursor()。程序如下
BOOL CMainFrame::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
HCURSOR m_hMycursor;
m_hMycursor= AfxGetApp()->LoadCursor(IDC_IBEAM);
if (nHitTest==HTCLIENT) {
SetCursor(m_hMycursor);
return TRUE;
}
return CFrameWnd::OnSetCursor(pWnd, nHitTest, message);
}
运行后用鼠标点击客户区,客户区没有光标出现。书上显示会有一个“I”型的光标出现。
我用VC++6.0,VS2008都是一个效果。没有光标出现。
是要添加特殊的头文件还是别的问题?解决不了啊。我还试了一下另一个鼠标编程的例子,程序运行,该出来的效果没有。
请大家给我指点一下。谢谢。 展开
BOOL CMainFrame::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
HCURSOR m_hMycursor;
m_hMycursor= AfxGetApp()->LoadCursor(IDC_IBEAM);
if (nHitTest==HTCLIENT) {
SetCursor(m_hMycursor);
return TRUE;
}
return CFrameWnd::OnSetCursor(pWnd, nHitTest, message);
}
运行后用鼠标点击客户区,客户区没有光标出现。书上显示会有一个“I”型的光标出现。
我用VC++6.0,VS2008都是一个效果。没有光标出现。
是要添加特殊的头文件还是别的问题?解决不了啊。我还试了一下另一个鼠标编程的例子,程序运行,该出来的效果没有。
请大家给我指点一下。谢谢。 展开
1个回答
展开全部
我在VS2008下测试过你的代码。结果的确没有出现"I"型光标。
我个人认为原因如下:
m_hMycursor= AfxGetApp()->LoadCursor(IDC_IBEAM);
应该改为:
m_hMycursor=LoadCursor(NULL,IDC_IBEAM);
前者意思是,在当前应用程序中加载资源号为IDC_IBEAM的光标,返回它的句柄;
后者意思是,加载WINDOWS资源号为IDC_IBEAM的光标,返回它的句柄;
WINDOWS中已经定义了很多默认的资源ID(WinUser.h头文件中你可以找到IDC_IBEAM),这些资源的使用不是依赖于具体实例的,所以LoadCursor的第一个参数为NULL;而如果你在自己的应用程序中画了一个光标,资源号为IDC_CURSOR1,那么这个资源号只有你的应用程序认识,所以要用AfxGetApp()->LoadCursor函数来加载光标资源。
我个人认为原因如下:
m_hMycursor= AfxGetApp()->LoadCursor(IDC_IBEAM);
应该改为:
m_hMycursor=LoadCursor(NULL,IDC_IBEAM);
前者意思是,在当前应用程序中加载资源号为IDC_IBEAM的光标,返回它的句柄;
后者意思是,加载WINDOWS资源号为IDC_IBEAM的光标,返回它的句柄;
WINDOWS中已经定义了很多默认的资源ID(WinUser.h头文件中你可以找到IDC_IBEAM),这些资源的使用不是依赖于具体实例的,所以LoadCursor的第一个参数为NULL;而如果你在自己的应用程序中画了一个光标,资源号为IDC_CURSOR1,那么这个资源号只有你的应用程序认识,所以要用AfxGetApp()->LoadCursor函数来加载光标资源。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询