📄 编辑.cpp
字号:
FILE *f;
int i,j;
f=fopen(name,"w");
if(f==NULL) {AfxMessageBox("不能写文件!!!");return;}
fprintf(f,"%s\n",mapbak); //地图块名
fprintf(f,"%d\n",rs); //对象数
for (i=0;i<rs;i++)
{fprintf(f,"%d,",man[i].jisu); //序号
fprintf(f,"%d,",man[i].lb); //类别: [0人1兽2景]
fprintf(f,"%d,",man[i].js); //角色:人[0男1女]
//角色:兽[0豹1狼2鹿3马4雀5羊6猪]
fprintf(f,"%d,",man[i].p); //静物图形号
fprintf(f,"%d,",man[i].xix); //当前位置x
fprintf(f,"%d,\n",man[i].xiy); //当前位置y
}
fclose(f);
// B、保存障碍表(.map)
char cc[256];
strcpy(cc,name);cc[lstrlen(name)-3]=0;//变换文件名
strcat(cc,"map");
f=fopen(cc,"w");
if(f==NULL) {AfxMessageBox("不能写文件!!!");return;}
fprintf(f,"%d,%d\n",WIDTH*SCRP0/GX,HEIGHT*SCRP0/GY);
for(i=0;i<WIDTH*SCRP0/GX;i++)
{for(j=0;j<HEIGHT*SCRP0/GY;j++)
fprintf(f,"%c",m_fid.map[i][j]);
fprintf(f,"\n");
}
fclose(f);
/* //========DDB转换为DIB=======================================================
HPALETTE hPal= GetSystemPalette();// 获取系统调色板
HANDLE hDIB = BitmapToDIB(mapbit,hPal);// DDB->DIB转化
DeleteObject(hPal);
//========将图形拷入tmp缓冲
LPBITMAPINFOHEADER bi1 = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
strcpy(cc,name);cc[lstrlen(name)-3]=0;//变换文件名
strcat(cc,"bmp");
SaveBmp(cc,bi1); //存位图
GlobalUnlock(hDIB);
DeleteObject(hDIB);GlobalFree(hDIB);*/
}
//**************************************************
// newmap()//新建地图
// 根据新建地图选定的角色,初始化对象表和地图大小。
//**************************************************
void gmedit::newmap()//新建地图
{ rs=1;
man[0].jisu=0;//序号
man[0].lb=0; //类别: [0人1兽2景]
// man[0].js=1; //角色:人[0男1女]
//角色:兽[0豹1狼2鹿3马4雀5羊6猪]
man[0].p=0; //静物图形号
man[0].xix=WIDTH/2; //当前位置x
man[0].xiy=HEIGHT/2; //当前位置y
man[0].x0=man[0].xix; //目标位置x
man[0].y0=man[0].xiy; //目标位置y
man[0].fw=1; //方位: [0南1西南2西3西北4北5东北6东7东南]
man[0].zs=0; //动作:人[0站1走2刺3劈4倒]
//动作:兽[0站1走2跑3斗4倒5尸]
man[0].pk =-1; //路径长
man[0].fid=-1; //路径计数
man[0].zd=0;
setman(man[0].jisu); //设置活动对象初值
getobjwh(0); //取对象的尺寸
//设地图大小
m_fid.map_w=WIDTH*SCRP0/GX; //
m_fid.map_h=HEIGHT*SCRP0/GY;//
int i,j;
for(i=0;i<m_fid.map_w;i++)
for(j=0;j<m_fid.map_h;j++)
m_fid.map[i][j]='0';
getsmap(); //生成小地图
}
void gmedit::SaveBmp(CString fileName,LPBITMAPINFOHEADER bi1) //存位图
{ BITMAPFILEHEADER hdr;
DWORD dwTmp;
if(bi1==NULL){AfxMessageBox("无图形数据!");return;}
HANDLE hf = CreateFile(fileName, GENERIC_READ | GENERIC_WRITE,(DWORD) 0,NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);
hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M"
hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) +bi1->biSize + bi1->biClrUsed
* sizeof(RGBQUAD) + bi1->biSizeImage);
hdr.bfReserved1 = 0; hdr.bfReserved2 = 0;
hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) +bi1->biSize
+bi1->biClrUsed * sizeof (RGBQUAD);
WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER),
(LPDWORD) &dwTmp, NULL);
WriteFile(hf, (LPVOID) bi1, sizeof(BITMAPINFOHEADER)-bi1->biSize
+ bi1->biClrUsed * sizeof (RGBQUAD),(LPDWORD) &dwTmp, (NULL));
DWORD dwTotal = bi1->biSizeImage;
WriteFile(hf, (LPSTR) bi1, (int) dwTotal, (LPDWORD) &dwTmp,NULL);
CloseHandle(hf);
}
HANDLE BitmapToDIB(HBITMAP hBitmap, HPALETTE hPal)// DDB->DIB转化
{
BITMAP bm;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
DWORD dwLen;
HANDLE hDIB, h;
HDC hDC;
WORD biBits;
if (!hBitmap) return NULL;
if (!GetObject(hBitmap, sizeof(bm), (LPBYTE)&bm)) return NULL;
if (hPal == NULL) hPal = (HPALETTE)GetStockObject(DEFAULT_PALETTE);
biBits = bm.bmPlanes * bm.bmBitsPixel;
if (biBits <= 1) biBits = 1;
else if (biBits <= 4) biBits = 4;
else if (biBits <= 8) biBits = 8;
else biBits = 16;// if greater than 8-bit, force to 24-bit
// initialize BITMAPINFOHEADER
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bm.bmWidth;
bi.biHeight = bm.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = biBits;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
// calculate size of memory block required to store BITMAPINFO
dwLen = bi.biSize + PaletteSize((LPBYTE)&bi);
hDC = GetDC(NULL);
hPal = SelectPalette(hDC, hPal, FALSE);
RealizePalette(hDC);
hDIB = GlobalAlloc(GHND, dwLen);
if (!hDIB)
{ SelectPalette(hDC, hPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
return NULL;
}
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
*lpbi = bi;
GetDIBits(hDC, hBitmap, 0, (UINT)bi.biHeight, NULL, (LPBITMAPINFO)lpbi,
DIB_RGB_COLORS);
bi = *lpbi;
GlobalUnlock(hDIB);
if (bi.biSizeImage == 0)
bi.biSizeImage = WIDTHBYTES_E((DWORD)bm.bmWidth * biBits) * bm.bmHeight;
dwLen = bi.biSize + PaletteSize((LPBYTE)&bi) + bi.biSizeImage;
if (h = GlobalReAlloc(hDIB, dwLen, 0)) hDIB = h;
else
{ GlobalFree(hDIB);
hDIB = NULL;
SelectPalette(hDC, hPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
return NULL;
}
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
if (GetDIBits(hDC, hBitmap, 0, (UINT)bi.biHeight, (LPBYTE)lpbi +
(WORD)lpbi->biSize + PaletteSize((LPBYTE)lpbi), (LPBITMAPINFO)lpbi,
DIB_RGB_COLORS) == 0)
{ GlobalUnlock(hDIB);
hDIB = NULL;
SelectPalette(hDC, hPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
return NULL;
}
bi = *lpbi;
GlobalUnlock(hDIB);
SelectPalette(hDC, hPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
return hDIB;
}
WORD PaletteSize(LPBYTE lpDIB)// 计算调色板长度
{ WORD wBitCount;
DWORD dwClrUsed;
dwClrUsed = ((LPBITMAPINFOHEADER)lpDIB)->biClrUsed;
if (dwClrUsed) return (WORD)dwClrUsed*sizeof(RGBQUAD);
wBitCount = ((LPBITMAPINFOHEADER)lpDIB)->biBitCount;
switch (wBitCount)
{ case 1:return 2*sizeof(RGBQUAD);
case 4:return 16*sizeof(RGBQUAD);
case 8:return 256*sizeof(RGBQUAD);
default:return 0;
}
}
HPALETTE GetSystemPalette()// 获取系统调色板
{ HDC hDC;
static HPALETTE hPal = NULL;
HANDLE hLogPal;
LPLOGPALETTE lpLogPal;
int nColors;
hDC = GetDC(NULL);
if (!hDC)return NULL;
nColors = PalEntriesOnDevice(hDC); // Number of palette entrie
hLogPal = GlobalAlloc(GHND, sizeof(LOGPALETTE) + nColors * sizeof(PALETTEENTRY));
if (!hLogPal)return NULL;
lpLogPal = (LPLOGPALETTE)GlobalLock(hLogPal);
lpLogPal->palVersion = PALVERSION;
lpLogPal->palNumEntries = nColors;
GetSystemPaletteEntries(hDC, 0, nColors,(LPPALETTEENTRY)(lpLogPal->palPalEntry));
hPal = CreatePalette(lpLogPal);
GlobalUnlock(hLogPal);
GlobalFree(hLogPal);
ReleaseDC(NULL, hDC);
return hPal;
}
int PalEntriesOnDevice(HDC hDC)// 获取颜色位
{ int nColors;
nColors = (1 << (GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES)));
ASSERT(nColors);
return nColors;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -