一道MFC的小题

huasonl88 2009-04-15 06:04:43
我是个初学者,对于MFC中的消息映射表我不太懂得写,希望能够得到帮助,谢谢了!
题目是:编写一个单文档应用程序,程序启动后在用户区显示一个方形,当用鼠标左键单击用户区后,该方形变为圆形,如果再单击则又变回方形。
...全文
194 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng0hua0 2009-04-17
  • 打赏
  • 举报
回复
飘过...楼上的代码比我的好详细,我就不说什么了.
如果楼主现在时现学现用,用完就不会再用了,那随便咯,你就用楼上朋友给的代码吧,如果以后还准备这方面的研究,还是耐着性子看看书,掌握点基础吧,不然发帖也不方便和别人交流.平台和语言不兼容=.=!~
yqlhust 2009-04-17
  • 打赏
  • 举报
回复
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

if (flag)
{
pDC->Ellipse(20,20,160,160);
flag=FALSE;
}
else
{
pDC->Rectangle(20,20,160,160);
flag=TRUE;
}

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

void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (flag)
{
Invalidate();//调用OnDraw函数重绘窗口
}
else
{
Invalidate();
}

CView::OnLButtonDown(nFlags, point);
}
这样应该会更好理解一些!已经调试过,没有什么问题。
yqlhust 2009-04-17
  • 打赏
  • 举报
回复
设置一个bool类型标志位变量flag,并在构造函数中初始化为false;

void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

if (flag)
pDC->Ellipse(20,20,160,160);
else
pDC->Rectangle(20,20,160,160);

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


void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (flag)
{
Invalidate();
flag=FALSE;
}
else
{
Invalidate();
flag=TRUE;
}

CView::OnLButtonDown(nFlags, point);
}
nyhenry1 2009-04-17
  • 打赏
  • 举报
回复
可以看看visual c++技术内幕上面有类似的,网上有电子书,还有源码 你可以run 一下看看效果
huasonl88 2009-04-16
  • 打赏
  • 举报
回复
你们讲的太抽象了,能不能帮我王城这道题,然后我自己来琢磨就行了,不然我都不知道,什么时候才会懂!拜托了!
宇宙使者2017 2009-04-16
  • 打赏
  • 举报
回复
呵呵,lbuttondown,paint
斐偲 2009-04-16
  • 打赏
  • 举报
回复
楼上的,你干嘛给他OpenGL的代码,还不告诉他加链接库,编译肯定不能通过,他还不更糊涂啊
楼主,你找些入门的书看看,然后自己试试,很简单的~2、3楼说得对
feng0hua0 2009-04-16
  • 打赏
  • 举报
回复
单独让你画个方形能画出来吧?如果画不出来的话,建议你先看下入门资料,画出方形再来看下面的.
设置一个全局变量int i
绘制函数这样写:

void Draw(i)
{
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);

if(i ==1)
//这里画方形
{
glBegin(GL_QUADS);
glColor3f(0.5f,0.0f,1.0f);
glVertex3f(-1.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f,0.0f);
glVertex3f(1.0f,-1.0f,0.0f);
glVertex3f(1.0f,1.0f,0.0f);
}
else if(i ==2)
{
auxSolidSphere(0.2);
}

SwapBuffers(m_hDC);//画完别忘记这步
}


然后处理鼠标按下的事件,CTRL+W,选择LButtonDown事件,然后添加事件,函数里这样写:

OnLButtonDown(UINT nFlags, CPoint point)
{
i = i=1?2:1;//如果i现在为1,则修改为2,否则修改为1.
}

然后刷新HDC就可以了.
huasonl88 2009-04-15
  • 打赏
  • 举报
回复
能不能给个现成的,这样说我还是不懂的,我是刚学的!拜托了!
xyg_faster 2009-04-15
  • 打赏
  • 举报
回复
先申明一个全局变量表示当前是圆还是矩形
为view添加OnLButtonDown消息
在函数中通过GetDC()来获取设备上下文。

画圆GetDC()->Ellipse(100,100,200,200);
画矩形GetDC()->Rectangle(100,200,300,400); //参数自己体会。
  • 打赏
  • 举报
回复
在OnLButtonDown设置一个画方形或圆形的标识然后Invalidate,在OnDraw里面根据该标识画相应图形

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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