各位大虾们,帮忙看看这个问题吧···我想用VC6.0模拟Win7自带的画图程序,但有几个问题实在不会···
 
1.当我想画直线时,我用的方法是: MoveTo()  与  LineTo() 结合使用,这样我就需要单击鼠标两次,但我想模拟画图程序中那种按下鼠标,然后移动鼠标来画直线的方法,因为用我的方法的话,不能动态改变直线的位置···我应该怎么做?2.还有就是怎样才能做到让我按下并移动鼠标时,窗口会留下它的轨迹(不一定是直线)?3.要是我想在标题栏中加入按钮应该怎么做?还有我能不能调整菜单栏和工具栏的大小让他们在同一水平位置出现?4.最后为什么我有时候为对话框添加类时会出现:这样的对话框?现在这了谢谢各位大虾们了····

解决方案 »

  1.   

    1.当我想画直线时,我用的方法是: MoveTo() 与 LineTo() 结合使用,这样我就需要单击鼠标两次,但我想模拟画图程序中那种按下鼠标,然后移动鼠标来画直线的方法,因为用我的方法的话,不能动态改变直线的位置···我应该怎么做?=========================
    一种通用的方法是设一个标志位,当左键按下时设为TRUE,松开时设为FALSE,同时设两个CPoint型的成员变量Begin和End;用来记录直线的开始点和结束点。在WM_MOUSEMOVE消息处理函数,当标志为TRUE时,表示鼠标处于按下状态,此时,将鼠标位置给End。同时用Invalidate更新视图,而在OnDraw中用Begin和End这两个点画线。其中,Begin可以在左键按下时设定。2.还有就是怎样才能做到让我按下并移动鼠标时,窗口会留下它的轨迹(不一定是直线)?
    ============
    这个的做法同上。3.要是我想在标题栏中加入按钮应该怎么做?还有我能不能调整菜单栏和工具栏的大小让他们在同一水平位置出现?
    ==========================
    加个工具栏,MFC的话,只要不是基于对话框的工程它自己会出现的。
    4.最后为什么我有时候为对话框添加类时会出现:
    =============
    你这个属于操作不当,具体原因不好说。
      

  2.   

    楼主说的第一个问题是弹性线的画法,你只需要响应Mousemove消息,然后再绘制函数中以背景颜色重绘上次的两点,再用前景色绘制新直线。
    第二个问题是绘制连续直线,你可以用一个容器类对象来保存鼠标移动的各点,然后再根据容器来绘制连续线。
    增加按钮的话直接在资源编辑器里加,然后用Classwiard增加按钮的响应函数。工具栏不能和菜单栏在同一个位置,只能是两个工具栏可以对齐。
    出现第四种情况时你把工程关掉,删除clw文件后重新打开试试。如果还是不行那就是你添加的错误了。
    建议楼主看看孙鑫的Vc++深入详解,里面有专门讲线的画法。我做过一个比较完整的绘制各种线的小程序,不过是基于Vc6.0做的,如果需要的话可以给你。
      

  3.   

    1、在OnLButtonDown里记录起点、设定标志位、SetCapture,在OnMouseMove里记录终点然后Invalidate,在OnLButtonUp里取消标志位、ReleaseCapture2、基本同一,不过要不想绘制直线就要在OnMouseMove里连续记录经过的点3、标题栏里是不能放置有句柄的东西的,你要实现标题栏按钮要自己重绘非客户区来模拟,至于菜单的问题,要实现你这个需求就需要把菜单做到Toolbar上,不能用框架的菜单栏4、这个是6.0比较经典的一个bug
      

  4.   


    重绘非客户区?怎么重绘?
    那个bug该怎么解决?
      

  5.   

    重绘非客户区你上网找找资料吧
    比较麻烦
    这个bug在6.0以后的版本就没有了