Gdi繪圖

  在使用VC開發項目過程當中,界面是項目中的一個子模塊。雖然界面並不那麼重要,把握住核心功能就能夠了,但界面美觀與否直接關係到用戶的體驗, 所以咱們也應該關注界面的處理。函數

  咱們能夠在OnEraseBkgnd處理函數中,利用GDI繪圖與雙緩衝技術來設置背景。spa

  在下面的這個程序中,在OnEraseBkgnd處理函數中直接設置對話框的顯示背景,下圖是運行結果。code

  經過建立一個和屏幕相關聯的內存DC,並把位圖選入內存DC中,而後在內存DC上進行繪圖,繪圖結束後把內存DC中的數據拷貝到屏幕DC,這樣就能夠在對話框上顯示出設置好的背景。blog

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;
}
相關文章
相關標籤/搜索