⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmpdialog.cpp

📁 一个串口通信的例子
💻 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 + -