📄 bmpdialog.cpp
字号:
// BmpDialog.cpp : implementation file
//
#include "stdafx.h"
#include "SCommTest.h"
#include "BmpDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBmpDialog dialog
CBmpDialog::CBmpDialog(CWnd* pParent /*=NULL*/)
: CDialog(CBmpDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CBmpDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
mHollowBrush.CreateStockObject (HOLLOW_BRUSH);
}
void CBmpDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBmpDialog)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBmpDialog, CDialog)
//{{AFX_MSG_MAP(CBmpDialog)
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBmpDialog message handlers
HBRUSH CBmpDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if(mBitmap.GetSafeHandle( )!=NULL)//返回的位图句柄非空时
{
switch (nCtlColor)
{
case CTLCOLOR_STATIC: //为静态控件时,返回空画笔
pDC->SetBkMode (TRANSPARENT);
return (HBRUSH) mHollowBrush.m_hObject;
break;
default: //对其它控件,采用缺省值
HBRUSH hbr = CDialog::OnCtlColor (pDC,pWnd, nCtlColor);
return hbr ;
break;
}
}
else //无位图背景时
{
HBRUSH hbr = CDialog::OnCtlColor (pDC, pWnd, nCtlColor);
return hbr;
}
}
BOOL CBmpDialog::OnEraseBkgnd(CDC *pDC)
{
if (mBitmap.m_hObject!=NULL) //对象句柄非空
{
CDC MemDC;
BITMAP bm;
CRect Rect;
int x=0, y=0;
GetClientRect (&Rect); //获取客户区大小
mBitmap.GetObject (sizeof (BITMAP),&bm); //用位图上的信息填充BITMAP结构的各个域
MemDC.CreateCompatibleDC (pDC); //初始化内存描述对象
CBitmap*pOldBitmap=MemDC.SelectObject (&mBitmap); //定义一个CBITMAP类,并初始化为选入到设备描述对象的位图
if (mType==BITMAP_CENTER) //位图置背景的中心
{
CDialog::OnEraseBkgnd(pDC); //先重绘整个背景
x= (Rect.Width()-bm.bmWidth) /2; //位图左上角横坐标
y= (Rect.Height()-bm.bmHeight) /2; //位图左上角纵坐标
pDC->BitBlt (x, //目标位图横坐标
y, //目标位图纵坐标
bm.bmWidth, //要转换的块高度
bm.bmHeight, //要转换的块宽度
&MemDC, //图形数据的源设备对象
0, //源位图横坐标
0, //源位图纵坐标
SRCCOPY); //转换类型代码,SRCCOPY表示数据不经修改直接拷贝
}
else //位图平铺放置
{ //从左上角开始依次排列位图
while (y<Rect.Height ( ) )
{
while (x<Rect.Width ( ) )
{
pDC->BitBlt (x,y,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY );
x=x+bm.bmWidth;
}
x=0;
y=y+bm.bmHeight;
}
}
MemDC.SelectObject ( pOldBitmap ); //将位图对象选入内存设备描述对象
return TRUE;
}
else //无位图时产生普通对话框
return CDialog::OnEraseBkgnd (pDC);
}
void CBmpDialog::SetBitmap (UINT ResID, int Type)
{
mBitmap.LoadBitmap (ResID); //装入位图对象
mType=Type; //位图放置方式
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -