GDI+ 與 GDI (平鋪與拉伸)PNG背景圖貼圖片的方法

文章來源:http://blog.csdn.net/cddchina/article/details/25394143

作者:cddchina

爲了縮減客戶端的大小 考慮將一些背景圖片改爲平鋪顯示方式 學習了。

GDI+是微軟在Windows2000以後的操作系統中提供的新接口,它是基於面向對象的,而GDI是基於函數的。

建議大家使用GDI+畫圖,GDI+使用簡單,下面是GDI+與GDI使用的方式。

GDI+使用說明:

void CDlgClassroom::OnPaint()

{

    if (IsIconic())

    {

        CPaintDC  dc(this); // device context for painting

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // Center icon in client rectangle

        int cxIcon = GetSystemMetrics(SM_CXICON);

        int cyIcon = GetSystemMetrics(SM_CYICON);

        CRect rect;

        GetClientRect(&rect);

        int x = (rect.Width() - cxIcon + 1) / 2;

        int y = (rect.Height() - cyIcon + 1) / 2;

        // Draw the icon

        dc.DrawIcon(x, y, m_hIcon);

    }

    else

    {

        CPaintDC  dc(this);

        CRect  rect;

        GetClientRect(&rect);//對話框當前位置

 

        Graphics  graphics(dc.m_hDC);

        ImageAttributes  imAtt;

        imAtt.SetWrapMode(WrapModeTile);    //拉伸圖片

        //拉伸圖片

        Bitmap  backgroundtop(L".\\classroom\\class_toolbar_top.png");   //加載PNG圖片

        graphics.DrawImage(&backgroundtop,Rect(0,0,rect.Width(),34),

            0, 0,backgroundtop.GetWidth(),backgroundtop.GetHeight(),UnitPixel,&imAtt);

 

        ///////////////平鋪背景圖

       // Bitmap backgroundmiddle(L".\\room\\BgBlackboard.png");//加載PNG圖片

       // TextureBrush brush(&backgroundmiddle, WrapModeTile/*FlipXY*/ );

       // graphics.FillRectangle(&brush, RectF(0.0f, 0.0f,rect.Width(),rect.Height()));

        CDialog::OnPaint();

    }

}

 

GDI使用:

GDI操作起來就比較繁瑣。

voidCDlgClassroom::OnPaint()

{

    if (IsIconic())

    {

        CPaintDC  dc(this); // device context for painting

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // Center icon in client rectangle

        int  cxIcon = GetSystemMetrics(SM_CXICON);

        int  cyIcon = GetSystemMetrics(SM_CYICON);

        CRect  rect;

        GetClientRect(&rect);

        intx = (rect.Width() - cxIcon + 1) / 2;

        inty = (rect.Height() - cyIcon + 1) / 2;

 

        // Draw the icon

        dc.DrawIcon(x, y, m_hIcon);

    }

    else

    {

        CPaintDC  dc(this);

        CRect  rect;

        GetClientRect(&rect);//對話框當前位置

 

        //平鋪圖片

        CDC   MemDC;

        CBitmap  cbitmap;

        CBitmap* pOldBmp = NULL; 

        HBITMAP  hBitmap;

        CDC * pDC = GetDC();

        //頂部背景圖

        Bitmap  backgroundtop(L".\\classroom\\class_toolbar_top.png");   //加載PNG圖片

        backgroundtop.GetHBITMAP(Color(0,0,0),&hBitmap);            // Bitmap To HBITMAP

        CBitmap* cBitmap = CBitmap::FromHandle(hBitmap);            // HBITMAP To CBitmap *

        MemDC.CreateCompatibleDC(pDC);                              // 顯示圖片

        pOldBmp = MemDC.SelectObject(cBitmap);

        dc.StretchBlt(0,0,rect.Width(),34, &MemDC, 0, 0,backgroundtop.GetWidth() ,backgroundtop.GetHeight(),SRCCOPY);

        MemDC.SelectObject(pOldBmp);//releaseDC

        MemDC.DeleteDC(); 

        cBitmap->DeleteObject();

        CDialog::OnPaint();

    }

}

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章