[code]
// ImageView.cpp : implementation of the CImageView class
//
#include "stdafx.h"
#include "Image.h"
#include "ImageDoc.h"
#include "ImageView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CImageView
IMPLEMENT_DYNCREATE(CImageView, CView)
BEGIN_MESSAGE_MAP(CImageView, CView)
//{{AFX_MSG_MAP(CImageView)
ON_COMMAND(ID_IMAGE_CENTER, OnImageCenter)
ON_COMMAND(ID_IMAGE_STRETCH, OnImageStretch)
ON_COMMAND(ID_IMAGE_TILE, OnImageTile)
ON_UPDATE_COMMAND_UI(ID_IMAGE_CENTER, OnUpdateImageCenter)
ON_UPDATE_COMMAND_UI(ID_IMAGE_STRETCH, OnUpdateImageStretch)
ON_UPDATE_COMMAND_UI(ID_IMAGE_TILE, OnUpdateImageTile)
ON_COMMAND(ID_IMAGE_DESKTOP, OnImageDesktop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CImageView construction/destruction
CImageView::CImageView()
{
m_Type = CENTER;
}
CImageView::~CImageView()
{
}
BOOL CImageView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CImageView drawing
void CImageView::OnDraw(CDC* pDC)
{
CImageDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
switch(m_Type)
{
case CENTER: // 비트맵을 중앙에 출력한다.
CenterImage(pDC);
break;
case TILE: // 비트맵을 바둑판 모양으로 출력한다.
TileImage(pDC);
break;
case STRETCH: // 비트맵을 클라이언트 영역에 맞게 출력한다.
StretchImage(pDC);
break;
}
}
/////////////////////////////////////////////////////////////////////////////
// CImageView diagnostics
#ifdef _DEBUG
void CImageView::AssertValid() const
{
CView::AssertValid();
}
void CImageView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CImageDoc* CImageView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CImageDoc)));
return (CImageDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CImageView message handlers
void CImageView::CenterImage(CDC * pDC)
{
CBitmap myBit, *pOldBit;
CDC memDC;
BITMAP bm;
myBit.LoadBitmap(IDB_IMAGE);
myBit.GetObject(sizeof(BITMAP), &bm);
memDC.CreateCompatibleDC(pDC);
pOldBit = memDC.SelectObject(&myBit);
CRect rc;
GetClientRect(rc);
int x = (rc.Width()-bm.bmWidth)/2;
int y = (rc.Height()-bm.bmHeight)/2;
pDC->BitBlt(x, y, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBit);
}
void CImageView::TileImage(CDC * pDC)
{
CBitmap myBit, *pOldBit;
CDC memDC;
BITMAP bm;
myBit.LoadBitmap(IDB_IMAGE);
myBit.GetObject(sizeof(BITMAP), &bm);
memDC.CreateCompatibleDC(pDC);
pOldBit = memDC.SelectObject(&myBit);
CRect rc;
GetClientRect(rc);
int x, y;
for(y = 0; y < rc.bottom; y += bm.bmHeight)
for(x = 0; x < rc.right; x += bm.bmWidth)
pDC->BitBlt(x, y, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBit);
}
void CImageView::StretchImage(CDC * pDC)
{
CBitmap myBit, *pOldBit;
CDC memDC;
BITMAP bm;
myBit.LoadBitmap(IDB_IMAGE);
myBit.GetObject(sizeof(BITMAP), &bm);
memDC.CreateCompatibleDC(pDC);
pOldBit = memDC.SelectObject(&myBit);
CRect rc;
GetClientRect(rc);
int x = rc.Width(); // 클라이언트 영역의 폭
int y = rc.Height(); // 클라이언트 영역의 높이
pDC->StretchBlt(0, 0, x, y, &memDC,
0, 0, bm.bmWidth, bm.bmHeight, SRCINVERT);
memDC.SelectObject(pOldBit);
}
void CImageView::OnImageCenter()
{ // ID_IMAGE_CENTER로 정의된 메뉴 항목이나 툴바 버튼을 선택한 경우
m_Type = CENTER; // 비트맵을 중앙에 배치
Invalidate();
}
void CImageView::OnImageTile()
{ // ID_IMAGE_TILE로 정의된 메뉴 항목이나 툴바 버튼을 선택한 경우
m_Type = TILE; // 비트맵을 바둑판 모양으로 배치
Invalidate();
}
void CImageView::OnImageStretch()
{ // ID_IMAGE_STRETCH로 정의된 메뉴 항목이나 툴바 버튼을 선택한 경우
m_Type = STRETCH; // 비트맵을 클라이언트 영역 크기에 맞게 배치
Invalidate();
}
void CImageView::OnUpdateImageCenter(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_Type == CENTER);
}
void CImageView::OnUpdateImageTile(CCmdUI* pCmdUI)
{
pCmdUI->SetRadio(m_Type == TILE);
}
void CImageView::OnUpdateImageStretch(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_Type == STRETCH);
}
void CImageView::OnImageDesktop()
{
// NULL값을 지정하면 데스크탑(바탕화면)에
// 대한 DC가 얻어진다.
CClientDC dc(NULL);
CBitmap myBit, *pOldBit;
CDC memDC;
BITMAP bm;
myBit.LoadBitmap(IDB_DIRECTX);
myBit.GetObject(sizeof(BITMAP), &bm);
memDC.CreateCompatibleDC(&dc);
pOldBit = memDC.SelectObject(&myBit);
dc.BitBlt(20, 20, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBit);
}
[/code]
// ImageView.cpp : implementation of the CImageView class
//
#include "stdafx.h"
#include "Image.h"
#include "ImageDoc.h"
#include "ImageView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CImageView
IMPLEMENT_DYNCREATE(CImageView, CView)
BEGIN_MESSAGE_MAP(CImageView, CView)
//{{AFX_MSG_MAP(CImageView)
ON_COMMAND(ID_IMAGE_CENTER, OnImageCenter)
ON_COMMAND(ID_IMAGE_STRETCH, OnImageStretch)
ON_COMMAND(ID_IMAGE_TILE, OnImageTile)
ON_UPDATE_COMMAND_UI(ID_IMAGE_CENTER, OnUpdateImageCenter)
ON_UPDATE_COMMAND_UI(ID_IMAGE_STRETCH, OnUpdateImageStretch)
ON_UPDATE_COMMAND_UI(ID_IMAGE_TILE, OnUpdateImageTile)
ON_COMMAND(ID_IMAGE_DESKTOP, OnImageDesktop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CImageView construction/destruction
CImageView::CImageView()
{
m_Type = CENTER;
}
CImageView::~CImageView()
{
}
BOOL CImageView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CImageView drawing
void CImageView::OnDraw(CDC* pDC)
{
CImageDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
switch(m_Type)
{
case CENTER: // 비트맵을 중앙에 출력한다.
CenterImage(pDC);
break;
case TILE: // 비트맵을 바둑판 모양으로 출력한다.
TileImage(pDC);
break;
case STRETCH: // 비트맵을 클라이언트 영역에 맞게 출력한다.
StretchImage(pDC);
break;
}
}
/////////////////////////////////////////////////////////////////////////////
// CImageView diagnostics
#ifdef _DEBUG
void CImageView::AssertValid() const
{
CView::AssertValid();
}
void CImageView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CImageDoc* CImageView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CImageDoc)));
return (CImageDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CImageView message handlers
void CImageView::CenterImage(CDC * pDC)
{
CBitmap myBit, *pOldBit;
CDC memDC;
BITMAP bm;
myBit.LoadBitmap(IDB_IMAGE);
myBit.GetObject(sizeof(BITMAP), &bm);
memDC.CreateCompatibleDC(pDC);
pOldBit = memDC.SelectObject(&myBit);
CRect rc;
GetClientRect(rc);
int x = (rc.Width()-bm.bmWidth)/2;
int y = (rc.Height()-bm.bmHeight)/2;
pDC->BitBlt(x, y, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBit);
}
void CImageView::TileImage(CDC * pDC)
{
CBitmap myBit, *pOldBit;
CDC memDC;
BITMAP bm;
myBit.LoadBitmap(IDB_IMAGE);
myBit.GetObject(sizeof(BITMAP), &bm);
memDC.CreateCompatibleDC(pDC);
pOldBit = memDC.SelectObject(&myBit);
CRect rc;
GetClientRect(rc);
int x, y;
for(y = 0; y < rc.bottom; y += bm.bmHeight)
for(x = 0; x < rc.right; x += bm.bmWidth)
pDC->BitBlt(x, y, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBit);
}
void CImageView::StretchImage(CDC * pDC)
{
CBitmap myBit, *pOldBit;
CDC memDC;
BITMAP bm;
myBit.LoadBitmap(IDB_IMAGE);
myBit.GetObject(sizeof(BITMAP), &bm);
memDC.CreateCompatibleDC(pDC);
pOldBit = memDC.SelectObject(&myBit);
CRect rc;
GetClientRect(rc);
int x = rc.Width(); // 클라이언트 영역의 폭
int y = rc.Height(); // 클라이언트 영역의 높이
pDC->StretchBlt(0, 0, x, y, &memDC,
0, 0, bm.bmWidth, bm.bmHeight, SRCINVERT);
memDC.SelectObject(pOldBit);
}
void CImageView::OnImageCenter()
{ // ID_IMAGE_CENTER로 정의된 메뉴 항목이나 툴바 버튼을 선택한 경우
m_Type = CENTER; // 비트맵을 중앙에 배치
Invalidate();
}
void CImageView::OnImageTile()
{ // ID_IMAGE_TILE로 정의된 메뉴 항목이나 툴바 버튼을 선택한 경우
m_Type = TILE; // 비트맵을 바둑판 모양으로 배치
Invalidate();
}
void CImageView::OnImageStretch()
{ // ID_IMAGE_STRETCH로 정의된 메뉴 항목이나 툴바 버튼을 선택한 경우
m_Type = STRETCH; // 비트맵을 클라이언트 영역 크기에 맞게 배치
Invalidate();
}
void CImageView::OnUpdateImageCenter(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_Type == CENTER);
}
void CImageView::OnUpdateImageTile(CCmdUI* pCmdUI)
{
pCmdUI->SetRadio(m_Type == TILE);
}
void CImageView::OnUpdateImageStretch(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_Type == STRETCH);
}
void CImageView::OnImageDesktop()
{
// NULL값을 지정하면 데스크탑(바탕화면)에
// 대한 DC가 얻어진다.
CClientDC dc(NULL);
CBitmap myBit, *pOldBit;
CDC memDC;
BITMAP bm;
myBit.LoadBitmap(IDB_DIRECTX);
myBit.GetObject(sizeof(BITMAP), &bm);
memDC.CreateCompatibleDC(&dc);
pOldBit = memDC.SelectObject(&myBit);
dc.BitBlt(20, 20, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBit);
}
[/code]
'Windows > MFC' 카테고리의 다른 글
Bible ADODB Connect (0) | 2013.10.02 |
---|---|
Wheel scrolling (0) | 2013.10.02 |
OnNcCreate 삼각,둥근 윈도우 (0) | 2013.10.02 |
SHAPE (0) | 2013.10.02 |
brush (0) | 2013.10.02 |