在对话框上画一条直线,要求键盘的左右方向键可以控制其旋转。
其中要注意旋转的速度问题和遇到边界反射的问题。
呵呵,这个都不会,要不怎么说我菜呢?

解决方案 »

  1.   

    画线好办,我来搞定:  CDC* pdc = GetDC();  
      CPen newPen(PS_DASHDOTDOT, 2, (COLORREF)0); // 黑色画笔
      CPen *pOldPen = pdc->SelectObject (&newPen);
      pdc->MoveTo (10, 10);
      pdc->LineTo (110, 40);
      pdc->SelectObject (pOldPen);
      

  2.   

    sgnaw(李逍遥) ,
    这个写成函数后在哪里调用??在onpaint()里吗?
      

  3.   

    不管在哪,只要是在 CWnd 的派生类里,
    用 CClientDC dc(this); 都可以得到客户区 DC;
    用 CWindowDC dc(this); 都可以得到窗口 DC;
    应为 CClientDC 和 CWindowDC 的构在函数只需要提供一个CWnd*就可以了,
    所以,
    你在哪都可以画图:)
      

  4.   

    新建一对话框工程,设为eddyline
    为CeddylineDlg类添加三个变量:
    POINT line1;
    POINT line2;
    int angle;
    在CeddylineDlg.cpp文件开始处加入:
    #include <math.h>
    在CeddylineDlg::OnInitDialog()函数添加:
    line1.x=220;
    line1.y=80;
    line2.x=80;
    line2.y=80;
    jd=0;
    将CeddylineDlg::OnPaint() 函数里的代码清除,改为:
    void CeddylineDlg::OnPaint() 
    {
    CPaintDC dc(this);
    dc.MoveTo(line1);
    dc.LineTo(line2);
    }
    重载PreTranslateMessage函数:
    BOOL CeddylineDlg::PreTranslateMessage(MSG* pMsg)
    {
    if (pMsg->message == WM_KEYDOWN)
    {
    if (pMsg->wParam==VK_RIGHT)
    {
    //Invalidate();
    angle+=1;
    if (angle > 360)
    angle=0;
    }
    if (pMsg->wParam==VK_LEFT)
    {
    angle-=1;
    if (angle == 0)
    angle=360;
    }
    line1.x=70*cos(angle*3.14/180)+150;
    line2.x=70*cos((angle+180)*3.14/180)+150;
    line1.y=70*sin(angle*3.14/180)+80;
    line2.y=70*sin((angle+180)*3.14/180)+80; Invalidate();
    return true;
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
    在win2k+vs.net2003调试通过。
    程序运行后,按左键或右键,屏幕上的直线便绕中点旋转。
      

  5.   

    我一般这样做:
    1.在对话框中放一个Bitmap控件,用来确定绘图的位置;
    2.在OnPaint()中用GetDlgItem(),取重本控件的句柄,然后用GetWindowRect()取得它的位置(注意转成屏幕坐标),最后用Moveto(),LineTo()画线。