毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

VC++数字逻辑电子仿真器设计 第2页

更新时间:2010-5-19:  来源:毕业论文
VC++数字逻辑电子仿真器设计 第2页
 DrawObject函数:
首先根据Status的状态,即优个门,两个端结点。共8种来调用DrawObject函数
 引入准备好的八张位图(优个门,两个端)
CBitmap MyBitMap;MyBitMap.LoadBitmap (nID);     
 将引入的位图拷贝入窗体窗户区
BITMAP bmpInfo;
     MyBitMap.GetBitmap (&bmpInfo);
   pOldBitmap=dc.SelectObject (&MyBitMap);
ClientDC.BitBlt (point.x ,point.y,bmpInfo.bmWidth ,bmpInfo.bmHeight,&dc,0,0,SRCAND);
dc.SelectObject (pOldBitmap);
 用全局变量bmWidth和bmHeight来保存元件的宽度和高度
bmWidth=bmpInfo.bmWidth ;
   bmHeight=bmpInfo.bmHeight ;
 CreateMyObject函数
函数声明为:CreateMyObject(Mytype type, MySubtype Subtype, CPoint point)
 初始化元件
MyNode* pNode=new MyNode;
  pNode->type =type;
 pNode->Subtype =Subtype;
 pNode->input1 =0;
  pNode->input2 =0;
 pNode->output1 =0;
 pNode->output2 =0;
  pNode->Orgpoint =point;
 pNode->width =bmWidth;
 pNode->height =bmHeight;
  pNode->input1value =0;
 pNode->input2value =0;
 pNode->output1value =0;
 pNode->inputs =0;
 如果创建的元件为输入结点,则要创建并画输入结点前的序号,这里
采用一个全局数组CArray<CPoint,CPoint> numpoint来记录结点前序号。
 if(Subtype==Input)
 {
  //当创建Input时加入点到numpoint数组中
  numpoint.Add (CPoint(point.x-15,point.y));
  pNode->number =numpoint.GetSize ();
  //创建时重绘序号
  redrawnum(); 
 }
而redrawnum()函数就是将所有输入结点前的序号重绘。
 最后将元件加入到全局链表CList<MyNode*,MyNode*> MyList中。
 MyList.AddTail (pNode);
 鼠标连接元件模块
鼠标连接元件模块分为三个过程模块:鼠标移动模块,鼠标按下模块,鼠标抬起模块。  
 鼠标移动模块其算法如图6图6
代码如下:
void CMyView::OnMouseMove(UINT nFlags, CPoint point) {
 // TODO: Add your message handler code here and/or call default
 //此时必然是非画图状态,所以status==NONE;
 if(Status==NONE) {
  //当前点在某个物件上吗? 并且 //当前点在该物件触点上吗?
  if(IsPointInObject(point) && IsPointInPut(point))
  {
  //全局变量pNodeNow是在IsPointInObject()这个函数里面记录的
   //circlepoint和put是在IsInInput1() IsInInput2() IsInOutput1()
   //这三个函数中记录的


   //判断此时触点时否己连接非常重要
   
   if(IsPutLinked())
   {
    //如果此时触点己连接,则退出
    return;
   }
   
   //此时鼠标移进触点

   //当前是连接态吗?
   if(IsLink)
   {
    //连接态画图
    LinkStatusDraw(point);

   }
   //开启画圆圈态
   IsDrawCircle=TRUE;

   //画圆圈

   DrawMyCircle();

  }
  else//此时鼠标移出触点
  {
   //如果此时已画圆圈,则要擦除圆圈
   if(IsDrawCircle==TRUE)
   {
    EraserMyCircle();

    //关闭画圆圈状态
    IsDrawCircle=FALSE;
    //重绘连接线
    moveoutredrawline();//重绘圆圈所在的那个物件,因为擦除圆圈的时候可能擦除了部分物件

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 下一页

VC++数字逻辑电子仿真器设计 第2页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。