初学vc2003,视图如何响应菜单命令?高手请指点!

nanshi07 2006-11-20 02:39:54
我c++学的很差,请高手详细指点:

单文档工程,工程名称:pic_1
工程的菜单栏内容如下:
“画线”“帮助”

一、要求实现功能:
点击菜单栏中的“画线”,在文档视图区内画一条线出来。

二、操作步骤:
1、设置菜单项“画线”
2、鼠标右击“画线”,在弹出的菜单中选择“添加事件处理程序".
3、在弹出的“事件处理程序向导”中依次选择:
消息类型:COMMAND
类列表:pic_1View
4、点击“添加编辑”按钮
5、系统自动在pic_1View.cpp中出现
void Cpic_1View::OnFileNew()
{
// TODO: 在此添加命令处理程序代码
}
6、我在第五步中的代码添加以下内容:
void Cpic_1View::OnFileNew(CDC* pDC)
{
CPen NewPen(PS_SOLID,3,RGB(0,100,100));
pDC->LineTo(20,50);
pDC->MoveTo(50,100);

// TODO: 在此添加命令处理程序代码
}

7、编译结果提示有错误,内容如下:
“Cpic_1View”中没有找到重载的成员函数



------------------------------------------
问:
1、错误提示是什么意思?
2、什么地方缺少输入?
3、如何修改才能完成画线的目标?

-------------------------------------------------------------------
------------------------------------------------------------------
我在pic_1view中设置了一个布尔变量m_line_1

奇怪的是
如下面编写的代码,那么程序运行的时候不自动出现线条,但是菜单命令“画线”也没有用了:
// Cpic_1View 绘制

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

if (m_line_1)
{ CPen NewPen(PS_SOLID,30,RGB(100,100,100));
pDC->LineTo(20,50);
pDC->MoveTo(50,100);
}

// TODO: 在此处为本机数据添加绘制代码
}
--------------------------------------------
而如果把
......
if (m_line_1)----------------变成if (m_line_1=1)
{ CPen NewPen(PS_SOLID,30,RGB(100,100,100));
pDC->LineTo(20,50);
pDC->MoveTo(50,100);
.....

那么程序自动绘制线条。

我想知道,设置了这个变量,到底有什么作用?
怎么利用这个变量来控制菜单命令?


...全文
195 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
nanshi07 2006-11-20
谢谢楼上各位,希望各位以后多多指教。

回复
一分之千 2006-11-20
楼上各位都说的差不多了,你设置了m_line_1,需要对其进行初始化,如果你想直接画线就在构造函数里直接初始化为TURE就可以拉。

if (m_line_1)----------------变成if (m_line_1=1)//if (m_line_1=1)这个是赋值不是判断。


建议楼主先找本简单的C++书看看,推荐钱能的C++程序设计教程,了解基本语法,函数结构什么的。然后看VC++6.0技术内幕吧
void Cpic_1View::OnFileNew(CDC* pDC)
{
CPen NewPen(PS_SOLID,3,RGB(0,100,100));
pDC->LineTo(20,50);
pDC->MoveTo(50,100);

// TODO: 在此添加命令处理程序代码
}
========================》》
void Cpic_1View::OnFileNew()
{
CDC* pDC=GetDC();
CPen NewPen(PS_SOLID,3,RGB(0,100,100));
pDC->LineTo(20,50);
pDC->MoveTo(50,100);

// TODO: 在此添加命令处理程序代码
}
回复
huangyangman 2006-11-20
基础都没打好,我觉得LZ应该把C++学好先,然后想利用MFC做点东西的话,先把<<windows程序设计>>看看,之后拿本<<深入浅出MFC>>跟踪下微软的源代码,之后再着手写东西吧,急不得的.
回复
jixingzhong 2006-11-20
楼主把 上面给的那个程序下载了好好看看吧, 呵呵

http://www.chinacodes.net/downinfo/16799.html
回复
jixingzhong 2006-11-20
m_line_1 这个变量是一个标志变量,
它是用于 窗口重绘的。

在你画了一条线之后,
如果把窗口隐藏, 比如你打开 IE,
然后再转回到程序界面,
原来的线条就没有了, 因为窗口重绘了。

m_line_1 就是一个标志,
记录是否有 已经绘制了一条线条,
如果是, 那么就在 窗口重绘的时候 把这个线条补上。

所以,
需要在void Cpic_1View::OnFileNew(CDC* pDC) 方法中增加一个语句:
void Cpic_1View::OnFileNew(CDC* pDC)
{
m_line_1 = 1;
... //其他
}

OnDraw 中应该是 if (m_line_1) 而不是 if (m_line_1=1)
因为后者永真,程序一打开,线条总是有的 ...
回复
jixingzhong 2006-11-20
http://www.chinacodes.net/downinfo/16799.html

VC 写的一个画图程序,
楼主不妨看看 ~~
回复
huangyangman 2006-11-20
看看深入浅出MFC吧,有模仿消息映射的详细内容.绝对精彩.
回复
飞哥 2006-11-20
1、错误提示是什么意思?/////////////没有在类中声明重载函数
2、什么地方缺少输入?//////////输入?在哪?
3、如何修改才能完成画线的目标?//////////// 菜单事件函数中调用画线函数
4。我想知道,设置了这个变量,到底有什么作用?///////////描述菜单是否选中?
5。怎么利用这个变量来控制菜单命令?////////变量控制菜单?还是菜单来控制。。。

回复
飞哥 2006-11-20
if (m_line_1=1)//////////////////这是判断语句吗?,这是赋值语句 = ? == ?
回复
飞哥 2006-11-20
void Cpic_1View::OnFileNew()
void Cpic_1View::OnFileNew(CDC* pDC)
回复
飞哥 2006-11-20
void Cpic_1View::OnFileNew()
{
// TODO: 在此添加命令处理程序代码
}
6、我在第五步中的代码添加以下内容:
void Cpic_1View::OnFileNew(CDC* pDC)
{
CPen NewPen(PS_SOLID,3,RGB(0,100,100));
pDC->LineTo(20,50);
pDC->MoveTo(50,100);

// TODO: 在此添加命令处理程序代码
}


注意你的参数
需要在类中声明你重载的函数
void OnFileNew(CDC* pDC);
回复
相关推荐
发帖
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2006-11-20 02:39
社区公告
暂无公告