• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

/********一个关于RECT的小问题,好困惑 :( **********/

longyii 2002-05-16 04:01:34
我在做屏幕截图时用到下面一段代码:
RECT rect;

//获得图像区域
::GetClientRect(ImageWnd->m_hWnd,&rect);

//将相对坐标转换为对整个屏幕的绝对坐标
CPoint* lpPoint=new CPoint(0,0);
::ClientToScreen(ImageWnd->m_hWnd,lpPoint);
rect.left=lpPoint->x;
rect.top =lpPoint->y;
rect.right +=lpPoint->x;
rect.bottom+=lpPoint->y;

但编译出错:
error C2059: syntax error : 'constant'
error C2039: 'rect' : is not a member of 'tagRECT'
c:\program files\microsoft visual studio\vc98\include\windef.h(287) : see declaration of 'tagRECT'

我怀疑是因为这段代码是在基于MFC的常规DLL里使用的,
因为同样一段代码在EXE里用时没问题,

难道用RECT还要包含什么头文件???

困惑啊!!

在线等待,

过会儿不管有没有解决我都会给分。
...全文
101 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
longyii 2002-05-16
哈哈,我终于解决了
真是世界之大,无奇不有啊!!
原来是这样:
我在我的DLL中又要隐式链接一个10000多行的DLL(别人开发的)
需要包含它的导出函数的头文件
但在这个头文件中恰好有一个 #define top 65535
因此在我的程序中rect.top就被替换了,你说巧不巧!!

我费了好大劲才发现啊!!!

好了,还是谢谢大家的参与
结贴散分了!!
回复
jaidy 2002-05-16
CRect rect;
回复
longyii 2002-05-16
好奇怪啊,
我将rect.top =lpPoint->y;这句注释掉,编译就通过
加上就报那个错!!
top和其它几个值为什么不一样!!
回复
kingzai 2002-05-16
对了,上面CRECT rect的改成CRect rect ,要保证可以使用MFC,否则没辙
回复
kingzai 2002-05-16
这样改:
CRECT rect;

//获得图像区域
::GetWindowRect(ImageWnd->m_hWnd,rect);
CPoint* lpPoint=new CPoint(0,0);
rect.left=lpPoint->x;
rect.top =lpPoint->y;
rect.right +=lpPoint->x;
rect.bottom+=lpPoint->y;
回复
longyii 2002-05-16
哎,还不行
to: kingzai()
我换成::GetWindowRect了,一样的错!!
to: Others
用CRect干脆就说没定义,在stdafx.h中已经自动包含了Afxwin.h
所以也不是这个错,

困惑啊!!

帮我解决问题的,我另开贴给分
回复
weblove 2002-05-16
你在stdafx.h中加上头文件Afxwin.h试试
回复
zwcboys 2002-05-16
可以给我分吗?
回复
weblove 2002-05-16
你在stdafx.h中加上头文件Afxwin.h试试
回复
Elsie 2002-05-16
只要包含windows.h就可以了阿

你这两个错误的位置是在这段代码里的么?好像不像阿……
回复
longyii 2002-05-16
我先试试
一会儿就来散分
回复
weblove 2002-05-16
哪个语法错误应该好解决吧 !至于error C2039: 'rect' : is not a member of 'tagRECT'我帮你看看
回复
waterflier 2002-05-16
RECT是在windows.h中定义的类型,你在dll中#include <windows.h>试试。
不过从你的出错信息看可能前面的代码有问题,估计是在当地没有造成影响的笔误,再好好检查一下吧!
回复
LegerWu 2002-05-16
用CRect试试.
回复
kingzai 2002-05-16
你在exe下这段代码可能写在CWnd的派生类下,比如CView,CDialog,所以不会出错,在dll下你可以这样写:
RECT rect;

//获得图像区域
::GetWindowRect(ImageWnd->m_hWnd,&rect);
CPoint* lpPoint=new CPoint(0,0);
rect.left=lpPoint->x;
rect.top =lpPoint->y;
rect.right +=lpPoint->x;
rect.bottom+=lpPoint->y;
回复
Rodgu 2002-05-16
换成CRect看看
回复
huanyun 2002-05-16
在。cpp中RECT不需要头文件
不过在基于MFC的常规DLL里使用就不知道了
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-16 04:01
社区公告

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