关于CreateEllipticRgn的奇怪现象?

zhuwenzheng 2002-09-05 03:29:29
HRGN rgn;
rgn=CreateEllipticRgn(2, 2, 29, 29);
char sz[40];
DWORD error=GetLastError();
sprintf(sz,"error =% d ",error);
TextOut(GetWindowDC(0),100,100,sz,sizeof(sz));


在98下测试ERROR=0;2000下测试ERROR=2,为什么??
...全文
146 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingzai 2002-09-05
  • 打赏
  • 举报
回复
search MSDN
Platform SDK: Win32 API
Windows 95/98 Graphics Device Interface
I think There are platform differences for this function
zhuwenzheng 2002-09-05
  • 打赏
  • 举报
回复
我这样写有问题吗???
void CBlueChatDlg::OnDataReceived (void *p_data, UINT16 len)
{
_beginthread(ThreadDll,0,NULL);
}
void ThreadDll(PVOID pvoid)
{
LoadCustom();
}

void LoadCustom()
{
HRGN rgn;
rgn=CreateEllipticRgn(2, 2, 29, 29);
HCURSOR hcursor=LoadCursor(hInst,MAKEINTRESOURCE(IDC_CROSS));
SetCursor(hcursor);

}
icansaymyabc 2002-09-05
  • 打赏
  • 举报
回复
你这个程序,我把它编译运行通过了。说明问题出在你没贴出的代码上。
不过你这段程序没用,你创建的椭圆没有任何作用。
光标的改变在程序结束就取消了,我是在 return前加上Sleep才看见光标的。
zhuwenzheng 2002-09-05
  • 打赏
  • 举报
回复
to mengxihe(蒙溪河)
GetLastError()在98下可以用,你看看MSDN吗
webber84 2002-09-05
  • 打赏
  • 举报
回复
我在dialog里用也没有问题啊。error=2有也很奇怪,不会是你没有权限读取某个文件吧。
mengxihe 2002-09-05
  • 打赏
  • 举报
回复
If the function succeeds, the return value is the handle to the region.

If the function fails, the return value is NULL.

Windows NT/2000: To get extended error information, call GetLastError.

98GetLastError没有用
zhuwenzheng 2002-09-05
  • 打赏
  • 举报
回复
我的流程是这样的:程序是基于对话框的,启动程序后隐藏,然后通过串口过来的一个数据,来创建一个椭圆,并改变光标

BOOL ToCreate(void)
{
HRGN rgn;
rgn=CreateEllipticRgn(2, 2, 29, 29);
HCURSOR hcursor=LoadCursor(hInst,MAKEINTRESOURCE(IDC_CROSS));
SetCursor(hcursor);


return TRUE;
}

icansaymyabc 2002-09-05
  • 打赏
  • 举报
回复
这段程序没问题,问题出在你没贴出的代码上。
98 != 2000
zhuwenzheng 2002-09-05
  • 打赏
  • 举报
回复
难道跟是对话框有关
zhuwenzheng 2002-09-05
  • 打赏
  • 举报
回复
我的应用程序是基于对话框的
webber84 2002-09-05
  • 打赏
  • 举报
回复
1:我这里用98是正常的;
2:需要设置鼠标的时候windows向窗口发出WM_SETCURSOR消息,你可以处理这个消息用SetCursor来设置光标。如果像你那样在普通的代码中设置光标的话,DefWindowProc会处理WM_SETCURSOR消息,用注册窗口类时用的光标重新设置,这样就把你设置的光标去掉了。
aprilsnow 2002-09-05
  • 打赏
  • 举报
回复
你在SetCursor(hcursor);一句后加上::Sleep(1000);看是不是鼠标变了一秒又变了回去?
SetCursor好像只是变一时的。
In355Hz 2002-09-05
  • 打赏
  • 举报
回复
1、奇怪,应该没错啊。
你在调用CreateEllipticRgn之前设置SetLastError(0);看看?

2、调用SetCursor只有在鼠标在自己程序窗口才有效(或者调用了SetCapture之后),而且要保证在注册程序窗口类的时候设置的hCursor为NULL。
zhuwenzheng 2002-09-05
  • 打赏
  • 举报
回复
还有我用下面的程序重置CURSOR,不成功,但是我没有跟踪到有什么错误啊
HCURSOR hcursor=LoadCursor(hInst,MAKEINTRESOURCE(IDC_ALL));
SetCursor(hcursor);
char sz[40];
DWORD error=GetLastError();
sprintf(sz,"error =% d ",error);
TextOut(GetWindowDC(0),100,100,sz,sizeof(sz));

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧