我写了一段程序,想在桌面上画图
// TODO: Add extra validation here
CPoint PointFrom, PointTo;
PointFrom.x = m_nFromX;
PointFrom.y = m_nFromY; PointTo.x = m_nToX;
PointTo.y = m_nToY; CWnd *pWnd = GetDesktopWindow();
CDC *pWndDC = pWnd->GetDC();
CBrush *pBrush = new CBrush(RGB(255,33,222));
pWndDC->SelectObject(pBrush);
for (int x = m_nFromX; x < m_nToX; x ++)
{
for (int y = m_nFromY; y < m_nToY; y ++)
{
pWndDC->SetPixel(x,y, RGB(9,33,33));
}
}
DeleteObject(pBrush);
为什么一点效果都没有呢

解决方案 »

  1.   

    CDC *pWndDc = ::GetDc(NULL) or ::GetWindowDC(NULL);
    直接获得整屏幕dc
      

  2.   

    把GetDC改成GetWindowDC,或者用GetDC(0)。
      

  3.   

    上面的方法没有用
    HWND hWnd = ::GetDesktopWindow();
    HDC hWndDC = ::GetWindowDC(hWnd); CDC *pWndDC = CDC::FromHandle(hWndDC);
    CBrush *pBrush = new CBrush(RGB(255,33,222));
    pWndDC->SelectObject(pBrush);
    for (int x = m_nFromX; x < m_nToX; x ++)
    {
    for (int y = m_nFromY; y < m_nToY; y ++)
    {
    pWndDC->SetPixel(x,y, RGB(9,33,33));
    }
    }
    //  pWndDC->MoveTo(PointFrom);
    //  pWndDC->LineTo(PointTo);
    DeleteObject(pBrush);
    这样也不行
    是不是少了什么
      

  4.   


    BOOL CStroke::DrawStroke(CDC*pDC)   
    {
      CPen penStroke;
      if(!penStroke.CreatePen(PS_SOLID,m_nPenWidth,RGB(0,0,0)))   
      return FALSE;   
      CPen   *pOldPen=pDC->SelectObject(penStroke);   
      pDC->MoveTo(m_pointArray[0]);   
      for(int i=1; i<m_pointArray; i++)   
      {
        pDC->LineTo(m_pointArray[i]);   
      }   
      pDC->SelectObject(penStroke);   
      return TRUE;