下面是用visual studio (VC++中MFC)编译的一个程序,出了几个错误,不知道怎么解决,恳请高手帮忙。谢谢

错误提示:e:\VC++\MFC\MFCView.cpp(112):errorC2660:“CDC::SelectGdiObject”:函数不接受1个参数e:\VC++\... 错误提示:
e:\VC++\MFC\MFCView.cpp(112): error C2660: “CDC::SelectGdiObject” : 函数不接受 1 个参数
e:\VC++\MFC\MFCView.cpp(125): error C3861: “sin”: 即使使用参数相关的查找,也未找到标识符
e:\VC++\MFC\MFCView.cpp(136): error C2146: 语法错误 : 缺少“;”(在标识符“pdc”的前面)
e:\VC++\MFC\MFCView.cpp(135): error C3861: “cos”: 即使使用参数相关的查找,也未找到标识符

源程序如下:
// MFCView.cpp : CMFCView 类的实现
//

#include "stdafx.h"
#include "MFC.h"

#include "MFCDoc.h"
#include "MFCView.h"
#include ".\mfcview.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CMFCView

IMPLEMENT_DYNCREATE(CMFCView, CView)

BEGIN_MESSAGE_MAP(CMFCView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_COMMAND(ID_32772, On32772)
END_MESSAGE_MAP()

// CMFCView 构造/析构

CMFCView::CMFCView()
{
// TODO: 在此处添加构造代码

}

CMFCView::~CMFCView()
{
}

BOOL CMFCView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样式

return CView::PreCreateWindow(cs);
}

// CMFCView 绘制

void CMFCView::OnDraw(CDC* /*pDC*/)
{
CMFCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此处为本机数据添加绘制代码
}

// CMFCView 打印

BOOL CMFCView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}

void CMFCView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印前添加额外的初始化
}

void CMFCView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印后添加清除过程
}

// CMFCView 诊断

#ifdef _DEBUG
void CMFCView::AssertValid() const
{
CView::AssertValid();
}

void CMFCView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CMFCDoc* CMFCView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFCDoc)));
return (CMFCDoc*)m_pDocument;
}
#endif //_DEBUG

// CMFCView 消息处理程序

void CMFCView::On32772()
{
// TODO: 在此添加命令处理程序代码
int i,j,px,py;
double x,y,a;
const double PI=3.1416;
CClientDC *pdc=new CClientDC(this);
CPen pen;
pen.CreatePen (PS_SOLID,1,RGB(0xff,0,0));
CPen *oldpen=(CPen*)pdc->SelectGdiObject (&pen);
i=0,j=0;
for(px=10;px<350;px+=60)
{
i=i+1;
for(py=10;py<=350;py+=60)
{
if(j==6) j=1;
else {j=j+1;}
if((i%2)==(j%2))
{
for(a=0;a<=PI;a+=PI/15)
{
y=60-60*sin(a);
pdc->MoveTo ((int)px,py+(int)y);
pdc->LineTo (px+60,py+(int)y);

}
}
else
{
for(a=0;a<=PI;a+=PI/25)
{
x=30-30*cos(a)
pdc->MoveTo (px=(int)x,py);
pdc->LineTo (px+(int)x,py+60);
}
}
}
}
pdc->DeleteDC ();

}
展开
 我来答
流天_liu
2011-11-05 · TA获得超过120个赞
知道答主
回答量:44
采纳率:0%
帮助的人:38.6万
展开全部
楼上说的对,要是SelectGdiObject还有错,可以将SelectGdiObject换成SelectObject,很可能是这个错误,我在MSDN上未找到这个函数,可能是它错了。 要是是说sin,cos未找到标识符,可以在
stdafx.h中加入#include <math.h> ,但是一般的MFC程序会包含这个头文件,这就很奇怪
pdc->MoveTo (px=(int)x,py);
中的=应该是+吧
pdc->DeleteDC ();这句是错了的,因为原来使用new用堆来动态构造CClient对象,不用了的话,
应该用delete掉,而pdc->DeleteDC ();释放了pdc->m_hDC这个成员变量而已,其他成员数据以及
本身均并没有删除,会发生内存泄露。
还有就是【猪无为】说的
“或者根本就不要new出来CClientDC,给人感觉怪怪的,一般都是直接构造对象,如
CClientDC clientDC(this);
CClientDC* pdc = &clientDC; “
这个说法是不对的,使用new或直接用栈来构造对象都是可以的,没有什么怪不怪的,只是
用new构造对象是一件很复杂的事,需要额外动用很多资源,所以在一般情况下不建议使用
堆(new)来构造对象,再说释放也得自己释放,是件麻烦事。
另外x=30 - 30 * cos(a)句是后边少了“;”的(猪无为)。
PicsTimes
2011-11-01 · TA获得超过207个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:143万
展开全部
对综合一下,就是要加上#include <math.h>
然后x=30 - 30 * cos(a)句后边少了“;”
SelectGdiObject改为SelectObject
另外最后一句pdc->DeleteDC();
个人感觉应该是换成
pdc->SelectObejct(oldPen);
delete pdc;
或者根本就不要new出来CClientDC,给人感觉怪怪的,一般都是直接构造对象,如
CClientDC clientDC(this);
CClientDC* pdc = &clientDC;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
FM网络
2011-11-01 · TA获得超过825个赞
知道小有建树答主
回答量:1130
采纳率:0%
帮助的人:968万
展开全部
x=30-30*cos(a)
pdc->MoveTo (px=(int)x,py);
有错误
要改成
x=30-30*cos(a);
pdc->MoveTo (px=(int)x,py);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ffe056d
2011-11-04 · 超过10用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:30.7万
展开全部
同意猪无为的观点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式