我以前用惯了BCB的,刚来用VC不久,
所以我用VC在写程序的时候喜欢用“base on dialog”来写,而不用单文档或是多文档来写。
现在我有个问题就是,用VC”base on dialog“的程序可不可以象BCB那样就直接在dialog上面画图呢?
应该怎么画?
可以说具体一点吗?
VC真是麻烦,没有BCB好用啊…thank you~~~

解决方案 »

  1.   

    我想可以吧。你可以取得对话框的dc(好象可以用GetDC()),就可以在对话框上画图了。
    你还可以用控件(好象是Picture控件)
      

  2.   

    thank you~~~不过不要全都是“好象”啦…:)DC是什么来的?我真是刚开始用VC不久的`
      

  3.   

    使用Picture控件或Static控件均可
    或者void CAboutDlg::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here
    CDC dcMem;
    dcMem.CreateCompatibleDC(&dc);
    CBitmap bmp;
    HBITMAP hbmp;
    hbmp=(HBITMAP)::LoadImage(AfxGetApp()->m_hInstance,"../test/about.bmp",
    IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION);
    bmp.Attach(hbmp);
    CBitmap *pbmp=(CBitmap*)dcMem.SelectObject(&bmp); CRect r;
    GetWindowRect(&r);
    dc.BitBlt(0,0,r.right,r.bottom,&dcMem,0,0,SRCCOPY); dcMem.SelectObject(pbmp); dc.MoveTo(20,20);
    dc.LineTo(400,400);
    // Do not call CDialog::OnPaint() for painting messages
    }
      

  4.   

    errrrrrrrrrrrrr~~~
    上面那个程序是不是可以画出一条线出来的?(有个lineto())
    可以我copy到我的程序里画不出来啊……thank you very much`可不可以举个picture的例子啊?应该和BCB的image差不多吧?
      

  5.   

    定义一个CRect m_rectClient
    然后在OnInitDialog()添加如下代码:
    CStatic *pST=(CStatic *)GetDlgItem(IDC_CLIENT);
    pST->GetWindowRect(&m_rectClient);
    ScreenToClient(&m_rectClient);//把客户区映射到图形上去
    在OnPaint()添加如下代码:
    CRgn rgn;
    rgn.CreateRectRgnIndirect(&m_rectClient);
    dc.SelectClipRgn(&rgn);
    dc.Rectangle(m_rectClient);//把背景涂为白色通过上面的代码我已经可以在上面画图了,
    现在又有一个新的问题,坐标的转换问题……
    我想把坐标系移到picture控件上来,就是说坐标系从picture的(0,0)开始,有什么函数可以直接用的?
      

  6.   

    DC:device context
    他和gdi连用
    GDI图形设备接口
      

  7.   

    // 在窗体中绘制位图
    void  DRAW_WINDOW_BITMAP( HWND &hWnd, CString strPathName )
    {
    CBitmap * m_pBmp = NULL;
    BITMAP bm;
    CDC dcMem;
    CDC * pDC = NULL; if ( IsFileExist( strPathName ) == FALSE )
    {
    // 需绘制的位图文件不存在,直接退出
    return;
    } pDC = new CDC;
    HDC hDc = ::GetDC( hWnd );
    pDC = CDC::FromHandle( hDc );

    // 装载图片
    HBITMAP  hBitmap = (HBITMAP)::LoadImage ( AfxGetInstanceHandle(),   
                         strPathName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION |  
                         LR_LOADFROMFILE | LR_DEFAULTSIZE ); ASSERT( hBitmap );
    m_pBmp = new CBitmap();
    m_pBmp->Attach( hBitmap ); m_pBmp->GetObject( sizeof(bm), (LPVOID)&bm);
    dcMem.CreateCompatibleDC(pDC);
    CBitmap * pBmpOld = (CBitmap *)dcMem.SelectObject( m_pBmp );
    CRect rect;
    ::GetWindowRect( hWnd, rect ); // 将位图文件缩放绘制窗体中
    pDC->StretchBlt( 0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0,
                              bm.bmWidth, bm.bmHeight, SRCCOPY ); dcMem.SelectObject (pBmpOld ); pDC = NULL;
    delete pDC;

    delete m_pBmp;
    m_pBmp = NULL;
    }// 这个函数可以在任一窗体上绘图,传入窗体句柄即可