首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

尝试一个程序可以运行就是没有效果?各位帮小弟我看下

2012-02-26 
尝试一个程序可以运行就是没有效果??各位帮我看下1.建立mfc的MDI文件draw2.在资源编辑器中建立lineID_DRAW

尝试一个程序可以运行就是没有效果??各位帮我看下
1.建立mfc的MDI文件draw

2.在资源编辑器中建立
line ID_DRAWING_LINE
rectange ID_DRAWING_RECTANGE
Eillpse ID_DRAWING_ELLIPSE

3.添加成员
bool m_bIsDrawing;
int m_nDrawingType;
CPoint m_pStart; 
CPoint m_pOld;
初始化为:
m_bIsDrawing=false;
m_nDrawingType=-1;

4.处理菜单项
在drawview.h中加入:
afx_msg void OnSelectDrawingType(unsigned int nID);
afx_msg void OnUpdateSelectDrawingType(CCmdUI *pCmdUI);
在drawview.cpp中建立映射:
ON_COMMAND_RANGE(ID_DRAWING_LINE,ID_DRAWING_ELLIPSE,OnSelectDrawingType)
ON_UPDATE_COMMAND_UI_RANGE(ID_DRAWING_LINE,ID_DRAWING_ELLIPSE,OnUpdateSelectDrawingType)
再在cpp中添加程序:
void CDrawtwoView::OnSelectDrawingType(unsigned int nID)
{
ASSERT(nID>=ID_DRAWING_LINE&&nID<=ID_DRAWING_ELLIPSE);
m_nDrawingType=nID-ID_DRAWING_LINE;




}
void CDrawtwoView::OnUpdateSelectDrawingType(CCmdUI* pCmdUI)
{
int nID=pCmdUI->m_nID-ID_DRAWING_LINE;
if(nID==m_nDrawingType){
pCmdUI->SetCheck(TRUE);

}
else{
pCmdUI->SetCheck(FALSE);

}

}

5.处理鼠标消息
WM_LBUTTONDOWN
WM_MOUSEMOVE
WM_LBUTTONUP
在drawview.cpp中添加映射:
ON_WM_MBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
void CDrawtwoView::OnMButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

CView::OnMButtonDown(nFlags, point);
m_pStart=point;
m_ptOld=point;
if(m_bIsDrawing)
return;
SetCapture();
m_bIsDrawing=TRUE;
RECT rect;
GetClientRect(&rect);
ClientToScreen(&rect);

}

void CDrawtwoView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

CView::OnLButtonUp(nFlags, point);
if(m_bIsDrawing){
m_bIsDrawing=FALSE;
ReleaseCapture();


}
}

void CDrawtwoView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

CView::OnMouseMove(nFlags, point);
if(m_bIsDrawing){
CClientDC dc(this);
dc.SetROP2(R2_NOT);
CRect rectOld(m_pStart,m_ptOld);
CRect rectNew(m_pStart,point);
switch(m_nDrawingType){
case 0:
dc.MoveTo(m_pStart);
dc.LineTo(m_ptOld);
dc.MoveTo(m_pStart);
dc.LineTo(point);
break;
case 1:
dc.Rectangle(rectOld);
dc.Rectangle(rectNew);
break;
case 2:
dc.Ellipse(rectOld);
dc.Ellipse(rectNew);
default:
break;

}

}
m_ptOld=point;
}
程序,没有问题,可是执行的时候却没有图形产生,这是什么原因呀....

[解决办法]
你放在其他地方,只要一刷新,你画的东西都没有了。。。
[解决办法]
在OnMouseMove里面保存点的坐标信息,然后发出重绘消息,在OnDraw函数里面绘图

热点排行