最近想在对话框显示图片,这个是第一步。。从网上找了一些资料。。
现在给出确认的代码。其中还是有一些问题。问题不是代码不能运行。是显示的时候。有的问题。
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.