现在的位置: 首页 > 综合 > 正文

Dialog & Image….

2013年08月13日 ⁄ 综合 ⁄ 共 3150字 ⁄ 字号 评论关闭

最近想在对话框显示图片,这个是第一步。。从网上找了一些资料。。

现在给出确认的代码。其中还是有一些问题。问题不是代码不能运行。是显示的时候。有的问题。

 

VS2005 MFC + Win XP............

 

包括了动态的和静态的两种方式,而且图片有个局限性就是现在只能显示位图。

 

OK, Three miles on, three miles down............

 

生成一个空的MFC对话框工程

 

首先是静态的。

 

 

先在资源里Import一张图片,必须为BMP图片,ID为IDB_BITMAP_SHOW.

然后在对话框上添加一个picture control控件,右键点击打开属性,

将VS2005 平台下在属性/杂项里边type下拉框选择BITMAP,在点击Image下拉框,选择那个图片。

拉开就会看到所有已经载入好的图片,

选择你要的图片.运行程序即可看到.

 

 

动态加载

 

在C**Dlg.h文件。

public:

 //Dynamic load bitmap;
 CBitmap m_bitShow;

 

 

在C**Dlg.cpp文件中

在触发事件的函数里边。我个人的函数是OnBnClickedButtonShowimg()

 

//May.18..2009 code by sealplusplus
//For Image show......
void C**Dlg::OnBnClickedButtonShowimg()
{
 if ( m_bitShow.m_hObject != NULL )
 {
  m_bitShow.DeleteObject();
 }//_IF

 //Load image...
 HBITMAP hbmp = (HBITMAP)::LoadImage( AfxGetInstanceHandle(),
           _T("D://SealWork//ShowImage//ShowImage//20090518104938.BMP"),
           IMAGE_BITMAP,
           0,
           0,
           LR_CREATEDIBSECTION | LR_LOADFROMFILE );
 if( hbmp == NULL )
 {
  return;
 }//_IF

 //Get the load BMP info......
 m_bitShow.Attach( hbmp );
 
 DIBSECTION ds;

 //BITMAPINFOHEADER &bminfo = ds.dsBmih;
 BITMAPINFOHEADER &bminfo = ds.dsBmih;

 m_bitShow.GetObject( sizeof(ds), &ds );

 //Get the Image Width && Height
 int iImgWidth = bminfo.biWidth;
 int iImgHeight = bminfo.biHeight;

 //Resize Image to fit the PicControl

 CRect imagrect;

 GetDlgItem( IDC_STATIC_DSHOW )->GetWindowRect( &imagrect );
 ScreenToClient( &imagrect );
 
 GetDlgItem( IDC_STATIC_DSHOW )->MoveWindow( imagrect.left,
           imagrect.top,
           iImgWidth,
           iImgHeight,
           true); //Resize
 return;  // return TRUE unless you set the focus to a control

}

//May.18..2009 code by sealplusplus

 

 

 

 

 

 

以下代码是添加在void C**Dlg::OnPaint()函数中。

 //May.18..2009 code by sealplusplus
 //Show image on PicControl
 
 //get the Dialog DC and image will paint on Dialog
 //CPaintDC dc(this); 

 // get the PicControl Item DC and image will paint on Item.
 CPaintDC dc( GetDlgItem( IDC_STATIC_DSHOW ) );

 //used CDC will get Monitor DC, image will paint on Monitor..
 //CDC dc;
 //dc.m_hDC = ::GetDC( NULL );

 CRect rcclient;

 GetDlgItem( IDC_STATIC_DSHOW )->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_bitShow );
 dc.FillRect( rcclient, &brush );

 dc.BitBlt( rcclient.left,
      rcclient.top,
      rcclient.Width(),
      rcclient.Height(),
      &memdc,
      rcclient.left,
      rcclient.top,
      SRCPAINT );

 brush.DeleteObject();

 

 //May.18..2009 code by sealplusplus

 

 

图片是我的代码截图。

具体的详细的代码,尤其是在OnPaint()函数中的,我也不是很熟悉,等有机会补上。

 

 

 

 

 

-----------------ΘΘΘΘΘΘΘΘΘΘΘΘΘΘΘΘΘΘΘΘΘΘΘΘ----------------------------

------------------------------- GOD DAMN IT -------------------------------

 

--------------      World is shit  

--------------

--------------                                                   Genreal Patton.

 

 

 

抱歉!评论已关闭.