|
|
/*----------------------------
*OpenSaveDialog
*功能:打开另存为对话框函数
*参数说明:dwFlag模式 0为打开对话框,1为另存为对话框
*----------------------------*/
BOOL CMapEditor::OpenSaveDialog( int dwFlag )
{
// 设置OPENFILENAME结构
OPENFILENAME ofn ;//
ZeroMemory(&ofn, sizeof(ofn));
static const TCHAR szFilter[] =
TEXT("Map Files (.txt)\0*.txt;\0")TEXT("All Files (*.*)\0*.*;\0");
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = m_pApp->GetWindow();
ofn.hInstance = NULL;
ofn.lpstrFilter = szFilter;
ofn.nFilterIndex = 1;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.lpstrFile = m_MapFileName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
if( dwFlag == 0 )//打开文件编辑
ofn.lpstrTitle = TEXT("选择一个场景文件...");
else//保存文件
ofn.lpstrTitle = TEXT("保存为指定的文件...");
ofn.Flags = OFN_HIDEREADONLY;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = TEXT("txt");
ofn.lCustData = 0L;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
if( dwFlag == 0 )//打开文件编辑
return GetOpenFileName( &ofn );
else //保存文件
return GetSaveFileName( &ofn );
}
BOOL CDDraw::GetBMPInfo(char* FileName,int &iBMPW,int &iBMPH)
{
if(FileName==NULL)
{
MessageBox(m_hWnd,"传递的文件名是空的!","出错",0);
return FALSE;
}
HBITMAP hbm;
BITMAP bm;
hbm=(HBITMAP)LoadImage( NULL,FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hbm==NULL)
{
MessageBox(m_hWnd,"无法加载Bitmap文件","出错",0);
return FALSE;
}
GetObject(hbm,sizeof(bm),&bm);
iBMPW=bm.bmWidth;
iBMPH=bm.bmHeight;
if(hbm)
DeleteObject(hbm);
return TRUE;
}
void CMapEditor::ShowNpc()
{
for( int i=0; i<m_iNpcNum; i++ )
{
if( m_Npc.ID != -1 &&
m_Npc.XPos >= m_iMapX &&
m_Npc.YPos >= m_iMapY &&
m_Npc.XPos <= m_iMapX+16 &&
m_Npc.YPos <= m_iMapX+16 )
{
int W=0, H=0, RoleW=0, RoleH=0;
//用LoadImage()来加载
m_pDDraw->GetBMPInfo( m_Npc.PicFileName, W, H );
RoleW = W/m_Npc.MaxFrame;
RoleH = H/m_Npc.MaxFace;;
RECT rect = { 0,0,RoleW,RoleH };
LPDIRECTDRAWSURFACE7 lpDDSNpc = NULL;
m_pDDraw->CreateBMPSurface( lpDDSNpc, 0, 0, m_Npc.PicFileName );
m_pDDraw->DDSetColorKey( lpDDSNpc, RGB( m_Npc.r, m_Npc.g, m_Npc.b ) );
//画出来
m_pDDraw->Blit( m_lpDDSMap, (m_Npc.XPos-m_iMapX)<<5, ((m_Npc.YPos-m_iMapY)<<5)-16, lpDDSNpc, &rect, SrcKey );
if( lpDDSNpc )
{
lpDDSNpc->Release();
lpDDSNpc = NULL;
}
}
}
}
在不出现打开/保存对话框时都好好的,每当GetOpenFileName()或GetSaveFileName()之后再调用ShowNpc()时,LoadImage()函数就返回NULL [em7] |
|