📄 mywnd.cpp
字号:
// MyWnd.cpp : 实现文件
//
#include "stdafx.h"
#include "MyWnd.h"
#include "picture.h"
#define POTHO_VIEW_RECT 126
#define INVA_DIS 10
#define LEFT_DIS 20
#define TOP_DOS 20
// CMyWnd
IMPLEMENT_DYNAMIC(CMyWnd, CStatic)
CMyWnd::CMyWnd()
{
m_bkColor = RGB(255, 255, 255);
m_textColor = RGB(100,100,255);
m_selIndex = -1;
m_nextLoad = 0;
InitpicInfo();
}
CMyWnd::~CMyWnd()
{
if(m_compDC.GetSafeHdc() != NULL)
{
m_compDC.DeleteDC();
}
if(m_bkDC.GetSafeHdc() != NULL)
{
m_bkDC.DeleteDC();
}
if(m_selPicDC.GetSafeHdc() != NULL)
{
m_selPicDC.DeleteDC();
}
pic.Free();
}
void CMyWnd ::InitpicInfo()
{
for(int i = 0; i< MAX_RECT; ++i)
{
m_picInfos[i].filePath.Empty();
m_picInfos[i].IsLoaded = FALSE;
}
}
BOOL CMyWnd::Create(DWORD style, const RECT& rect, CWnd* pParentWnd, UINT ID)
{
BOOL Result;
Result = CStatic::Create(NULL, style, rect, pParentWnd, ID);
GetClientRect(m_Rect);
CPaintDC dc(this);
if(m_bkDC.GetSafeHdc() == NULL)
{
m_bkDC.CreateCompatibleDC(&dc);
m_bkBitmap.CreateCompatibleBitmap(&dc, m_Rect.Width(), m_Rect.Height());
m_bkDC.SelectObject(&m_bkBitmap);
}
if(m_compDC.GetSafeHdc() == NULL)
{
m_compDC.CreateCompatibleDC(&dc);
m_compBitmap.CreateCompatibleBitmap(&dc, m_Rect.Width(), m_Rect.Height());
m_compDC.SelectObject(&m_compBitmap);
}
if(m_selPicDC.GetSafeHdc() == NULL)
{
m_selPicDC.CreateCompatibleDC(&dc);
m_selpicBitmap.CreateCompatibleBitmap(&dc, POTHO_VIEW_RECT, POTHO_VIEW_RECT);
m_selPicDC.SelectObject(&m_selpicBitmap);
}
DrawBK();
m_compDC.BitBlt(0,0,m_Rect.Width(), m_Rect.Height(), &m_bkDC, 0,0, SRCCOPY);
Invalidate();
return Result;
}
BEGIN_MESSAGE_MAP(CMyWnd, CStatic)
ON_WM_PAINT()
END_MESSAGE_MAP()
/*
void CMyWnd::SetBkColor(COLORREF bkColor, COLORREF TextColor)
{
m_bkColor = bkColor;
m_textColor = TextColor;
DrawBK();
m_compDC.BitBlt(0,0,m_Rect.Width(), m_Rect.Height(), &m_bkDC, 0,0, SRCCOPY);
Invalidate();
}
*/
// CMyWnd 消息处理程序
void CMyWnd::DrawBK()
{
m_bkDC.FillSolidRect(&m_Rect, m_bkColor);
CPen pen, *oldPen;
pen.CreateStockObject(BLACK_PEN);
oldPen = m_bkDC.SelectObject(&pen);
for(int i = 0; i < 4 ; ++i)
{
for(int j = 0; j < 2; ++j)
{
int x = LEFT_DIS + j*(POTHO_VIEW_RECT + 40);
int y = TOP_DOS + i*(POTHO_VIEW_RECT + INVA_DIS);
m_bkDC.MoveTo(x, y);
m_bkDC.LineTo(x + POTHO_VIEW_RECT, y);
m_bkDC.LineTo(x + POTHO_VIEW_RECT, y + POTHO_VIEW_RECT);
m_bkDC.LineTo(x, y + POTHO_VIEW_RECT);
m_bkDC.LineTo(x, y);
m_picRects[j + i*2] = CRect(CPoint(x, y), CSize(POTHO_VIEW_RECT, POTHO_VIEW_RECT));
}
}
m_bkDC.SelectObject(oldPen);
pen.DeleteObject();
}
void CMyWnd::UpdateText(int num,int maxnum)
{
m_strText.Format(_T("第%d页/共%d页"), num,maxnum);
DrawNumText(m_strText);
}
void CMyWnd::DrawNumText(CString& numString)
{
CFont font;
//font.CreateFont(50, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Arial");
VERIFY(font.CreateFont(
20, // nHeight
8, // nWidth
0, // nEscapement
0, // nOrientation
FW_BOLD, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
"Arial")); // lpszFacename
//m_compDC.BitBlt(0,0,m_Rect.Width(), m_Rect.Height(), &m_bkDC, 0,0, SRCCOPY);
m_compDC.SetBkColor(m_bkColor);
m_compDC.SetTextColor(m_textColor);
m_compDC.SelectObject(&font);
CSize strSize = m_compDC.GetTextExtent(numString);
m_compDC.TextOut((m_Rect.Width() - strSize.cx)/2,0, numString);
//m_compDC.TextOut(45,240, CString("98"));
font.DeleteObject();
Invalidate();
}
void CMyWnd::LButtonUp(CPoint& point)
{
TRACE("single!\n");
for(int i = 0; i < MAX_RECT; ++i)
{
if((m_picRects[i].PtInRect(point)) && (m_picInfos[i].IsLoaded)&&(m_selIndex != i))
{
m_selIndex = i;
Invalidate();
break;
}
}
}
CString CMyWnd::LButtonDblClk(CPoint& point)
{
TRACE("double!\n");
CString picPath;
for(int i = 0; i < MAX_RECT; ++i)
{
if((m_picRects[i].PtInRect(point)) && (m_picInfos[i].IsLoaded))
{
m_selIndex = i;
picPath = m_picInfos[i].filePath;
break;
}
}
return picPath;
}
void CMyWnd::LoadPic(const CString& strPath)
{
n=1;
InitpicInfo();
m_selIndex = -1;
findFile.Free();
m_compDC.BitBlt(0, 0, m_Rect.Width(), m_Rect.Height(), &m_bkDC, 0,0, SRCCOPY);
m_strPicPath = strPath;
findFile.SearchFiles(m_strPicPath, _T("*.jpg"));
CString strname;
int maxFile = findFile.GetSize() > MAX_RECT? MAX_RECT: findFile.GetSize();
for(int i = 0; i < maxFile; ++i)
{
strname = strPath + "\\" +findFile.GetAt(i);
if(!pic.Load(strname))
continue;
pic.Render(&m_selPicDC, CRect(0, 0, POTHO_VIEW_RECT- 1, POTHO_VIEW_RECT -1));
m_compDC.BitBlt(m_picRects[i].left,m_picRects[i].top ,
POTHO_VIEW_RECT, POTHO_VIEW_RECT, &m_selPicDC, 0,0, SRCCOPY);
m_picInfos[i].filePath = strname;
m_picInfos[i].IsLoaded = TRUE;
}
m_nextLoad = maxFile;
pic.Free();
UpdateText(n,findFile.GetSize()%MAX_RECT==0?findFile.GetSize()/MAX_RECT:findFile.GetSize()/MAX_RECT+1);
Invalidate();
}
void CMyWnd::OnBTDown()
{
if(m_nextLoad >= MAX_RECT && m_nextLoad < findFile.GetSize())
{
CString strname;
InitpicInfo();
if(findFile.GetSize() - m_nextLoad == 0)
return;
m_compDC.BitBlt(0, 0, m_Rect.Width(), m_Rect.Height(), &m_bkDC, 0,0, SRCCOPY);
int maxNum = findFile.GetSize() - m_nextLoad > MAX_RECT ? MAX_RECT : findFile.GetSize() - m_nextLoad;
for(int i = 0; i < maxNum; ++i)
{
strname = m_strPicPath + "\\" +findFile.GetAt(i + m_nextLoad);
if(!pic.Load(strname))
{
continue;
}
pic.Render(&m_selPicDC, CRect(0, 0, POTHO_VIEW_RECT- 1, POTHO_VIEW_RECT -1));
m_compDC.BitBlt(m_picRects[i].left,m_picRects[i].top ,
POTHO_VIEW_RECT, POTHO_VIEW_RECT, &m_selPicDC, 0,0, SRCCOPY);
m_picInfos[i].filePath = strname;
m_picInfos[i].IsLoaded = TRUE;
}
n++;
m_nextLoad += maxNum;
UpdateText(n,findFile.GetSize()%MAX_RECT==0?findFile.GetSize()/MAX_RECT:findFile.GetSize()/MAX_RECT+1);
Invalidate();
}
}
void CMyWnd::OnBTUp()
{
if(m_nextLoad > MAX_RECT)
{
CString strname;
InitpicInfo();
m_compDC.BitBlt(0, 0, m_Rect.Width(), m_Rect.Height(), &m_bkDC, 0,0, SRCCOPY);
int shang;
int yushu = m_nextLoad % MAX_RECT;
if(yushu == 0)
shang = m_nextLoad / MAX_RECT - 2;
else
shang = m_nextLoad / MAX_RECT - 1;
for(int i = 0; i < MAX_RECT; ++i)
{
strname = m_strPicPath + "\\" +findFile.GetAt(i +shang*MAX_RECT);
pic.Load(strname);
pic.Render(&m_selPicDC, CRect(0, 0, POTHO_VIEW_RECT- 1, POTHO_VIEW_RECT -1));
m_compDC.BitBlt(m_picRects[i].left,m_picRects[i].top ,
POTHO_VIEW_RECT, POTHO_VIEW_RECT, &m_selPicDC, 0,0, SRCCOPY);
m_picInfos[i].filePath = strname;
m_picInfos[i].IsLoaded = TRUE;
}n--;
if(yushu != 0)
m_nextLoad -= yushu;
else
m_nextLoad -= MAX_RECT;
UpdateText(n,findFile.GetSize()%MAX_RECT==0?findFile.GetSize()/MAX_RECT:findFile.GetSize()/MAX_RECT+1);
Invalidate();
}
}
void CMyWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CStatic::OnPaint()
dc.BitBlt(0, 0, m_Rect.Width(), m_Rect.Height(), &m_compDC, 0, 0, SRCCOPY);
if(m_selIndex != -1)
{
CPen pen, *oldPen;
pen.CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
oldPen = dc.SelectObject(&pen);
dc.MoveTo(m_picRects[m_selIndex].left, m_picRects[m_selIndex].top);
dc.LineTo(m_picRects[m_selIndex].left + POTHO_VIEW_RECT, m_picRects[m_selIndex].top);
dc.LineTo(m_picRects[m_selIndex].left + POTHO_VIEW_RECT, m_picRects[m_selIndex].top + POTHO_VIEW_RECT);
dc.LineTo(m_picRects[m_selIndex].left, m_picRects[m_selIndex].top + POTHO_VIEW_RECT);
dc.LineTo(m_picRects[m_selIndex].left, m_picRects[m_selIndex].top);
dc.SelectObject(oldPen);
pen.DeleteObject();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -