128 lines
4.5 KiB
C++
128 lines
4.5 KiB
C++
// logomdi.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "logomdi.h"
|
|
#include "demo.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// CLogoMdi
|
|
CLogoMdi::CLogoMdi() : m_sizeClient(0,0)
|
|
{
|
|
m_LogoFont.CreateFont(36, 0, 0, 0, FW_BOLD, 1, FALSE, FALSE,
|
|
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
|
|
FIXED_PITCH | FF_ROMAN, "Times New Roman");
|
|
|
|
sLogoString = "CxImage ";
|
|
|
|
/* //BITMAP background
|
|
HBITMAP bitmap;
|
|
if (bitmap = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1))){
|
|
bgImage = new CxImage((HBITMAP)bitmap);
|
|
} else {
|
|
bgImage = NULL;
|
|
}*/
|
|
|
|
//JPEG background
|
|
bgImage = new CxImage();
|
|
if (!bgImage->LoadResource(FindResource(NULL,"IDR_JPG1","JPG"),CXIMAGE_FORMAT_JPG)){
|
|
delete bgImage;
|
|
bgImage =NULL;
|
|
}
|
|
if (bgImage) {
|
|
COLORREF rgb=GetSysColor(COLOR_APPWORKSPACE);
|
|
RGBQUAD hsl=bgImage->RGBtoHSL(bgImage->RGBtoRGBQUAD(rgb));
|
|
bgImage->Colorize(hsl.rgbRed,min(hsl.rgbGreen,100));
|
|
}
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
CLogoMdi::~CLogoMdi()
|
|
{
|
|
m_LogoFont.DeleteObject();
|
|
delete bgImage;
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BEGIN_MESSAGE_MAP(CLogoMdi, CWnd)
|
|
//{{AFX_MSG_MAP(CLogoMdi)
|
|
ON_WM_ERASEBKGND()
|
|
ON_WM_SIZE()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// CLogoMdi message handlers
|
|
BOOL CLogoMdi::OnEraseBkgnd(CDC* pDC)
|
|
{
|
|
// This is where the real work is done printing the logo in the corner..
|
|
|
|
RECT rect,m_rDataBox;
|
|
GetClientRect(&rect);
|
|
CopyRect(&m_rDataBox,&rect);
|
|
|
|
if (bgImage==NULL){
|
|
CBrush NewBrush(GetSysColor(COLOR_DESKTOP)) ;
|
|
pDC->SetBrushOrg(0,0) ;
|
|
CBrush* pOldBrush = (CBrush*)pDC->SelectObject(&NewBrush);
|
|
pDC->PatBlt(rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top ,PATCOPY);
|
|
pDC->SelectObject(pOldBrush);
|
|
} else {
|
|
bgImage->Tile(pDC->GetSafeHdc(),&rect);
|
|
}
|
|
|
|
TEXTMETRIC tm;
|
|
pDC->GetTextMetrics(&tm);
|
|
CFont* oldFont = pDC->SelectObject(&m_LogoFont);
|
|
CSize sz = pDC->GetTextExtent(sLogoString, sLogoString.GetLength());
|
|
// GetTextExtent calculates the size of the displayed logo
|
|
// which depends on the device context....
|
|
// Calculate the box size by subtracting the text width and height from the
|
|
// window size. Also subtract 20% of the average character size to keep the
|
|
// logo from printing into the borders...
|
|
m_rDataBox.left = m_rDataBox.right - sz.cx - tm.tmAveCharWidth/2;
|
|
m_rDataBox.top = m_rDataBox.bottom - sz.cy - tm.tmHeight/5;
|
|
pDC->SetBkMode(TRANSPARENT);
|
|
// shift logo box right, and print black...
|
|
COLORREF oldColor = pDC->SetTextColor(RGB(0,0,0));
|
|
pDC->DrawText(sLogoString, sLogoString.GetLength(), &m_rDataBox, DT_VCENTER | DT_SINGLELINE | DT_CENTER);
|
|
// shift logo box left and print white
|
|
m_rDataBox.left -= 3*tm.tmAveCharWidth/5;
|
|
pDC->SetTextColor(RGB(255,255,255));
|
|
pDC->DrawText(sLogoString, sLogoString.GetLength(), &m_rDataBox, DT_VCENTER | DT_SINGLELINE | DT_CENTER);
|
|
// Restore original location and print in the button face color
|
|
m_rDataBox.left += tm.tmAveCharWidth/5;
|
|
pDC->SetTextColor(GetSysColor(COLOR_BTNFACE));
|
|
pDC->DrawText(sLogoString, sLogoString.GetLength(), &m_rDataBox, DT_VCENTER | DT_SINGLELINE | DT_CENTER);
|
|
// restore the original properties and release resources...
|
|
pDC->SelectObject(oldFont);
|
|
pDC->SetTextColor(oldColor);
|
|
|
|
return TRUE;
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void CLogoMdi::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
Default() ; // Same as DefWindowProc(), or CWnd::OnSize();
|
|
// if the app is just starting up, save the window
|
|
// dimensions and get out
|
|
if ((m_sizeClient.cx == 0) && (m_sizeClient.cy==0)) {
|
|
m_sizeClient.cx = cx;
|
|
m_sizeClient.cy = cy;
|
|
return ;
|
|
}
|
|
// if the size hasn't changed, break and pass to default
|
|
if ((m_sizeClient.cx == cx) && ( m_sizeClient.cy == cy))
|
|
return ;
|
|
// window size has changed so save new dimensions and force
|
|
// entire background to redraw, including icon backgrounds
|
|
m_sizeClient.cx = cx;
|
|
m_sizeClient.cy = cy;
|
|
RedrawWindow(NULL,NULL,RDW_INVALIDATE|RDW_ERASE|RDW_ERASENOW|RDW_ALLCHILDREN);
|
|
return ;
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////////
|