龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

在对话框显示图片的多种方法(下)(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
图片加载成功了,标签大小也适应了,下面就是绘制绘制图像了,打开类向导,重载WM_PAINT消息 void CDisplayPic::OnPaint() { //////////////以下三种情况任选一种会是不同

图片加载成功了,标签大小也适应了,下面就是绘制绘制图像了,打开类向导,重载WM_PAINT消息

void CDisplayPic::OnPaint()

{

//////////////以下三种情况任选一种会是不同效果(只能一种存在)///////////

    //CPaintDC dc(this);      //若用此句,得到的是对话框的DC,图片将被绘制在对话框上.

    CPaintDC dc(GetDlgItem(IDC_STATIC1)); //用此句,得到picture控件的DC,图像将被绘制在控件上 

    //  CDC dc;

    //  dc.m_hDC=::GetDC(NULL);  //若用此两句,得到的是屏幕的DC,图片将被绘制在屏幕上///////////////////////////////////////////////////////

    CRect rcclient;

    GetDlgItem(IDC_STATIC1)->GetClientRect(&rcclient);

    CDC memdc;

    memdc.CreateCompatibleDC(&dc); 

    CBitmap bitmap;

    bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());

    memdc.SelectObject( &bitmap ); 

    CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0); 

    CDC maskdc;

    maskdc.CreateCompatibleDC(&dc);

    CBitmap maskbitmap;

    maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);

    maskdc.SelectObject( &maskbitmap );

    maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,

        rcclient.left, rcclient.top, SRCCOPY);

    CBrush brush;

    brush.CreatePatternBrush(&m_bmp);

    dc.FillRect(rcclient, &brush);     

    dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),

             &memdc, rcclient.left, rcclient.top,SRCPAINT);

    brush.DeleteObject(); 

    // Do not call CDialog::OnPaint() for painting messages

以上四种方法唯有KoDak可以支持多种图像,其它的只支持BMP

如果读者有兴趣可以向我索要以上方法的全部例程. 

信箱: zhucde@jxfw.com  

应广大朋友的建议,特将所有例程打包,放在以下地址供下载:

http://www.7forever.com/c3d/study/pictest.rar

其中,直接绘制的程序为对话框自适应图片大小,不是文章中Static自适应大小

精彩图集

赞助商链接