在使用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; }