📄 whdxgraphic.cpp
字号:
D3DVECTOR vEyePt = D3DVECTOR(0, 0, -300.0f);
D3DVECTOR vLookatPt = D3DVECTOR(0, 0, 0);
D3DVECTOR vUpVec = D3DVECTOR(0, 1, 0);
D3DUtil_SetIdentityMatrix(matWorld);
D3DUtil_SetViewMatrix(matView, vEyePt, vLookatPt, vUpVec);
D3DUtil_SetProjectionMatrix(matProj, g_PI/2, float(600.0f/800.0f), -1.0f, 1.0f);
// MATRIAL狼 檬扁拳甫 汲沥茄促.
D3DMATERIAL7 mtrl;
ZeroMemory(&mtrl, sizeof(mtrl));
mtrl.diffuse.r = mtrl.diffuse.g = mtrl.diffuse.b = 0.1f;
mtrl.ambient.r = mtrl.ambient.g = mtrl.ambient.b = 1.0f;
m_pd3dDevice->SetMaterial(&mtrl);
if ( !m_pd3dDevice )
return E_FAIL;
m_pd3dDevice->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorld);
m_pd3dDevice->SetTransform(D3DTRANSFORMSTATE_VIEW, &matView);
m_pd3dDevice->SetTransform(D3DTRANSFORMSTATE_PROJECTION, &matProj);
// RenderState狼 檬扁蔼 汲沥.
m_pd3dDevice->SetRenderState(D3DRENDERSTATE_AMBIENT, 0xFFFFFFFF);
m_pd3dDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, FALSE);
m_pd3dDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE);
m_pd3dDevice->SetRenderState(D3DRENDERSTATE_ZENABLE, D3DZB_FALSE);
m_pd3dDevice->SetRenderState(D3DRENDERSTATE_FILLMODE, D3DFILL_SOLID);
// m_pd3dDevice->SetRenderState(D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME);
// m_pd3dDevice->SetRenderState(D3DRENDERSTATE_SHADEMODE, D3DSHADE_GOURAUD);
// TextureStageState狼 檬扁蔼 汲沥.
m_pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTFN_POINT);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTFG_POINT);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTFP_NONE);
return S_OK;
}
/******************************************************************************************************************
窃荐疙 : CWHDXGraphicWindow::CreateGameFont()
累己磊 :
累己老 :
格利 :
涝仿 : LPCSTR szFontName
INT nXsize
INT nYsize
BYTE bFontType
免仿 : VOID
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
HFONT CWHDXGraphicWindow::CreateGameFont(LPCSTR szFontName, INT nHeight, INT nWidth, INT nWeight, BOOL bItalic, BOOL bULine, BOOL bStrikeOut, DWORD dwCharSet)
{
INT nYsize;
// 迄飘农扁 嘎眠扁.
if ( m_pddsBackBuffer )
{
HDC hDC;
m_pddsBackBuffer->GetDC(&hDC);
nYsize = -MulDiv(nHeight, GetDeviceCaps(hDC, LOGPIXELSY), 72);
m_pddsBackBuffer->ReleaseDC(hDC);
}
return CreateFont(nYsize, nWidth, 0, 0, nWeight, bItalic, bULine, bStrikeOut, dwCharSet,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, szFontName);
}
VOID CWHDXGraphicWindow::CreateDefFont()
{
// 捞固 扁夯迄飘啊 积己登绢 乐栏搁 货肺 父甸荐 乐档废 Clear.
if ( m_hDefGameFont != NULL )
{
DeleteObject(m_hDefGameFont);
m_hDefGameFont = NULL;
}
m_hDefGameFont = CreateGameFont("奔覆", 9);
}
VOID CWHDXGraphicWindow::StringPlus(CHAR* szResult, CHAR* szSrc, ...)
{
INT nCnt = 0;
va_list vaMarker;
CHAR* pszString;
// ZeroMemory(szResult, strlen(szResult));
va_start(vaMarker, szSrc);
pszString = szSrc;
while ( TRUE )
{
strcpy(&szResult[strlen(szResult)], pszString);
if ( !strcmp(pszString, "") ) break;
pszString = (CHAR*)va_arg(vaMarker, CHAR*);
}
va_end(vaMarker);
}
CHAR* CWHDXGraphicWindow::IntToStr(INT nNum)
{
static CHAR szResult[MAX_PATH];
ZeroMemory(szResult, MAX_PATH);
_itoa(nNum, szResult, 10);
return szResult;
}
/******************************************************************************************************************
窃荐疙 : CWHDXGraphicWindow::PutsHan()
累己磊 :
累己老 :
格利 :
涝仿 : LPDIRECTDRAWSURFACE7 pSurface
INT nX
INT nY
COLORREF foreColor
COLORREF backColor
CHAR* szFormat
...
免仿 : VOID
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
VOID CWHDXGraphicWindow::PutsHan(LPDIRECTDRAWSURFACE7 pSurface, INT nX, INT nY, COLORREF foreColor, COLORREF backColor, CHAR* szText, HFONT hFont)
{
HDC hDC;
HFONT hOldFont;
if (NULL == pSurface)
pSurface = m_pddsBackBuffer;
if ( NULL == pSurface )
return;
if ( NULL == hFont )
hFont = m_hDefGameFont;
HRESULT hr = pSurface->GetDC(&hDC);
if (backColor == RGB( 0, 0, 0 )) SetBkMode(hDC, TRANSPARENT);
else SetBkColor(hDC, backColor);
hOldFont = (HFONT)SelectObject(hDC, hFont);
SetTextColor(hDC, foreColor);
TextOut(hDC, nX, nY, szText, strlen(szText));
SelectObject(hDC, hOldFont);
if ( hFont != m_hDefGameFont )
DeleteObject(hFont);
pSurface->ReleaseDC(hDC);
}
/******************************************************************************************************************
窃荐疙 : CWHDXGraphicWindow::PutsHan()
累己磊 :
累己老 :
格利 :
涝仿 : LPDIRECTDRAWSURFACE7 pSurface
INT nX
INT nY
COLORREF foreColor
COLORREF backColor
CHAR* szFormat
...
免仿 : VOID
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
VOID CWHDXGraphicWindow::PutsHan(LPDIRECTDRAWSURFACE7 pSurface, RECT rc, COLORREF foreColor, COLORREF backColor, CHAR* szText, HFONT hFont)
{
HDC hDC;
HFONT hOldFont;
if (NULL == pSurface)
pSurface = m_pddsBackBuffer;
if ( NULL == pSurface )
return;
if ( NULL == hFont )
hFont = m_hDefGameFont;
HRESULT hr = pSurface->GetDC(&hDC);
if (backColor == RGB( 0, 0, 0 )) SetBkMode(hDC, TRANSPARENT);
else SetBkColor(hDC, backColor);
hOldFont = (HFONT)SelectObject(hDC, hFont);
SetTextColor(hDC, foreColor);
DrawText(hDC, szText, -1, &rc, DT_CENTER|DT_SINGLELINE);
SelectObject(hDC, hOldFont);
if ( hFont != m_hDefGameFont )
DeleteObject(hFont);
pSurface->ReleaseDC(hDC);
}
SIZE CWHDXGraphicWindow::GetStrLength(LPDIRECTDRAWSURFACE7 pSurface, HFONT hFont, CHAR* szFormat, ...)
{
HDC hDC;
va_list arg;
CHAR szBuf[1024];
SIZE sSize;
sSize.cx = 0;
sSize.cy = 0;
HFONT hOldFont;
if ( NULL == pSurface )
pSurface = m_pddsBackBuffer;
if ( NULL == pSurface ) return sSize;
if ( NULL == hFont )
hFont = m_hDefGameFont;
HRESULT hr = pSurface->GetDC(&hDC);
va_start(arg, szFormat);
vsprintf(szBuf, szFormat, arg);
va_end(arg);
hOldFont = (HFONT)SelectObject(hDC, hFont);
GetTextExtentPoint32(hDC,szBuf,strlen(szBuf),&sSize);
SelectObject(hDC, hOldFont);
pSurface->ReleaseDC(hDC);
return sSize;
}
/*BOOL CWHDXGraphicWindow::StringDivideLen(INT nDivideLen, INT& nDividedLine, CHAR* szSrc,CDLList<CHAR*>* m_pxpStr)
{
CHAR szTmpCheck[MAX_PATH];
CHAR szResult[MAX_PATH];
nDividedLine = 1;
INT nStartLen = 0;
INT nEndLen = 0;
INT nResultLen = 0;
INT nWordCheck = 0;
if ( szSrc[0] != NULL )
{
ZeroMemory(szResult,MAX_PATH);
for ( INT nCnt = 0; nCnt < (INT)strlen(szSrc); nCnt++)
{
ZeroMemory(szTmpCheck, MAX_PATH);
nEndLen = nCnt+1;
// 泅犁何盒鳖瘤狼 巩磊凯阑 佬绰促.
memcpy(&szTmpCheck, &szSrc[nStartLen], nEndLen-nStartLen);
INT nsLen;
nsLen = strlen(szTmpCheck);
// 泅犁鳖瘤 佬绢柯 何盒捞 倾侩承捞甫 逞绢脊阑锭.
if (nsLen > nDivideLen )
{
// 泅犁 2官捞飘 巩磊扼搁.
if ( szSrc[nEndLen-1] < 0 )
{
// 泅犁 菊俊巩磊啊 2官捞飘 巩磊啊 酒聪扼搁
if ( !(nWordCheck%2) )
{
nStartLen += strlen(szTmpCheck)-1;
nCnt--;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen = 0;
nDividedLine++;
}
else
{
nStartLen += strlen(szTmpCheck)-2;
nCnt -= 2;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen];
memcpy(pszNewLine,szResult,nResultLen-1);
pszNewLine[nResultLen-1]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen = 0;
nDividedLine++;
nWordCheck--;
}
}
// 1官捞飘 巩磊.
// 泅犁焊促 茄官捞飘菊何盒鳖瘤父 绊妨秦林搁 等促.
else
{
nStartLen += strlen(szTmpCheck)-1;
nCnt--;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen=0;
nDividedLine++;
}
}
else if(szSrc[nEndLen-1]=='\n') // 碍力俺青 \n栏肺窍搁 Error ????
{
nStartLen += strlen(szTmpCheck)-1;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen=0;
nDividedLine++;
}
else
{
if ( szSrc[nEndLen-1] < 0 )
nWordCheck++;
szResult[nResultLen] = szSrc[nEndLen-1];
nResultLen++;
}
}
if(nResultLen!=0)
{
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nDividedLine++;
nResultLen=0;
}
return TRUE;
}
return FALSE;
}
*/
BOOL CWHDXGraphicWindow::StringDivide(INT nDivideWidth, INT& nDividedLine, CHAR* szSrc, CHAR* szResult)
{
CHAR szTmpCheck[MAX_PATH];
nDividedLine = 1;
INT nStartLen = 0;
INT nEndLen = 0;
INT nResultLen = 0;
INT nWordCheck = 0;
if ( szSrc[0] != NULL )
{
ZeroMemory(szResult, MAX_PATH);
for ( INT nCnt = 0; nCnt < (INT)strlen(szSrc); nCnt++)
{
ZeroMemory(szTmpCheck, MAX_PATH);
nEndLen = nCnt+1;
// 父距俊 臂磊农扁啊 弥措 臂磊农扁甫 逞绢啊搁 弥措摹肺 嘎苗霖促.
if ( nEndLen >= MAX_PATH )
{
szResult[MAX_PATH-1] = NULL;
break;
}
// 泅犁何盒鳖瘤狼 巩磊凯阑 佬绰促.
memcpy(&szTmpCheck, &szSrc[nStartLen], nEndLen-nStartLen);
SIZE sizeLen;
sizeLen = GetStrLength(NULL, NULL, szTmpCheck);
// 泅犁鳖瘤 佬绢柯 何盒捞 倾侩承捞甫 逞绢脊阑锭.
if ( sizeLen.cx > nDivideWidth )
{
// 泅犁 2官捞飘 巩磊扼搁.
if ( szSrc[nEndLen-1] < 0 )
{
// 泅犁 菊俊巩磊啊 2官捞飘 巩磊啊 酒聪扼搁
if ( !(nWordCheck%2) )
{
nStartLen += strlen(szTmpCheck)-1;
nCnt--;
szResult[nResultLen] = '`';
nResultLen++;
nDividedLine++;
}
else
{
nStartLen += strlen(szTmpCheck)-2;
nCnt -= 2;
szResult[nResultLen-1] = '`';
nDividedLine++;
nWordCheck--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -