📄 misc.cpp
字号:
// Misc.cpp: implementation of the CMisc class.
//
//////////////////////////////////////////////////////////////////////
#include "Misc.h"
#include "GlobalDef.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMisc::CMisc()
{
}
CMisc::~CMisc()
{
}
char CMisc::cGetNextMoveDir(short sX, short sY, short dX, short dY)
{
short absX, absY;
char cRet = 0;
absX = sX - dX;
absY = sY - dY;
if ((absX == 0) && (absY == 0)) cRet = 0;
if (absX == 0) {
if (absY > 0) cRet = 1;
if (absY < 0) cRet = 5;
}
if (absY == 0) {
if (absX > 0) cRet = 7;
if (absX < 0) cRet = 3;
}
if ( (absX > 0) && (absY > 0) ) cRet = 8;
if ( (absX < 0) && (absY > 0) ) cRet = 2;
if ( (absX > 0) && (absY < 0) ) cRet = 6;
if ( (absX < 0) && (absY < 0) ) cRet = 4;
return cRet;
}
void CMisc::GetPoint(int x0, int y0, int x1, int y1, int * pX, int * pY, int * pError, int iCount)
{
int dx, dy, x_inc, y_inc, error, index;
int iResultX, iResultY, iCnt = 0;
if ((x0 == x1) && (y0 == y1)) {
*pX = x0;
*pY = y0;
return;
}
error = *pError;
iResultX = x0;
iResultY = y0;
dx = x1-x0;
dy = y1-y0;
if(dx>=0) x_inc = 1;
else {
x_inc = -1;
dx = -dx;
}
if(dy>=0) y_inc = 1;
else {
y_inc = -1;
dy = -dy;
}
if(dx>dy)
{
for(index = 0; index <= dx; index++)
{
error += dy;
if(error > dx)
{
error -= dx;
iResultY += y_inc;
}
iResultX += x_inc;
iCnt++;
if (iCnt >= iCount) break;
}
}
else
{
for(index = 0; index <= dy; index++)
{
error += dx;
if(error > dy)
{
error -= dy;
iResultX += x_inc;
}
iResultY += y_inc;
iCnt++;
if (iCnt >= iCount) break;
}
}
*pX = iResultX;
*pY = iResultY;
*pError = error;
}
void CMisc::GetDirPoint(char cDir, int * pX, int * pY)
{
switch(cDir) {
case 1: *pY--; break;
case 2: *pY--; *pX++; break;
case 3: *pX++; break;
case 4: *pX++; *pY++; break;
case 5: *pY++; break;
case 6: *pX--; *pY++; break;
case 7: *pX--; break;
case 8: *pX--; *pY--; break;
}
}
BOOL CMisc::bCheckValidString(char * str)
{
int len = strlen(str);
for (int i = 0; i < len; i++)
{
if(str[i] == ' ') return FALSE;
}
return TRUE;
}
BOOL CMisc::bCheckIMEString(char * str)
{
int len = strlen(str);
for (int i = 0; i < len; i++)
{
if(str[i] < 0) return FALSE;
}
return TRUE;
}
void CMisc::ReplaceString(char * pStr, char cFrom, char cTo)
{
int len = strlen(pStr);
for (int i = 0; i < len; i++)
{
if (pStr[i] == cFrom) pStr[i] = cTo;
}
}
char CMisc::cCalcDirection(short sX, short sY, short dX, short dY)
{
double dTmp1, dTmp2, dTmp3;
// short x,y;
// double r;
if ((sX == dX) && (sY == dY)) return 1;
if ((sX == dX) && (sY != dY)) {
if (sY > dY) return 1;
else return 5;
}
if ((sX != dX) && (sY == dY)) {
if (sX > dX) return 7;
else return 3;
}
dTmp1 = (double)(dX - sX);
dTmp2 = (double)(dY - sY);
dTmp3 = dTmp1 / dTmp2;
if (dTmp3 < -3) {
if (sX > dX) return 7;
else return 3;
}
if (dTmp3 > 3) {
if (sX > dX) return 7;
else return 3;
}
if ((dTmp3 > -0.3333f) && (dTmp3 <= 0.3333f)) {
if (sY > dY) return 1;
else return 5;
}
if ((dTmp3 > 0.3333f) && (dTmp3 <= 3.0f)) {
if (sX > dX) return 8;
else return 4;
}
if ((dTmp3 >= -0.3333f) && (dTmp3 < 3.0f)) {
if (sX > dX) return 7;
else return 3;
}
if ((dTmp3 >= -3.0f) && (dTmp3 < -0.3333f)) {
if (sX > dX) return 6;
else return 2;
}
return 1;
}
void CMisc::ColorTransfer(char cPixelFormat, COLORREF fcolor, WORD * wR, WORD * wG, WORD * wB)
{
WORD result = 0x0000;
switch(cPixelFormat)
{
case 1:
// R
result = result|(WORD)((fcolor&0x000000f8)<<8);
// G
result = result|(WORD)((fcolor&0x0000fc00)>>5);
// B
result = result|(WORD)((fcolor&0x00f80000)>>19);
break;
case 2:
// R
result = result|(WORD)((fcolor&0x000000f8)<<7);
// G
result = result|(WORD)((fcolor&0x0000f800)>>6);
// B
result = result|(WORD)((fcolor&0x00f80000)>>19);
break;
}
switch(cPixelFormat) {
case 1:
*wR = (result&0xF800) >> 11;
*wG = (result&0x7E0) >> 5;
*wB = (result&0x1F);
break;
case 2:
*wR = (result&0x7C00) >> 10;
*wG = (result&0x3E0) >> 5;
*wB = (result&0x1F);
break;
}
}
BOOL CMisc::bEncode(char cKey, char *pStr)
{
int iLen = strlen(pStr);
for (int i = 0; i <= iLen-1; i++)
{
pStr[i] += i;
pStr[i] = pStr[i] ^ (cKey ^ (iLen - i));
}
return TRUE;
}
BOOL CMisc::bDecode(char cKey, char *pStr)
{
int iLen = strlen(pStr);
for (int i = 0; i <= iLen-1; i++)
{
pStr[i] = pStr[i] ^ (cKey ^ (iLen - i));
pStr[i] -= i;
}
return TRUE;
}
#if DEF_LANGUAGE == 3
BOOL CMisc::bCheckValidName(char *pStr)
{
int i, iLen;
iLen = strlen(pStr);
for (i = 0; i < iLen; i++) {
// 漂荐 巩磊啊 甸绢啊 乐绰 版快 芭何
if ( (pStr[i] == ',') || (pStr[i] == '=') || (pStr[i] == ' ') || (pStr[i] == '\n') ||
(pStr[i] == '\t') || (pStr[i] == '.') || (pStr[i] == '\\') || (pStr[i] == '/') ||
(pStr[i] == ':') || (pStr[i] == '*') || (pStr[i] == '?') || (pStr[i] == '<') ||
(pStr[i] == '>') || (pStr[i] == '|') || (pStr[i] == '"') || (pStr[i] == '`') ) return FALSE;
if ((i <= iLen-2) && ((unsigned char)pStr[i] >= 128)) {
if (((unsigned char)pStr[i] == 164) && ((unsigned char)pStr[i+1] >= 161) &&
((unsigned char)pStr[i+1] <= 211)) {
// 利钦
}
else
if (((unsigned char)pStr[i] >= 176) && ((unsigned char)pStr[i] <= 200) &&
((unsigned char)pStr[i+1] >= 161) && ((unsigned char)pStr[i+1] <= 254)) {
// 利钦
}
else return FALSE;
i++; // !!! 刘啊矫难具父 嘎促.
}
} // for (i = 0; i < iLen; i++) {
return TRUE;
}
#elif DEF_LANGUAGE == 1
BOOL CMisc::bCheckValidName(char *pStr)
{
int i, iLen;
iLen = strlen(pStr);
if( iLen == 0 ) {
return FALSE;
}
for (i = 0; i < iLen; i++) {
if( (unsigned char)pStr[i] >= 0xa1 && (unsigned char)pStr[i] <= 0xf9 )
{
if ( (unsigned char)pStr[i] >= 0xa1 && (unsigned char)pStr[i] <=0xa2 )
{
if ( (unsigned char)pStr[i+1] >= 0x40 && (unsigned char)pStr[i+1] <= 0xfe ) return FALSE;
}
else if( (unsigned char)pStr[i] == 0xf3 )
{
if ( (unsigned char)pStr[i+1] >= 0x40 && (unsigned char)pStr[i+1] <= 0xbf ) return FALSE;
}
else if( (unsigned char)pStr[i] == 0xf9 )
{
if ( (unsigned char)pStr[i+1] >= 0xdd && (unsigned char)pStr[i+1] <= 0xfe ) return FALSE;
}
i++;
}else if ( (pStr[i] == ',') || (pStr[i] == '=') || (pStr[i] == '\n') ||
(pStr[i] == '\t') || (pStr[i] == '.') || (pStr[i] == '\\') || (pStr[i] == '/') ||
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -