往一个Picture 的Static 控件里面添加,一个BMP图的代码是什么?
解决方案 »
- GDI做的PNG透明不规则窗体,拖上去的控件看不见,控件全透明了
- CFileDialog的问题。
- InstallShield 12 打包 安装 中文文件名 显示不出
- CSocket 在线程中的诡异问题,高手帮忙!
- 要建立一颗checkbox树,不想用IMGAELIST来实现,可出现问题了。
- 送分:如何得到当前用户的桌面路径?注意可能有不同的用户
- 请问在DLL中能不能接受消息?如果我将dll注入到某个进程,想通过SendMessage来控制dll中函数是否可行?
- 正拿着牛刀正砍 MFC 呢,来看看是不是很变态?
- 阿拉伯数字转换为中文的问题?
- 如何取得“about 对话框”的句柄?
- 什么是守护进程?
- 想找一个对串口通讯和消防系统比较熟悉的朋友一起研究。
CBitmap bmpload;
bmpload.LoadBitmap(IDB_WM4);
cwm->SetBitmap(HBITMAP(bmpload.Detach()));
如果需要动态改变图片,则添加如下代码:
CStatic* pst=(CStatic*)GetDlgItem(IDC_STATIC_FRAME); //PICTURE CONTROL ID CBitmap bit; bit.LoadBitmap(IDB_BITMAP1); pst->SetBitmap(bit);
#if !defined(AFX_IMGWND_H__03C774F0_6584_11D6_8F32_00E04CE76240__INCLUDED_)
#define AFX_IMGWND_H__03C774F0_6584_11D6_8F32_00E04CE76240__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ImgWnd.h : header file
///////////////////////////////////////////////////////////////////////////////
// CImgWnd window
#define STRECH_1_1 0
#define STRECH_FULL_X 1
#define STRECH_FULL_Y 2
#define STRECH_FULL 3
#define STRECH_CENTER 4class CImgWnd : public CStatic
{
// Construction
public:
CImgWnd();
void SetImage(UINT resID);
void SetStrechType(int nStrechType);
// Attributes
protected:
CBitmap m_bmpImage;
int m_nStrechType;
CRect m_rcSrc;
CRect m_rcDst;
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CImgWnd)
//}}AFX_VIRTUAL// Implementation
public:
void SetImage(CString FileName);
virtual ~CImgWnd(); // Generated message map functions
protected:
//{{AFX_MSG(CImgWnd)
afx_msg void OnPaint();
//}}AFX_MSG DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_IMGWND_H__03C774F0_6584_11D6_8F32_00E04CE76240__INCLUDED_)////////////////////下面是实现文件// ImgWnd.cpp : implementation file
//#include "stdafx.h"#include "ImgWnd.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CImgWndCImgWnd::CImgWnd()
{
m_nStrechType = STRECH_FULL;
}CImgWnd::~CImgWnd()
{
}
BEGIN_MESSAGE_MAP(CImgWnd, CStatic)
//{{AFX_MSG_MAP(CImgWnd)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CImgWnd message handlers
void CImgWnd::SetImage(UINT resID)
{
m_bmpImage.LoadBitmap(resID);
}void CImgWnd::SetImage(CString FileName)
{
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),FileName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE|LR_DEFAULTSIZE);
ASSERT(hBitmap!=NULL);
m_bmpImage.Attach(hBitmap);
}
void CImgWnd::SetStrechType(int nStrechType)
{
m_nStrechType = nStrechType; //重画
Invalidate();
}
void CImgWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
//获得窗口大小
CRect r;
GetClientRect(&r); //填充背景
HBRUSH brush = (HBRUSH)::GetStockObject(GRAY_BRUSH);
::FillRect(dc.m_hDC,&r,brush);
dc.SetStretchBltMode(HALFTONE); //将位图选进设备场景中
CDC memdc;
memdc.CreateCompatibleDC( &dc );
CBitmap* pOldBmp= memdc.SelectObject(&m_bmpImage);
//获得位图参数
BITMAP bmp;
m_bmpImage.GetBitmap(&bmp); //开始缩放
switch(m_nStrechType)
{
case STRECH_1_1://1:1
dc.BitBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,SRCCOPY);
break;
case STRECH_FULL_X://按宽度
dc.StretchBlt(r.left,r.top,r.Width(),bmp.bmHeight,&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
case STRECH_FULL_Y://按高度
dc.StretchBlt(r.left,r.top,bmp.bmWidth,r.Height(),&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
case STRECH_FULL://充满窗口
dc.StretchBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
case STRECH_CENTER://居中显示,大小为窗口的一半
dc.StretchBlt(r.Width()/4,r.Height()/4,r.Width()/2,r.Height()/2,&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
}
//还原
memdc.SelectObject(pOldBmp);
}
pst->SetBitmap(bit);
bit.LoadBitmap(IDB_BITMAP3);
bit.LoadBitmap(IDB_BITMAP2);
pst->SetBitmap(bit);为什么LoadBitmap 几次会出错?难道没有释放掉?