《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都是一个效果。没有光标出现。

是要添加特殊的头文件还是别的问题?解决不了啊。我还试了一下另一个鼠标编程的例子,程序运行,该出来的效果没有。

请大家给我指点一下。谢谢。
展开
 我来答
seafox217
2012-04-19 · TA获得超过253个赞
知道答主
回答量:34
采纳率:0%
帮助的人:64.6万
展开全部
我在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函数来加载光标资源。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式