📄 cmapeditor.cpp
字号:
{
switch(message)
{
case WM_INITDIALOG:
{
::SetDlgItemInt(hWnd,IDC_GET_ID,s_nID,false);
return 1;
}
break;
case WM_COMMAND:
{
switch(wParam)
{
case IDOK:
{
s_nID=::GetDlgItemInt(hWnd,IDC_GET_ID,NULL,false);
EndDialog(hWnd,1);
return 1;
}
break;
case IDCANCEL:
{
EndDialog(hWnd,1);
return 1;
}
break;
}
}
break;
default:
return 0;
}
return 1;
}
LRESULT CALLBACK CMapEditor::DlgEditMapInfo(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
::SetDlgItemText(hWnd,IDC_MAP_INFO,s_szMapName);
return 1;
}
break;
case WM_COMMAND:
{
switch(wParam)
{
case IDOK:
{
::GetDlgItemText(hWnd,IDC_MAP_INFO,s_szMapName,22);
EndDialog(hWnd,1);
return 1;
}
break;
case IDCANCEL:
{
strcpy(s_szMapName,"");
EndDialog(hWnd,1);
return 1;
}
break;
}
}
break;
default:
return 0;
}
return 1;
}
//-----------------------------------------------------------------------------------
//设置层次的对话框
//-----------------------------------------------------------------------------------
LRESULT CALLBACK CMapEditor::DlgSetTileLayer(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
::SetDlgItemInt(hWnd,IDC_EDIT_INPUT1,s_dwTileLayer1,true);
::SetDlgItemInt(hWnd,IDC_EDIT_INPUT2,s_dwTileLayer2,true);
::SetDlgItemText(hWnd,IDC_EDIT1,"请输入物体层1的层次:(0-15)");
::SetDlgItemText(hWnd,IDC_EDIT2,"请输入物体层2的层次:(0-15)");
return 1;
}
break;
case WM_COMMAND:
{
switch(wParam)
{
case IDOK:
{
s_dwTileLayer1=::GetDlgItemInt(hWnd,IDC_EDIT_INPUT1,NULL,false);
s_dwTileLayer2=::GetDlgItemInt(hWnd,IDC_EDIT_INPUT2,NULL,false);
EndDialog(hWnd,1);
return 1;
}
break;
case IDCANCEL:
{
EndDialog(hWnd,1);
return 1;
}
break;
}
}
break;
default:
return 0;
}
return 1;
}
//-----------------------------------------------------------------------------------
//新地图的对话框
//-----------------------------------------------------------------------------------
LRESULT CALLBACK CMapEditor::DlgGetMapSize(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
::SetDlgItemInt(hWnd,IDC_EDIT_INPUT1,40,true);
::SetDlgItemInt(hWnd,IDC_EDIT_INPUT2,30,true);
::SetDlgItemText(hWnd,IDC_EDIT1,"请输入地图宽:");
::SetDlgItemText(hWnd,IDC_EDIT2,"请输入地图高:");
return 1;
}
break;
case WM_COMMAND:
{
switch(wParam)
{
case IDOK:
{
s_dwNewMapWidth=::GetDlgItemInt(hWnd,IDC_EDIT_INPUT1,NULL,false);
s_dwNewMapHeight=::GetDlgItemInt(hWnd,IDC_EDIT_INPUT2,NULL,false);
EndDialog(hWnd,1);
return 1;
}
break;
case IDCANCEL:
{
EndDialog(hWnd,1);
return 1;
}
break;
}
}
break;
default:
return 0;
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////
//窗口过程
////////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK CMapEditor::WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static CMapEditor*pEditor=NULL;
switch(message)
{
case UM_SETCLASS:
pEditor=(CMapEditor*)wParam;
break;
case WM_ACTIVATEAPP:
if(pEditor)
pEditor->m_bActive=wParam;
break;
case WM_MOUSEMOVE:
return pEditor->OnMouseMove();
case WM_LBUTTONDOWN:
return pEditor->OnMouseLButtonDown();
case WM_RBUTTONDOWN:
return pEditor->OnMouseRButtonDown();
case WM_VSCROLL:
return pEditor->OnVScrollBarMessage(wParam);
case WM_HSCROLL:
return pEditor->OnHScrollBarMessage(wParam);
case WM_KEYDOWN:
{
switch(wParam)
{
case VK_ESCAPE:
SendMessage(hWnd,WM_COMMAND,IDM_EXIT,0);
break;
case VK_SPACE:
if(pEditor->m_bIsEdit)
{
pEditor->ResetScrollBarRange();
pEditor->m_bIsEdit=false;
pEditor->SetCheckedMenu();
return true;
}
if(pEditor->m_dwCurrentEditLayer==LOA_MAP_LAYER_GROUND)
SendMessage(hWnd,WM_COMMAND,IDM_EDIT_GROUND,0);
else if(pEditor->m_dwCurrentEditLayer==LOA_MAP_LAYER_OBJ_1)
SendMessage(hWnd,WM_COMMAND,IDM_EDIT_OBJ_1,0);
else if(pEditor->m_dwCurrentEditLayer==LOA_MAP_LAYER_OBJ_2)
SendMessage(hWnd,WM_COMMAND,IDM_EDIT_OBJ_2,0);
break;
}
}
break;
case WM_CHAR:
{
switch(LOWORD(wParam))
{
case '1':
SendMessage(hWnd,WM_COMMAND,IDM_TILE_1,0);
break;
case '2':
SendMessage(hWnd,WM_COMMAND,IDM_TILE_2,0);
break;
case '3':
SendMessage(hWnd,WM_COMMAND,IDM_TILE_3,0);
break;
case '4':
SendMessage(hWnd,WM_COMMAND,IDM_TILE_4,0);
break;
case '5':
SendMessage(hWnd,WM_COMMAND,IDM_TILE_5,0);
break;
case '6':
SendMessage(hWnd,WM_COMMAND,IDM_TILE_6,0);
break;
case '7':
SendMessage(hWnd,WM_COMMAND,IDM_TILE_7,0);
break;
case '8':
SendMessage(hWnd,WM_COMMAND,IDM_TILE_8,0);
break;
case '9':
SendMessage(hWnd,WM_COMMAND,IDM_TILE_9,0);
break;
case '0':
SendMessage(hWnd,WM_COMMAND,IDM_TILE_10,0);
break;
}
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDM_NEW:
return pEditor->OnNew();
case IDM_SAVE:
return pEditor->OnSave();
case IDM_LOAD:
return pEditor->OnLoad();
case IDM_EXIT:
return pEditor->OnExit();
case IDM_SHOW_OBJ_1:
return pEditor->OnShowObj1();
case IDM_SHOW_OBJ_2:
return pEditor->OnShowObj2();
case IDM_SHOW_GROUND:
return pEditor->OnShowGround();
case IDM_SHOW_BLOCK_SIGN:
return pEditor->OnShowBlockSign();
case IDM_SHOW_GRID:
return pEditor->OnShowGrid();
case IDM_EDIT_GROUND:
return pEditor->OnEditGround();
case IDM_EDIT_OBJ_1:
return pEditor->OnEditObj1();
case IDM_EDIT_OBJ_2:
return pEditor->OnEditObj2();
case IDM_DEL:
return pEditor->OnDel();
case IDM_TILE_1:
return pEditor->OnSelectTile1();
case IDM_TILE_2:
return pEditor->OnSelectTile2();
case IDM_TILE_3:
return pEditor->OnSelectTile3();
case IDM_TILE_4:
return pEditor->OnSelectTile4();
case IDM_TILE_5:
return pEditor->OnSelectTile5();
case IDM_TILE_6:
return pEditor->OnSelectTile6();
case IDM_TILE_7:
return pEditor->OnSelectTile7();
case IDM_TILE_8:
return pEditor->OnSelectTile8();
case IDM_TILE_9:
return pEditor->OnSelectTile9();
case IDM_TILE_10:
return pEditor->OnSelectTile10();
case IDM_ABOUT:
return pEditor->OnShowAbout();
case IDM_SET_BLOCK:
return pEditor->OnSetBlock();
case IDM_SET_LAYER:
return pEditor->OnSetLayer();
case IDM_SET_CHANGE_MAP:
return pEditor->OnSetChangeMap();
case IDM_SET_SCRIPT:
return pEditor->OnSetMapScript();
case IDM_EDIT_ABOUT:
return pEditor->OnEditMapInfo();
case IDM_SET_ID:
return pEditor->OnEditID();
case IDM_SET_RANDOM_BATTLE:
return pEditor->OnSetRandomBattle();
}
}
break;
case WM_MOVE:
case WM_SIZE:
if(pEditor)
pEditor->m_pDisplay->UpdateBounds();
break;
case WM_CLOSE:
if(MessageBox(hWnd,"确实要退出吗?","LOA",MB_YESNO)==IDYES)
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 1;
}
BOOL CMapEditor::OnSetRandomBattle()
{
if(this->m_pMap->m_head.bRandomBattle==1)
this->m_pMap->m_head.bRandomBattle=false;
else
this->m_pMap->m_head.bRandomBattle=true;
return true;
}
//-----------------------------------------------------------------------------------
//调整菜单选中与否
//-----------------------------------------------------------------------------------
void CMapEditor::SetCheckedMenu()
{
::EnableMenuItem(m_hMenuMain,IDM_SET_BLOCK,MF_GRAYED);
::EnableMenuItem(m_hMenuMain,IDM_SET_LAYER,MF_GRAYED);
::EnableMenuItem(m_hMenuMain,IDM_SET_CHANGE_MAP,MF_GRAYED);
::EnableMenuItem(m_hMenuMain,IDM_SET_SCRIPT,MF_GRAYED);
::CheckMenuItem(m_hMenuMain,IDM_TILE_1,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_TILE_2,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_TILE_3,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_TILE_4,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_TILE_5,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_TILE_6,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_TILE_7,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_TILE_8,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_TILE_9,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_TILE_10,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_EDIT_GROUND,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_EDIT_OBJ_1,MF_UNCHECKED);
::CheckMenuItem(m_hMenuMain,IDM_EDIT_OBJ_2,MF_UNCHECKED);
if(m_bIsEdit)
{
if(m_dwCurrentEditLayer==LOA_MAP_LAYER_GROUND)
::CheckMenuItem(m_hMenuMain,IDM_EDIT_GROUND,MF_CHECKED);
if(m_dwCurrentEditLayer==LOA_MAP_LAYER_OBJ_1)
::CheckMenuItem(m_hMenuMain,IDM_EDIT_OBJ_1,MF_CHECKED);
if(m_dwCurrentEditLayer==LOA_MAP_LAYER_OBJ_2)
::CheckMenuItem(m_hMenuMain,IDM_EDIT_OBJ_2,MF_CHECKED);
}
else
{
switch(m_dwCurrentSelectSurface)
{
case 1:
::CheckMenuItem(m_hMenuMain,IDM_TILE_1,MF_CHECKED);
break;
case 2:
::CheckMenuItem(m_hMenuMain,IDM_TILE_2,MF_CHECKED);
break;
case 3:
::CheckMenuItem(m_hMenuMain,IDM_TILE_3,MF_CHECKED);
break;
case 4:
::CheckMenuItem(m_hMenuMain,IDM_TILE_4,MF_CHECKED);
break;
case 5:
::CheckMenuItem(m_hMenuMain,IDM_TILE_5,MF_CHECKED);
break;
case 6:
::CheckMenuItem(m_hMenuMain,IDM_TILE_6,MF_CHECKED);
break;
case 7:
::CheckMenuItem(m_hMenuMain,IDM_TILE_7,MF_CHECKED);
break;
case 8:
::CheckMenuItem(m_hMenuMain,IDM_TILE_8,MF_CHECKED);
break;
case 9:
::CheckMenuItem(m_hMenuMain,IDM_TILE_9,MF_CHECKED);
break;
case 10:
::CheckMenuItem(m_hMenuMain,IDM_TILE_10,MF_CHECKED);
break;
}
}
if(m_bShowBlockSign)
::CheckMenuItem(m_hMenuMain,IDM_SHOW_BLOCK_SIGN,MF_CHECKED);
else
::CheckMenuItem(m_hMenuMain,IDM_SHOW_BLOCK_SIGN,MF_UNCHECKED);
if(m_bShowGrid)
::CheckMenuItem(m_hMenuMain,IDM_SHOW_GRID,MF_CHECKED);
else
::CheckMenuItem(m_hMenuMain,IDM_SHOW_GRID,MF_UNCHECKED);
if(m_bShowObj1)
::CheckMenuItem(m_hMenuMain,IDM_SHOW_OBJ_1,MF_CHECKED);
else
::CheckMenuItem(m_hMenuMain,IDM_SHOW_OBJ_1,MF_UNCHECKED);
if(m_bShowObj2)
::CheckMenuItem(m_hMenuMain,IDM_SHOW_OBJ_2,MF_CHECKED);
else
::CheckMenuItem(m_hMenuMain,IDM_SHOW_OBJ_2,MF_UNCHECKED);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -