我在窗体中加了个picture的控件,类型设为Rectangle,变量为m_map,ID为IDC_MAP,我想在程序启动的时候在在picture中打出网格。我在OnInitDialog()加入:
CDC *pDC=m_map.GetDC();
pDC->LineTo(100,100);    // 先画条线做个测试运行线没画出来,我将这两行代码放到OnPaint()中,线是画出来了,不过画到了窗体上,被picture覆盖了,我该怎么做才能在程序启动时让线画在picture上???

解决方案 »

  1.   

    在OnPaint()中先调用原窗口处理函数,然后调用LineTo
      

  2.   

    是不是在OnPaint()中调用OnInitDialog()?
    做了,不过线还是没画出来。另外,我在OnInitDialog()中有设置picture的位置,
    CRect rect;
    GetWindowRect(&rect);
    GetDlgItem(IDC_MAP)->SetWindowPos(NULL,rect.left+10,rect.bottom-235,384,192,SWP_NOZORDER);           //设置picture在窗体中的位置如果加上这三行,线能画出来,不过picture的位置就变了,估计是位置没计算好;不加的话,线就画不出来郁闷!
      

  3.   

    onpaint中
    int i;
    CRect rect;
    GetDlgItem(IDC_MAP)->GetClientRect(rect);
    CPaintDC dc(GetDlgItem(IDC_MAP));
    for (i=1;i<5;i++)
    {
    dc.MoveTo(0,rect.bottom/5*i);
                dc.LineTo(rect.right ,rect.bottom/5*i); 
    }
    CDialog::OnPaint();
      

  4.   

    楼上的大哥,我将你那段改为
    CPaintDC dc(GetDlgItem(IDC_MAP));
    dc.SetROP2(R2_NOT);
    dc.LineTo(100,100); 线是可以画了,不过picture的背景颜色变了,我设置picture的颜色为White,画完线后picture变成了Etched,是不是在程序中还要设置picture的背景颜色?
      

  5.   

    不清楚
    可以用dc.FillSolidRect(rect,RGB(255,255,255)); 
    涂成白的
      

  6.   

    算是可以了,不过我总觉得不用涂就可以完成,因为我已经将picture设为白色了。
    而且,如果我不在OnPaint()中加重画,用个按钮来控制是可以的,只不过画出的线会消失。