-

来自「visual c 灵感编程的1-20节源码」· 代码 · 共 130 行

TXT
130
字号
// 透明窗口View.cpp : implementation of the CMyView class
//

#include "stdafx.h"
#include "透明窗口.h"

#include "透明窗口Doc.h"
#include "透明窗口View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyView

IMPLEMENT_DYNCREATE(CMyView, CView)

BEGIN_MESSAGE_MAP(CMyView, CView)
	//{{AFX_MSG_MAP(CMyView)
	ON_WM_CREATE()
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyView construction/destruction

CMyView::CMyView()
{
	// TODO: add construction code here

}

CMyView::~CMyView()
{
	memDC.SelectObject(oldObject);//释放资源
    memDC.DeleteDC();
}

BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	//将客户区窗口的刷子该为空刷子
	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMyView drawing

void CMyView::OnDraw(CDC* pDC)
{
	CMyDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CMyView diagnostics

#ifdef _DEBUG
void CMyView::AssertValid() const
{
	CView::AssertValid();
}

void CMyView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CMyDoc* CMyView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
	return (CMyDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMyView message handlers

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	//CWnd* mainfraim;
    //  mainfraim=AfxGetMainWnd();
	//mainfraim->SetActiveWindow();	
	// TODO: Add your specialized creation code here
	::SetClassLong(this->m_hWnd,GCL_HBRBACKGROUND,(long)GetStockObject(HOLLOW_BRUSH));
	width=GetSystemMetrics(SM_CXSCREEN);//保存当前显示器的分辨率
	height=GetSystemMetrics(SM_CYSCREEN);
	CWindowDC screenDC(NULL);//获得屏幕窗口的上下文
//初始化位图
	hbmp.CreateBitmap(width,height,screenDC.GetDeviceCaps(PLANES),screenDC.GetDeviceCaps(BITSPIXEL),NULL);
    
    memDC.CreateCompatibleDC(NULL);
	
    oldObject=memDC.SelectObject(&hbmp);
    memDC.BitBlt(0,0,width,height,&screenDC,0,0,SRCCOPY);

	return 0;
}

void CMyView::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	
	RECT clientRect;
	GetClientRect(&clientRect);//获得当前客户区的大小
	POINT lefttop;

	lefttop.x=clientRect.left;
	lefttop.y=clientRect.top;

	ClientToScreen(&lefttop);//将窗口客户区左上角的点坐标转换为屏幕坐标
			           //用保存的位图将客户区重画
	dc.BitBlt(0,0,clientRect.right,clientRect.bottom,&memDC,lefttop.x,lefttop.y,SRCCOPY);
	dc.TextOut(100,0,"Hello world");
	
	// Do not call CView::OnPaint() for painting messages
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?