📄 creditsthread.cpp
字号:
m_dcCredits.SetBkColor(MASK_RGB);
m_dcCredits.SelectObject(pOldFont);
// create the mask bitmap
m_dcMask.CreateCompatibleDC(&m_dcScreen);
m_bmpMask.CreateBitmap(m_nCreditsBmpWidth, m_nCreditsBmpHeight, 1, 1, NULL);
// select the mask bitmap into the appropriate dc
m_pbmpOldMask = m_dcMask.SelectObject(&m_bmpMask);
// build mask based on transparent color
m_dcMask.BitBlt(0, 0, m_nCreditsBmpWidth, m_nCreditsBmpHeight, &m_dcCredits, 0, 0, SRCCOPY);
}
void CCreditsThread::InitFonts()
{
// create each font we'll need and add it to the fonts array
CDC dcMem;
dcMem.CreateCompatibleDC(&m_dc);
CFont* pOldFont;
int nTextHeight;
LOGFONT lf;
// font 0
// SMALL ARIAL
CFont* font0 = new CFont;
memset((void*)&lf, 0, sizeof(lf));
lf.lfHeight = 12;
lf.lfWeight = 500;
lf.lfQuality = NONANTIALIASED_QUALITY;
_tcscpy(lf.lfFaceName, _T("Arial"));
font0->CreateFontIndirect(&lf);
m_arFonts.Add(font0);
pOldFont = dcMem.SelectObject(font0);
nTextHeight = dcMem.GetTextExtent(_T("Wy")).cy;
m_arFontHeights.Add(nTextHeight);
// font 1
// MEDIUM BOLD ARIAL
CFont* font1 = new CFont;
memset((void*)&lf, 0, sizeof(lf));
lf.lfHeight = 14;
lf.lfWeight = 600;
lf.lfQuality = NONANTIALIASED_QUALITY;
_tcscpy(lf.lfFaceName, _T("Arial"));
font1->CreateFontIndirect(&lf);
m_arFonts.Add(font1);
dcMem.SelectObject(font1);
nTextHeight = dcMem.GetTextExtent(_T("Wy")).cy;
m_arFontHeights.Add(nTextHeight);
// font 2
// LARGE ITALIC HEAVY BOLD TIMES ROMAN
CFont* font2 = new CFont;
memset((void*)&lf, 0, sizeof(lf));
lf.lfHeight = 16;
lf.lfWeight = 700;
//lf.lfItalic = TRUE;
lf.lfQuality = afxData.bWin95 ? NONANTIALIASED_QUALITY : ANTIALIASED_QUALITY;
_tcscpy(lf.lfFaceName, _T("Arial"));
font2->CreateFontIndirect(&lf);
m_arFonts.Add(font2);
dcMem.SelectObject(font2);
nTextHeight = dcMem.GetTextExtent(_T("Wy")).cy;
m_arFontHeights.Add(nTextHeight);
// font 3
CFont* font3 = new CFont;
memset((void*)&lf, 0, sizeof(lf));
lf.lfHeight = 25;
lf.lfWeight = 900;
lf.lfQuality = afxData.bWin95 ? NONANTIALIASED_QUALITY : ANTIALIASED_QUALITY;
_tcscpy(lf.lfFaceName, _T("Arial"));
font3->CreateFontIndirect(&lf);
m_arFonts.Add(font3);
dcMem.SelectObject(font3);
nTextHeight = dcMem.GetTextExtent(_T("Wy")).cy;
m_arFontHeights.Add(nTextHeight);
dcMem.SelectObject(pOldFont);
}
void CCreditsThread::InitColors()
{
// define each color we'll be using
m_arColors.Add(PALETTERGB(0, 0, 0)); // 0 = BLACK
m_arColors.Add(PALETTERGB(90, 90, 90)); // 1 = very dark gray
m_arColors.Add(PALETTERGB(128, 128, 128)); // 2 = DARK GRAY
m_arColors.Add(PALETTERGB(192, 192, 192)); // 3 = LIGHT GRAY
m_arColors.Add(PALETTERGB(200, 50, 50)); // 4 = very light gray
m_arColors.Add(PALETTERGB(255, 255, 128)); // 5 white
m_arColors.Add(PALETTERGB(0, 0, 128)); // 6 dark blue
m_arColors.Add(PALETTERGB(128, 128, 255)); // 7 light blue
m_arColors.Add(PALETTERGB(0, 106, 0)); // 8 dark green
}
void CCreditsThread::InitText()
{
// 1st pair of digits identifies the font to use
// 2nd pair of digits identifies the color to use
// B = Bitmap
// S = Space (moves down the specified number of pixels)
CString sTmp;
/*
You may NOT modify this copyright message. You may add your name, if you
changed or improved this code, but you mot not delete any part of this message,
make it invisible etc.
*/
// start at the bottom of the screen
sTmp.Format(_T("S:%d"), m_rectScreen.Height());
m_arCredits.Add(sTmp);
m_arCredits.Add(_T("03:00:eMule"));
sTmp.Format(_T("02:01:Version %s"),theApp.m_strCurVersionLong);
#ifdef _UNICODE
sTmp += _T(" Unicode");
#endif
m_arCredits.Add(sTmp);
m_arCredits.Add(_T("01:06:Copyright (C) 2002-2004 Merkur"));
m_arCredits.Add(_T("S:50"));
m_arCredits.Add(_T("02:04:Developers"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Unknown1"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Ornis"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Bluecow"));
m_arCredits.Add(_T("S:50"));
m_arCredits.Add(_T("02:04:Tester"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Sony666"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Monk"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Myxin"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("S:50"));
m_arCredits.Add(_T("02:04:Retired Members"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Merkur (the Founder)"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:tecxx"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Pach2"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Juanjo"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Barry"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Dirus"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("S:50"));
m_arCredits.Add(_T("02:04:Thanks to these programmers"));
m_arCredits.Add(_T("02:04:for publishing useful codeparts"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Paolo Messina (ResizableDialog class)"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:6:PJ Naughter (HttpDownload Dialog)"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Jim Connor (Scrolling Credits)"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Yury Goltsman (extended Progressbar)"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Magomed G. Abdurakhmanov (Hyperlink ctrl)"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Arthur Westerman (Titled menu)"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Tim Kosse (AsyncSocket-Proxysupport)"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:Keith Rule (Memory DC)"));
m_arCredits.Add(_T("S:50"));
m_arCredits.Add(_T("02:07:And thanks to the following"));
m_arCredits.Add(_T("02:07:people for translating eMule"));
m_arCredits.Add(_T("02:07:into different languages:"));
m_arCredits.Add(_T("S:20"));
m_arCredits.Add(_T("01:06:Bulgarian: DapKo"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Catalan: LeChuck"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Chinese simplyfied: Tim Chen, Qilu T."));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Chinese Traditional: CML, Donlong, Ryan"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Czech: Patejl"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Danish: Tiede, Cirrus, Itchy"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Estonian: Symbio"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Dutch: Mr.Bean"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Finnish: Nikerabbit"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:French: Emzc, Lalrobin"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Galician: Juan, Emilio R."));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Greek: Michael Papadakis"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Italian: Trevi, FrankyFive"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Japanese: Shinro T."));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Hebrew: Avi-3k"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Hungarian: r0ll3r"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Korean: pooz"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Latvian: Ai"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Lithuanian: Daan"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Norwegian: Iznogood"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Polish: Tomasz \"TMouse\" Broniarek"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Portugese: Filipe, Lu韘 Claro"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Portugese Brasilian: DarthMaul,Brasco"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Romanian: Dragos"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Russian: T-Mac, BRMAIL"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Slowenian: Rok Kralj"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Spanish Castellano: Azuredraco, Javier L., |_Hell_|"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Swedish: Andre"));
m_arCredits.Add(_T("S:05"));
m_arCredits.Add(_T("01:06:Turkish: Burak Y."));
m_arCredits.Add(_T("S:50"));
m_arCredits.Add(_T("02:04:Part of eMule is based on Kademlia:"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("02:04:Peer-to-peer routing based on the XOR metric."));
m_arCredits.Add(_T("S:10"));
m_arCredits.Add(_T("01:06:Copyright (C) 2002 Petar Maymounkov"));
m_arCredits.Add(_T("S:5"));
m_arCredits.Add(_T("01:06:http://kademlia.scs.cs.nyu.edu"));
// pause before repeating
m_arCredits.Add(_T("S:100"));
}
int CCreditsThread::CalcCreditsHeight()
{
int nHeight = 0;
for(int n = 0; n < m_arCredits.GetSize(); n++)
{
CString sType = m_arCredits.GetAt(n).Left(1);
if(sType == 'B')
{
// it's a bitmap
CBitmap bmp;
if (! bmp.LoadBitmap(m_arCredits.GetAt(n).Mid(2)))
{
CString str;
str.Format(_T("Could not find bitmap resource \"%s\". Be sure to assign the bitmap a QUOTED resource name"), m_arCredits.GetAt(n).Mid(2));
AfxMessageBox(str);
return -1;
}
BITMAP bmInfo;
bmp.GetBitmap(&bmInfo);
nHeight += bmInfo.bmHeight;
}
else if(sType == 'S')
{
// it's a vertical space
nHeight += _ttoi(m_arCredits.GetAt(n).Mid(2));
}
else
{
// it's a text string
int nFont = _ttoi(m_arCredits.GetAt(n).Left(2));
nHeight += m_arFontHeights.GetAt(nFont);
}
}
return nHeight;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -