📄 addrmapdlg.cpp
字号:
// AddrMapDlg.cpp : implementation file
//
#include "stdafx.h"
#include "../resource.h"
#include "AddrMapDlg.h"
#include "../toolbars/Right_add_new.h"
#include "HtreeStruct.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAddrMapDlg dialog
CAddrMapDlg::~CAddrMapDlg()
{
/////////////////////////////////
if(pShow)
{
pShow->DestroyWindow() ;
delete pShow ;
pShow = NULL ;
}
//////////////////////////
/* for (int i = 0;i<50;i++)
{
if(pDelete[i])
{
delete pDelete[i] ;
}
}*/
}
CAddrMapDlg::CAddrMapDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAddrMapDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAddrMapDlg)
//}}AFX_DATA_INIT
for (int i = 0;i<50;i++)
{
pDelete[i] = NULL ;
}
}
void CAddrMapDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAddrMapDlg)
DDX_Control(pDX, IDC_TREE1, m_tree);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAddrMapDlg, CDialog)
//{{AFX_MSG_MAP(CAddrMapDlg)
ON_MESSAGE(WM_MY_SHOW,OnShowPicture)
ON_MESSAGE(WM_MY_MAPDELETE,OnMapDelete)
ON_MESSAGE(WM_MY_ALARM,OnTreeAlarm)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_SHOW_BUTTON, OnShowButton)
ON_BN_CLICKED(IDC_DELETE_BUTTON, OnDeleteButton)
ON_BN_CLICKED(IDC_INSERT_BUTTON, OnInsertButton)
ON_BN_CLICKED(IDC_QUIT_BUTTON, OnQuitButton)
ON_BN_CLICKED(IDC_SAVE_BUTTON, OnSaveButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAddrMapDlg message handlers
BOOL CAddrMapDlg::Create(CWnd* pParentWnd)
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::Create(IDD, pParentWnd);
}
void CAddrMapDlg::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
CDialog::PostNcDestroy();
}
BOOL CAddrMapDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
GetDlgItem(IDC_TREE1)->MoveWindow(7, 7, 150, 422) ;
GetDlgItem(IDC_SHOW_BUTTON)->MoveWindow(7, 448, 75, 25) ;
GetDlgItem(IDC_DELETE_BUTTON)->MoveWindow(7, 474, 75, 25) ;
GetDlgItem(IDC_INSERT_BUTTON)->MoveWindow(82, 448, 75, 25) ;
GetDlgItem(IDC_SAVE_BUTTON)->MoveWindow(82, 474, 75, 25) ;
GetDlgItem(IDC_QUIT_BUTTON)->MoveWindow(41, 502, 75, 28) ;
m = 0 ;
x = 0 ;
bClose = FALSE ;
// GetCurrentDirectory(250,strFile) ;
char str1[250] ;
strcpy(str1,strFile) ;
strcat(str1,"\\res\\background.jpg") ;
pShow = new CPictureShow(this) ;
pShow->strFile = strFile ;
pShow->Create(this) ;
pShow->lpstrFile = pMem ;
pShow->MoveWindow(164,7,800-178,600-49) ;
pShow->ShowWindow(SW_SHOW) ;
memcpy(pMem,str1,250) ;
// GetCurrentDirectory(250,strFile) ;
strcpy(str0,strFile) ;
strcat(str0,"\\data\\map.dat") ;
FILE *fp ;
fp = fopen(str0,"rb") ;
CHtreeStruct y[50] ;
HTREEITEM hitem[50] ;
//树控件数据还原
if (fp != NULL)
{
fseek(fp,0,SEEK_END) ;
int flengh = ftell(fp) ;
fseek(fp,0,SEEK_SET) ;
fread(&y,428,flengh/428,fp) ;
for (int i=0;i<flengh/428;i++)
{
CString string = y[i].m_ParentAddr ;
if (string == "")
{
hitem[i] = m_tree.InsertItem(y[i].m_ItemText, NULL);
pDelete[i] = new char[200] ;
memcpy(pDelete[i],y[i].m_MapAddr,200) ;
m_tree.SetItemData(hitem[i],(DWORD)pDelete[i]) ;
}
else
{
for (int j=0;j<i;j++)
if (string == y[j].m_MapAddr)
{
hitem[i] = m_tree.InsertItem(y[i].m_ItemText, hitem[j]);
pDelete[i] = new char[200] ;
memcpy(pDelete[i],y[i].m_MapAddr,200) ;
m_tree.SetItemData(hitem[i],(DWORD)pDelete[i]) ;
}
}
}
fclose(fp) ;
if (i>0)
{
memcpy(pMem,y[0].m_MapAddr,200) ;
}
pShow->SendMessage(WM_MY_SHOWALL,0,0) ;
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAddrMapDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
CDialog::OnClose();
OnQuitButton() ;
}
void CAddrMapDlg::OnShowButton()
{
// TODO: Add your control notification handler code here
HTREEITEM hitem = m_tree.GetSelectedItem();
if (hitem == NULL)
return ;
DWORD fileaddr = m_tree.GetItemData(hitem) ;
if (fileaddr == NULL)
{
AfxMessageBox(afx_box_1);
return ;
}
PostMessage(WM_MY_SHOW,0,fileaddr) ;
}
void CAddrMapDlg::OnDeleteButton()
{
// TODO: Add your control notification handler code here
DWORD pPtr ;
HTREEITEM hitemD = m_tree.GetSelectedItem() ;
HTREEITEM hitem,hitemM;
if (hitemD == NULL)
return ;
////////////////////////////////
BOOL bChild ;
bChild = m_tree.ItemHasChildren(hitemD) ;
if(bChild)
{
hitem = m_tree.GetChildItem(hitemD) ;
while (hitem != hitemD)
{
bChild = m_tree.ItemHasChildren(hitem) ;
if(bChild)
{
hitem = m_tree.GetChildItem(hitem) ;
}
else
{
pPtr = m_tree.GetItemData(hitem) ;
SendMessage(WM_MY_MAPDELETE,0,pPtr) ;
delete (char*)pPtr ;
hitemM = hitem ;
hitem = m_tree.GetNextSiblingItem(hitem) ;
while (hitem == NULL)
{
hitem = m_tree.GetParentItem(hitemM) ;
}
m_tree.DeleteItem(hitemM) ;
}
}
}
pPtr = m_tree.GetItemData(hitemD) ;
m_tree.DeleteItem(hitemD) ;
SendMessage(WM_MY_MAPDELETE,0,pPtr);
delete (char*)pPtr ;
}
void CAddrMapDlg::OnInsertButton()
{
// TODO: Add your control notification handler code here
CMapAddDlg dlg ;
HTREEITEM hitemParent = m_tree.GetSelectedItem();
HTREEITEM hTree[50] ;
HTREEITEM hMitem ;
if (dlg.DoModal()==IDOK)
{
int num = m_tree.GetCount() ;
hTree[0] = m_tree.GetFirstVisibleItem() ;
int i = 1 ;
BOOL bChild ;
while (i<num)
{
bChild = m_tree.ItemHasChildren(hTree[i-1]) ;
if(bChild)
{
hTree[i] = m_tree.GetChildItem(hTree[i-1]) ;
i++ ;
}
else
{
hTree[i] = m_tree.GetNextSiblingItem(hTree[i-1]) ;
hMitem = hTree[i-1] ;
while (hTree[i] == NULL)
{
hMitem = m_tree.GetParentItem(hMitem) ;
hTree[i] = m_tree.GetNextSiblingItem(hMitem) ;
}
i++ ;
}
}
for(i=0;i<num;i++)
{
CString strAddr = (char*)m_tree.GetItemData(hTree[i]) ;
if(dlg.m_FileAddr == strAddr)
{
AfxMessageBox(afx_box_2);
return ;
}
}
hitem = m_tree.InsertItem(dlg.m_FileName, hitemParent);
char* str = NULL ;
int m_lengh = dlg.m_FileAddr.GetLength() ;
str = dlg.m_FileAddr.GetBuffer(m_lengh) ;
pDelete[i] = new char[200] ;
memcpy(pDelete[i],str,200) ;
m_tree.SetItemData(hitem,(DWORD)pDelete[i]) ;
m_tree.SelectItem(hitem);
}
}
void CAddrMapDlg::OnQuitButton()
{
KillTimer(1);
for (int i=0;i<pShow->x;i++)
{
if (pShow->pPicS[i] != NULL)
{
delete pShow->pPicS[i] ;
pShow->pPicS[i] = NULL ;
}
}
CHtreeStruct hTreeStr[50] ;
HTREEITEM hMitem ;
int num = m_tree.GetCount() ;
hTreeStr[0].hTreeItem = m_tree.GetFirstVisibleItem() ;
i = 1 ;
BOOL bChild ;
while (i<num)
{
bChild = m_tree.ItemHasChildren(hTreeStr[i-1].hTreeItem) ;
if (bChild)
{
hTreeStr[i].hTreeItem =m_tree.GetChildItem(hTreeStr[i-1].hTreeItem) ;
i++ ;
}
else
{
hTreeStr[i].hTreeItem = m_tree.GetNextSiblingItem(hTreeStr[i-1].hTreeItem) ;
hMitem = hTreeStr[i-1].hTreeItem ;
while (hTreeStr[i].hTreeItem ==NULL)
{
hMitem = m_tree.GetParentItem(hMitem) ;
hTreeStr[i].hTreeItem = m_tree.GetNextSiblingItem(hMitem) ;
}
i++ ;
}
}
for(i=0;i<num;i++)
{
DWORD pPtr = m_tree.GetItemData(hTreeStr[i].hTreeItem) ;
if(pPtr)
{
delete (char*)pPtr;
pPtr = NULL;
}
}
CDialog::OnCancel();
if(CRight_add_new::pMapDlg)
{
delete CRight_add_new::pMapDlg;
CRight_add_new::pMapDlg = NULL;
}
}
void CAddrMapDlg::OnSaveButton()
{
// TODO: Add your control notification handler code here
CHtreeStruct hTreeStr[50] ;
HTREEITEM hMitem ;
int num = m_tree.GetCount() ;
hTreeStr[0].hTreeItem = m_tree.GetFirstVisibleItem() ;
int i = 1 ;
BOOL bChild ;
while (i<num)
{
bChild = m_tree.ItemHasChildren(hTreeStr[i-1].hTreeItem) ;
if (bChild)
{
hTreeStr[i].hTreeItem =m_tree.GetChildItem(hTreeStr[i-1].hTreeItem) ;
i++ ;
}
else
{
hTreeStr[i].hTreeItem = m_tree.GetNextSiblingItem(hTreeStr[i-1].hTreeItem) ;
hMitem = hTreeStr[i-1].hTreeItem ;
while (hTreeStr[i].hTreeItem ==NULL)
{
hMitem = m_tree.GetParentItem(hMitem) ;
hTreeStr[i].hTreeItem = m_tree.GetNextSiblingItem(hMitem) ;
}
i++ ;
}
}
for (i = 0;i<num;i++)
{
CString str = "" ;
hMitem = m_tree.GetParentItem(hTreeStr[i].hTreeItem) ;
if (hMitem != NULL)
{
str = (char*)m_tree.GetItemData(hMitem) ;
}
memcpy(hTreeStr[i].m_ParentAddr,str,200) ;
// }
// else
// {
// memset(hTreeStr[i].m_ParentAddr,0,200) ;
// }
str = m_tree.GetItemText(hTreeStr[i].hTreeItem) ;
memcpy(hTreeStr[i].m_ItemText,str,20) ;
DWORD lPtr ;
lPtr = m_tree.GetItemData(hTreeStr[i].hTreeItem) ;
memcpy(hTreeStr[i].m_MapAddr,(const void*)lPtr,200) ;
}
FILE *fp ;
strcpy(str0,strFile) ;
strcat(str0,"\\data\\map.dat") ;
fp = fopen(str0,"wb") ;
fwrite(&hTreeStr,sizeof(CHtreeStruct),num,fp) ;
fclose(fp) ;
pShow->SendMessage(WM_MY_SAVE,0,0) ;
if(!bClose)
{
AfxMessageBox(afx_box_12) ;
}
bClose = FALSE ;
}
void CAddrMapDlg::OnShowPicture(WPARAM wParam, LPARAM lParam)
{
CString str = (char*)lParam ;
if (str == pShow->lpstrFile )
{
return;
}
memcpy(pMem,(const void*)lParam,200) ;
pShow->SendMessage(WM_PAINT,0,0) ;
// pShow->SendMessageToDescendants(WM_DESTROY,TRUE,FALSE) ;
pShow->SendMessage(WM_MY_SHOWALL,0,0) ;
}
void CAddrMapDlg::OnMapDelete(WPARAM wParam, LPARAM lParam)
{
HTREEITEM hItem = m_tree.GetSelectedItem() ;
if(hItem == NULL)
{
char str[250] ;
strcpy(str,strFile) ;
strcat(str,"\\res\\background.jpg") ;
memcpy(pMem,str,250) ;
pShow->SendMessage(WM_PAINT,0,0) ;
}
else
{
DWORD fileaddr = m_tree.GetItemData(hItem) ;
PostMessage(WM_MY_SHOW,0,fileaddr) ;
}
pShow->SendMessage(WM_MY_MAPDELETE,0,lParam) ;
}
void CAddrMapDlg::OnTreeAlarm(WPARAM wParam, LPARAM lParam)
{
CString strMap = (char*)lParam ;
CHtreeStruct hTreeStr[50] ;
HTREEITEM hMitem ;
int num = m_tree.GetCount() ;
hTreeStr[0].hTreeItem = m_tree.GetFirstVisibleItem() ;
int i = 1 ;
BOOL bChild ;
while (i<num)
{
bChild = m_tree.ItemHasChildren(hTreeStr[i-1].hTreeItem) ;
if (bChild)
{
hTreeStr[i].hTreeItem =m_tree.GetChildItem(hTreeStr[i-1].hTreeItem) ;
i++ ;
}
else
{
hTreeStr[i].hTreeItem = m_tree.GetNextSiblingItem(hTreeStr[i-1].hTreeItem) ;
hMitem = hTreeStr[i-1].hTreeItem ;
while (hTreeStr[i].hTreeItem ==NULL)
{
hMitem = m_tree.GetParentItem(hMitem) ;
hTreeStr[i].hTreeItem = m_tree.GetNextSiblingItem(hMitem) ;
}
i++ ;
}
}
for (i = 0;i<num;i++)
{
CString str = "" ;
str = (char*)m_tree.GetItemData(hTreeStr[i].hTreeItem) ;
if(strMap == str)
{
m_tree.EnsureVisible(hTreeStr[i].hTreeItem);
m_tree.SetItemState(hTreeStr[i].hTreeItem,TVIS_BOLD,TVIS_BOLD) ;
}
}
}
BOOL CAddrMapDlg::FindStation(ULONG ip,USHORT port,char* addrFile)
{
FILE *fp ;
CString str;
str = addrFile ;
str = str+"\\data\\fixture.dat";
fp = fopen(str,"rb") ;
if (fp == NULL)
{
return FALSE ;
}
CDlgStruct DlgStr;
while(fread(&DlgStr,sizeof(CDlgStruct),1,fp))
{
if (DlgStr.ipAddr == ip && DlgStr.portNo == port)
{
return TRUE;
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -