Gdi绘图

  在使用VC开发项目过程中,界面是项目中的一个子模块。虽然界面并不那么重要,把握住核心功能就可以了,但界面美观与否直接关系到用户的体验, 因此我们也应该关注界面的处理。

  我们可以在OnEraseBkgnd处理函数中,利用GDI绘图与双缓冲技术来设置背景。

  在下面的这个程序中,在OnEraseBkgnd处理函数中直接设置对话框的显示背景,下图是运行结果。

  通过创建一个和屏幕相关联的内存DC,并把位图选入内存DC中,然后在内存DC上进行绘图,绘图结束后把内存DC中的数据拷贝到屏幕DC,这样就可以在对话框上显示出设置好的背景。

BOOL CMyDlg::OnEraseBkgnd(CDC *pDC)
{
    CDialog::OnEraseBkgnd(pDC);

    CRect RectWindow;

    //获取客户区域坐标
    GetClientRect(&RectWindow);

    //创建内存DC
    HDC hMemDC = CreateCompatibleDC( pDC->GetSafeHdc() );

    //创建位图
    HBITMAP hBitmap = CreateCompatibleBitmap( pDC->GetSafeHdc(), RectWindow.Width(), RectWindow.Height() );

    //把位图选入内存DC中
    HBITMAP hOldBitmap = (HBITMAP)SelectObject( hMemDC, hBitmap );

    //填充内存DC
    FillRect( hMemDC, &RectWindow, CreateSolidBrush( RGB(201, 201, 201) ) );

    //把内存DC中的位图拷贝到窗口DC上
    BitBlt( pDC->GetSafeHdc(), 0, 0 , RectWindow.Width(), RectWindow.Height(), hMemDC, 0, 0, SRCCOPY );

    //清理工作
    SelectObject( hMemDC, hOldBitmap );
    DeleteDC( hMemDC );
    DeleteObject( hBitmap );

    return true;
}

 

posted @ 2014-04-02 22:36  VC初学者  阅读(1485)  评论(0编辑  收藏  举报