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

📄 floatdibwnd.cpp

📁 本光盘包含了《精通Visual C++图像处理编程(第3版)》一书中全部的源代码、示例程序的可执行文件以及一些供图像处理测试用的图像文件。
💻 CPP
字号:
// FloatDibWnd.cpp : implementation file
//

#include "stdafx.h"
#include "ImageBoard.h"
#include "ImageBoardDoc.h"
#include "ImageBoardView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFloatDibWnd

CFloatDibWnd::CFloatDibWnd(HDIB hDib, CRect rc, CWnd* pParentWnd)
{
	m_hDibFloat = hDib;
	m_bFirst = TRUE;
	m_hCursorFloat = AfxGetApp()->LoadCursor(IDC_CURSORMOVE);
	Create(AfxRegisterWndClass(NULL, m_hCursorFloat), 
		   "", WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS, 
		   rc, pParentWnd, 0x6612);
}

CFloatDibWnd::~CFloatDibWnd()
{
}


BEGIN_MESSAGE_MAP(CFloatDibWnd, CWnd)
	//{{AFX_MSG_MAP(CFloatDibWnd)
	ON_WM_PAINT()
	ON_WM_NCHITTEST()
	ON_WM_SETCURSOR()
	ON_WM_DESTROY()
	ON_WM_MOVE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CFloatDibWnd message handlers

void CFloatDibWnd::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	CRect rc;
	GetClientRect(&rc);
	CImageBoardView* pParent = (CImageBoardView *)GetParent();
	
	CRect rcDraw(1, 1, rc.Width()-1, rc.Height()-1);
	PaintDIB(dc.GetSafeHdc(), &rcDraw, m_hDibFloat, &rcDraw, 
		(HPALETTE)pParent->m_pDib->m_pPalette->GetSafeHandle(), SRCCOPY);
	
	CPen pen1(PS_SOLID, 1, RGB(255,255,255));
	CPen pen2(PS_DOT, 1, RGB(0,0,0));
	CPen* pOldPen = dc.SelectObject(&pen1);
	//int nOldRop = dc.SetROP2(R2_NOTMERGEPEN);
	dc.MoveTo(rc.left, rc.top);
	dc.LineTo(rc.right-1, rc.top);
	dc.LineTo(rc.right-1, rc.bottom-1);
	dc.LineTo(rc.left, rc.bottom-1);
	dc.LineTo(rc.left, rc.top);

	dc.SelectObject(&pen2);
	//int nOldRop = dc.SetROP2(R2_NOTMERGEPEN);
	dc.MoveTo(rc.left, rc.top);
	dc.LineTo(rc.right-1, rc.top);
	dc.LineTo(rc.right-1, rc.bottom-1);
	dc.LineTo(rc.left, rc.bottom-1);
	dc.LineTo(rc.left, rc.top);
	dc.SelectObject(pOldPen);
	//dc.SetROP2(nOldRop);
	// Do not call CWnd::OnPaint() for painting messages
}

UINT CFloatDibWnd::OnNcHitTest(CPoint point) 
{
	return HTCAPTION;
}

BOOL CFloatDibWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	SetCursor(m_hCursorFloat);	
	
	return TRUE;//CWnd::OnSetCursor(pWnd, nHitTest, message);
}

void CFloatDibWnd::OnDestroy() 
{
	CWnd::OnDestroy();
	
	DestroyDIB(m_hDibFloat);
}

void CFloatDibWnd::OnMove(int x, int y) 
{
	CWnd::OnMove(x, y);

	// eat the first WM_MOVE when creating
	if (m_bFirst)
	{
		m_bFirst = FALSE;
		return;
	}

	CImageBoardView* pParent = (CImageBoardView *)GetParent();
	pParent->CutSelectedRect();

	UpdateWindow();
}

⌨️ 快捷键说明

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