📄 whdxgraphic.cpp
字号:
}
}
// 1官捞飘 巩磊.
// 泅犁焊促 茄官捞飘菊何盒鳖瘤父 绊妨秦林搁 等促.
else
{
nStartLen += strlen(szTmpCheck)-1;
nCnt--;
szResult[nResultLen] = '`';
nResultLen++;
nDividedLine++;
}
}
else
{
if ( szSrc[nEndLen-1] < 0 )
nWordCheck++;
szResult[nResultLen] = szSrc[nEndLen-1];
nResultLen++;
}
}
return TRUE;
}
return FALSE;
}
/******************************************************************************************************************
窃荐疙 : CWHDXGraphicWindow::GetRGBMaskInfoIN16Bits()
累己磊 :
累己老 :
格利 :
涝仿 : LPDIRECTDRAWSURFACE7 pSurface
免仿 : DXG_MASKINFO
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
DXG_MASKINFO CWHDXGraphicWindow::GetRGBMaskInfoIN16Bits(LPDIRECTDRAWSURFACE7 pSurface)
{
DDPIXELFORMAT ddpf;
DXG_MASKINFO stRGBMaskInfo;
ZeroMemory(&stRGBMaskInfo, sizeof(DXG_MASKINFO));
if ( pSurface == NULL ) pSurface = m_pddsBackBuffer;
if ( pSurface )
{
memset(&ddpf, 0, sizeof(ddpf));
ddpf.dwSize = sizeof(ddpf);
ddpf.dwFlags = DDPF_RGB;
pSurface->GetPixelFormat(&ddpf);
stRGBMaskInfo.dwRMask = ddpf.dwRBitMask;
stRGBMaskInfo.dwGMask = ddpf.dwGBitMask;
stRGBMaskInfo.dwBMask = ddpf.dwBBitMask;
DWORD dwCnt;
DWORD dwMask;
for ( dwCnt = 0, dwMask = ddpf.dwRBitMask; !( dwMask & 1 ); dwCnt++, dwMask >>= 1 );
stRGBMaskInfo.bRShift = (BYTE) dwCnt;
for ( dwCnt = 0; ( ( dwMask>>dwCnt ) & 1 ); dwCnt++ );
stRGBMaskInfo.bRCnt = (BYTE) dwCnt;
for ( dwCnt = 0, dwMask = ddpf.dwGBitMask; !( dwMask & 1 ); dwCnt++, dwMask >>= 1 );
stRGBMaskInfo.bGShift = (BYTE) dwCnt;
for ( dwCnt = 0; ( ( dwMask>>dwCnt ) & 1 ); dwCnt++ );
stRGBMaskInfo.bGCnt = (BYTE) dwCnt;
for ( dwCnt = 0, dwMask = ddpf.dwBBitMask; !( dwMask & 1 ); dwCnt++, dwMask >>= 1 );
stRGBMaskInfo.bBShift = (BYTE) dwCnt;
for ( dwCnt = 0; ( ( dwMask>>dwCnt ) & 1 ); dwCnt++ );
stRGBMaskInfo.bBCnt = (BYTE) dwCnt;
}
return stRGBMaskInfo;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 弊府绰 窃荐甸 葛澜.
WORD CWHDXGraphicWindow::ConvertColor24To16(COLORREF dwColor)
{
WORD wRet;
INT nRed = RGB_GETRED(dwColor);
INT nGreen = RGB_GETGREEN(dwColor);
INT nBlue = RGB_GETBLUE(dwColor);
nRed = (nRed*(1<<m_stBitsMaskInfo.bRCnt))/(1<<8);
nGreen = (nGreen*(1<<m_stBitsMaskInfo.bGCnt))/(1<<8);
nBlue = (nBlue*(1<<m_stBitsMaskInfo.bBCnt))/(1<<8);
wRet = (nRed << m_stBitsMaskInfo.bRShift) | (nGreen << m_stBitsMaskInfo.bGShift) | (nBlue << m_stBitsMaskInfo.bBShift);
return wRet;
}
/******************************************************************************************************************
窃荐疙 : CWHDXGraphicWindow::DrawWithGDI()
累己磊 :
累己老 :
格利 :
涝仿 : RECT rc
LPDIRECTDRAWSURFACE7 pSurface
DWORD dwColor
DWORD dwPenStyleFlg
BYTE bKind
免仿 : HRESULT
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
HRESULT CWHDXGraphicWindow::DrawWithGDI(RECT rc, LPDIRECTDRAWSURFACE7 pSurface, DWORD dwColor, BYTE bKind)
{
POINT pt;
HDC hDC;
HPEN hPen, hOldPen;
HBRUSH hBrush, hOldBrush;
HRESULT hr;
if ( pSurface == NULL )
{
pSurface = m_pddsBackBuffer;
}
if ( pSurface == NULL )
return E_FAIL;
if ( FAILED(hr = pSurface->GetDC(&hDC)) )
{
return E_FAIL;
}
switch ( bKind )
{
case 0:
{
hPen = CreatePen(PS_SOLID, NULL, dwColor);
hOldPen = (HPEN)SelectObject(hDC, hPen);
MoveToEx(hDC, rc.left, rc.top, &pt);
LineTo(hDC, rc.right, rc.bottom);
SelectObject(hDC, hOldPen);
DeleteObject(hPen);
}
break;
case 1:
{
hBrush = CreateSolidBrush(dwColor);
hOldBrush = (HBRUSH)SelectObject(hDC, hBrush);
FrameRect(hDC, &rc, hBrush);
SelectObject(hDC, hOldBrush);
DeleteObject(hBrush);
}
break;
case 2:
{
hBrush = CreateSolidBrush(dwColor);
hOldBrush = (HBRUSH)SelectObject(hDC, hBrush);
FillRect(hDC, &rc, hBrush);
SelectObject(hDC, hOldBrush);
DeleteObject(hBrush);
}
break;
default:
break;
}
pSurface->ReleaseDC(hDC);
return S_OK;
}
/******************************************************************************************************************
窃荐疙 : CWHDXGraphicWindow::DrawSprite()
累己磊 :
累己老 :
格利 : 老馆利牢 弊府扁. 茄侨伎究 弊赴促. 胶农赴康开 努府俏, 家胶康开 努府俏
涝仿 : INT nX
INT nY
INT nXSize
INT nYSize
WORD* pwSrc
免仿 : VOID
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
BOOL CWHDXGraphicWindow::DrawWithImage(INT nX, INT nY, INT nXSize, INT nYSize, WORD* pwSrc)
{
RECT rc;
DDSURFACEDESC2 ddsd;
INT nWidth = nXSize;
INT nHeight = nYSize;
INT nXOffset = 0;
INT nYOffset = 0;
INT nStartX = 0;
INT nStartY = 0;
INT nEndX = m_stDisplayInfo.wWidth -1;
INT nEndY = m_stDisplayInfo.wHeight-1;
if ( m_pddsBackBuffer != NULL )
{
if (nX < nStartX )
{
nXOffset = nStartX - nX;
nWidth = nXSize - nXOffset;
}
if ( (nX+nXSize-1) > nEndX )
nWidth = nEndX - nX - nXOffset + 1;
if ( nY < nStartY )
{
nYOffset = nStartY - nY;
nHeight = nYSize - nYOffset;
}
if ( (nY+nYSize-1) > nEndY )
nHeight = nEndY - nY - nYOffset + 1;
if ( (nWidth > 0) && (nHeight > 0) )
{
rc.left = nXOffset;
rc.right = nXOffset + nWidth;
rc.top = nYOffset;
rc.bottom = nYOffset + nHeight;
ddsd.dwSize = sizeof(DDSURFACEDESC2);
ddsd.lpSurface = NULL;
m_pddsBackBuffer->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
if ( !ddsd.lpSurface ) return FALSE;
WORD* pwdDst;
pwdDst = (WORD*)ddsd.lpSurface;
for ( INT y=rc.top ; y < rc.bottom ; y++ )
{
for ( INT x=rc.left ; x < rc.right ; x++ )
{
if ( pwSrc[y * nXSize + x] != 0 )
{
pwdDst[((y+nY) * (ddsd.lPitch >> 1)) + (nX+x)] = pwSrc[y * nXSize + x];
}
}
}
m_pddsBackBuffer->Unlock(NULL);
}
return TRUE;
}
return FALSE;
}
BOOL CWHDXGraphicWindow::DrawWithImagePerLineClipRgn(INT nX, INT nY, INT nXSize, INT nYSize, WORD* pwSrc, WORD wClipWidth, WORD wClipHeight)
{
RECT rc;
DDSURFACEDESC2 ddsd;
INT nWidth = nXSize;
INT nHeight = nYSize;
INT nXOffset = 0;
INT nYOffset = 0;
INT nStartX = 0;
INT nStartY = 0;
INT nEndX = wClipWidth - 1;
INT nEndY = wClipHeight - 1;
if ( m_pddsBackBuffer != NULL )
{
if (nX < nStartX )
{
nXOffset = nStartX - nX;
nWidth = nXSize - nXOffset;
}
if ( (nX+nXSize-1) > nEndX )
nWidth = nEndX - nX - nXOffset + 1;
if ( nY < nStartY )
{
nYOffset = nStartY - nY;
nHeight = nYSize - nYOffset;
}
if ( (nY+nYSize-1) > nEndY )
nHeight = nEndY - nY - nYOffset + 1;
if ( (nWidth > 0) && (nHeight > 0) )
{
rc.left = nXOffset;
rc.right = nXOffset + nWidth;
rc.top = nYOffset;
rc.bottom = nYOffset + nHeight;
ddsd.dwSize = sizeof(DDSURFACEDESC2);
ddsd.lpSurface = NULL;
m_pddsBackBuffer->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
if ( !ddsd.lpSurface ) return FALSE;
WORD* pwdDst;
pwdDst = (WORD*)ddsd.lpSurface;
for ( INT y=rc.top ; y < rc.bottom ; y++ )
{
memcpy(&pwdDst[((y+nY) * (ddsd.lPitch >> 1)) + (nX + rc.left)], &pwSrc[y * nXSize + rc.left], (rc.right-rc.left)*2);
}
m_pddsBackBuffer->Unlock(NULL);
}
return TRUE;
}
return FALSE;
}
/******************************************************************************************************************
窃荐疙 : CWHDXGraphicWindow::DrawWithSurface()
累己磊 :
累己老 :
格利 :
涝仿 : LPDIRECTDRAWSURFACE7 pddsSrc
RECT* prcSrc
RECT* prcDst
免仿 : BOOL
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
BOOL CWHDXGraphicWindow::DrawWithSurface(INT nX, INT nY, INT nXSize, INT nYSize, LPDIRECTDRAWSURFACE7 pddsSrc)
{
RECT rc;
RECT rcDst;
INT nXOffset = 0;
INT nYOffset = 0;
INT nWidth = nXSize;
INT nHeight = nYSize;
INT nStartX = 0;
INT nStartY = 0;
INT nEndX = m_stDisplayInfo.wWidth -1;
INT nEndY = m_stDisplayInfo.wHeight-1;;
if ( m_pddsBackBuffer != NULL )
{
if (nX < nStartX )
{
nXOffset = nStartX - nX;
nWidth = nXSize - nXOffset;
}
if ( (nX+nXSize-1) > nEndX )
nWidth = nEndX - nX - nXOffset + 1;
if ( nY < nStartY )
{
nYOffset = nStartY - nY;
nHeight = nYSize - nYOffset;
}
if ( (nY+nYSize-1) > nEndY )
nHeight = nEndY - nY - nYOffset + 1;
if ( (nWidth > 0) && (nHeight > 0) )
{
rc.left = nXOffset;
rc.right = nXOffset+nWidth;
rc.top = nYOffset;
rc.bottom = nYOffset+nHeight;
rcDst.left = rc.left+nX;
rcDst.top = rc.top+nY;
rcDst.right = rc.right+nX;
rcDst.bottom = rc.bottom+nY;
m_pddsBackBuffer->Blt(&rcDst, pddsSrc, &rc, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
}
return TRUE;
}
return FALSE;
}
BOOL CWHDXGraphicWindow::DrawWithImageForCompMemToMem(INT nX, INT nY, INT nXSize, INT nYSize, WORD* pwSrc, INT nDstXSize, INT nDstYSize, WORD* pwDst, WORD wChooseColor1, WORD wChooseColor2)
{
RECT rc;
INT nWidth = nXSize;
INT nHeight = nYSize;
INT nXOffset = 0;
INT nYOffset = 0;
INT nStartX = 0;
INT nStartY = 0;
INT nEndX = nDstXSize - 1;
INT nEndY = nDstYSize - 1;
if ( pwDst != NULL )
{
if (nX < nStartX )
{
nXOffset = nStartX - nX;
nWidth = nXSize - nXOffset;
}
if ( (nX+nXSize-1) > nEndX )
nWidth = nEndX - nX - nXOffset + 1;
if ( nY < nStartY ) {
nYOffset = nStartY - nY;
nHeight = nYSize - nYOffset;
}
if ( (nY+nYSize-1) > nEndY )
nHeight = nEndY - nY - nYOffset + 1;
if ( (nWidth > 0) && (nHeight > 0) )
{
rc.left = nXOffset;
rc.right = nXOffset+nWidth;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -