需要在界面中画线,使用MFC生成的基于对话框的程序。
把以下代码放到OnInitDialog函数中:         CDC* pDC;
CPen pen1;
pen1.CreatePen(PS_SOLID,2,RGB(0,0,255));
CPen* pPenOld=(CPen*)pDC->SelectObject(&pen1);
pDC->MoveTo(0,0);
pDC->LineTo(10,10);
pen1.DeleteObject();编译无法通过。感觉是肯定不对,如果能放到OnDraw或者OnPaint里就会好些,但是肯定还有别的毛病。
求教如何解决这个画线的问题。

解决方案 »

  1.   

    你这里的pDC没有指定,不是CPen的问题。一般不会在这里调用的在对话框一般是在OnPaint里
      

  2.   

    画线当然是放到OnDraw或者OnPaint里面啦,
      
    还有 最后,要先把pen1选出设备描述表
     再把它删了
     就是要在删除之前
     pDC->SelectObject(pPenOld);
      

  3.   

    要在OnDraw或者OnPaint里面
    CDC* pDC;
    CPen pen1;
    pDC = GetDC();
    pen1.CreatePen(PS_SOLID,2,RGB(0,0,255));
    pDC->SelectObject(pen1);
    pDC->MoveTo(100, 200);
    pDC->LineTo(100, 230);
    pen1.DeleteObject();
    ReleaseDC(pDC);
      

  4.   

    编译通过,程序没反应。问题挺弱,我刚入门,大家谅解吧,先把整个OnPaint函数发上来,请各位帮忙修改。
    void CTP03Dlg::OnPaint() 
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
    dc.DrawIcon(x, y, m_hIcon); CPen pen1;
    pen1.CreatePen(PS_SOLID,3,RGB(0,0,255));
    CPen* pPenOld=(CPen*)dc.SelectObject(&pen1);
    dc.MoveTo(0,0);
    dc.LineTo(100,100);
    dc.SelectObject(pPenOld);
    pen1.DeleteObject(); }
    else
    {
    CDialog::OnPaint();
    }
    }
      

  5.   

    void C***Dlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CPaintDC dc(this);
    CDC* pDC;
    CPen pen1;
    pDC = GetDC();
    pen1.CreatePen(PS_SOLID,2,RGB(0,0,255));
    // CPen* pPenOld=(CPen*)pDC->SelectObject(&pen1);
    pDC->SelectObject(pen1);
    pDC->MoveTo(100, 200);
    pDC->LineTo(100, 230);
    pen1.DeleteObject();
    ReleaseDC(pDC);
    CDialog::OnPaint();
    }
    }
      

  6.   

    把这些你添加的内容
             CPen pen1;
    pen1.CreatePen(PS_SOLID,3,RGB(0,0,255));
    CPen* pPenOld=(CPen*)dc.SelectObject(&pen1);
    dc.MoveTo(0,0);
    dc.LineTo(100,100);
    dc.SelectObject(pPenOld);
    pen1.DeleteObject();放在最下面,就是
    else
    {
    CDialog::OnPaint();
    }
    的下面