📄 mainfrm.cpp
字号:
CString s;
ptmplate->GetDocString(s,CDocTemplate::regFileTypeId);
if(s == "CfgCAN.Document"){//已找到
pos = ptmplate->GetFirstDocPosition();
if(pos){//已打开
CDocument* pDoc = ptmplate->GetNextDoc(pos);
ASSERT(pDoc);
ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CCfgCANDoc)));
POSITION viewpos = pDoc->GetFirstViewPosition();
CView* pView = pDoc->GetNextView(viewpos);
ASSERT(pView != NULL);
ASSERT(pView->IsKindOf(RUNTIME_CLASS(CCfgCANView)));
CFrameWnd* pwnd = pView->GetParentFrame();
ASSERT(pwnd != NULL);
pwnd->ActivateFrame(SW_SHOW);
}
else{//创建
ptmplate->OpenDocumentFile(NULL);
}
break;
}
}
}
//显示数据窗口
#include "SourceDlg.h"
void CMainFrame::OnViewShowdata()
{
CSourceDlg dlg;
if(dlg.DoModal() == IDCANCEL) return;
ShowDataCh(dlg.m_addr,dlg.m_ch);
}
//显示帧窗口
void CMainFrame::OnViewFramesShow()
{
POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();
while(pos){
CDocTemplate* ptmplate = AfxGetApp()->GetNextDocTemplate(pos);
ASSERT(ptmplate);
ASSERT(ptmplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
//判断是否是ShowFrames.document
CString s;
ptmplate->GetDocString(s,CDocTemplate::regFileTypeId);
if(s == "ShowFrms.document"){//已找到
pos = ptmplate->GetFirstDocPosition();
if(pos){//已打开
CDocument* pDoc = ptmplate->GetNextDoc(pos);
ASSERT(pDoc);
ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CFramesDoc)));
POSITION viewpos = pDoc->GetFirstViewPosition();
CView* pView = pDoc->GetNextView(viewpos);
ASSERT(pView != NULL);
ASSERT(pView->IsKindOf(RUNTIME_CLASS(CFramesView)));
CFrameWnd* pwnd = pView->GetParentFrame();
ASSERT(pwnd != NULL);
pwnd->ActivateFrame(SW_SHOW);
}
else{//创建
ptmplate->OpenDocumentFile(NULL);
}
break;
}
}
}
//显示批处理窗口
void CMainFrame::OnViewCmdbat()
{
POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();
while(pos){
CDocTemplate* ptmplate = AfxGetApp()->GetNextDocTemplate(pos);
ASSERT(ptmplate);
ASSERT(ptmplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
//判断是否是ShowFrames.document
CString s;
ptmplate->GetDocString(s,CDocTemplate::regFileTypeId);
if(s == "CmdBat.document"){//已找到
pos = ptmplate->GetFirstDocPosition();
if(pos){//已打开
CDocument* pDoc = ptmplate->GetNextDoc(pos);
ASSERT(pDoc);
ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CCmdBatDoc)));
POSITION viewpos = pDoc->GetFirstViewPosition();
CView* pView = pDoc->GetNextView(viewpos);
ASSERT(pView != NULL);
ASSERT(pView->IsKindOf(RUNTIME_CLASS(CCmdBatView)));
CFrameWnd* pwnd = pView->GetParentFrame();
ASSERT(pwnd != NULL);
pwnd->ActivateFrame(SW_SHOW);
}
else{//创建
ptmplate->OpenDocumentFile(NULL);
}
break;
}
}
}
void CMainFrame::OnClose()
{//最好不要在析构函数中杀死线程
if(m_bThrRunning)
StopSystem();
CMDIFrameWnd::OnClose();
}
#include "SelChQdDlg.h"
#include "SelCh7703Dlg.h"
#include "SelCh77032Dlg.h"
#include "Selch7710Dlg.h"
void CMainFrame::OnPopupDatawin()
{
//寻找哪一个模块被选中
HTREEITEM ht = m_LeftDlg.m_systree.GetSelectedItem();
//判断是否是模块
tree<tree_node>::iterator it;
for(it = m_LeftDlg.m_can.begin(); it != m_LeftDlg.m_can.end(); ++it){
if((*it).ht == ht){//找到选中的项
if((*it).is_model){//是模块
break;
}
return;
}
}
//现在it指向这个模块
//根据模块类型,弹出不同的对话框,选择所要查看的数据通道
CSelChQDDlg qddlg;
CSelCh7703Dlg _7703dlg;
CSelCh77032Dlg _77032dlg;
CSelCh7710Dlg _7710dlg;
BYTE addr = (*it).addr;
BYTE ch;
switch(get_type(addr)){
case T_QD:
if(qddlg.DoModal() == IDOK){
ch = qddlg.m_selch;
ShowDataCh(addr,ch);
}
break;
case T_AD_7703:
if(_7703dlg.DoModal() == IDOK){
ch = _7703dlg.m_selch;
ShowDataCh(addr,ch);
}
break;
case T_AD_7703_2:
if(_77032dlg.DoModal() == IDOK){
ch = _77032dlg.m_selch;
ShowDataCh(addr,ch);
}
break;
case T_AD_7710:
if(_7710dlg.DoModal() == IDOK){
ch = _7710dlg.m_selch;
ShowDataCh(addr,ch);
}
break;
default:
break;
}
}
void CMainFrame::OnPopupAttribute()
{
//寻找哪一个模块被选中
//根据模块类型,弹出不同的对话框,选择所要查看的属性
}
void CMainFrame::ShowDataCh(BYTE addr, BYTE ch)
{
if(addr >= MAX_MODELS || ch >= MAX_CHANS){
AfxMessageBox("数据通道选择错!");
return;
}
POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();
while(pos){
CDocTemplate* ptmplate = AfxGetApp()->GetNextDocTemplate(pos);
ASSERT(ptmplate);
ASSERT(ptmplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
//判断是否是ShowData.document
CString s;
ptmplate->GetDocString(s,CDocTemplate::regFileTypeId);
if(s == "ShowData.document"){//已找到相应的模板
CString s;
s.Format("%d,%d",addr,ch);
//如果该Doc以经打开,则不动作。Doc
pos = ptmplate->GetFirstDocPosition();
BOOL exist = FALSE;
CDocument* pDoc;
while(pos){//寻找doc
pDoc = ptmplate->GetNextDoc(pos);
ASSERT(pDoc != NULL);
ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CDataShowDoc)));
if((((CDataShowDoc*)pDoc)->m_addr == addr) &&
(((CDataShowDoc*)pDoc)->m_ch == ch)){
exist = TRUE;
break;
}
}
if(exist){
//激活
pos = pDoc->GetFirstViewPosition();
CView* pView = pDoc->GetNextView(pos);
ASSERT(pView != NULL);
ASSERT(pView->IsKindOf(RUNTIME_CLASS(CDataShowView)));
CFrameWnd* pwnd = pView->GetParentFrame();
ASSERT(pwnd != NULL);
pwnd->ActivateFrame(SW_SHOW);
// pwnd->SetActiveView(pView);
// pwnd->MDIActivate();
// pwnd->MDIActivate(pView);
}
else{//new
ptmplate->OpenDocumentFile(s);
}
break;//不再找下一个模板了
}
}
}
void CMainFrame::OnViewCover()
{
POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();
while(pos){
CDocTemplate* ptmplate = AfxGetApp()->GetNextDocTemplate(pos);
ASSERT(ptmplate);
ASSERT(ptmplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
//判断是否是VCStyle.Document
CString s;
ptmplate->GetDocString(s,CDocTemplate::regFileTypeId);
if(s == "VCStyle.Document"){//已找到
pos = ptmplate->GetFirstDocPosition();
if(pos){//已打开
CDocument* pDoc = ptmplate->GetNextDoc(pos);
ASSERT(pDoc);
ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CVCStyleDoc)));
POSITION viewpos = pDoc->GetFirstViewPosition();
CView* pView = pDoc->GetNextView(viewpos);
ASSERT(pView != NULL);
ASSERT(pView->IsKindOf(RUNTIME_CLASS(CVCStyleView)));
CFrameWnd* pwnd = pView->GetParentFrame();
ASSERT(pwnd != NULL);
pwnd->ActivateFrame(SW_SHOW);
}
else{//创建
ptmplate->OpenDocumentFile(NULL);
}
break;
}
}
}
#include "set7710dlg1.h"
void CMainFrame::OnSysSet7710()
{
Set7710Dlg dlg;
dlg.DoModal();
}
void CMainFrame::OnSysFrameCount()
{
CString s;
s.Format("当前帧数为%d",m_nFrames);
AfxMessageBox(s);
}
void CMainFrame::OnViewSJAReg()
{
POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();
while(pos){
CDocTemplate* ptmplate = AfxGetApp()->GetNextDocTemplate(pos);
ASSERT(ptmplate);
ASSERT(ptmplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
//判断是否是SJAReg.Document
CString s;
ptmplate->GetDocString(s,CDocTemplate::regFileTypeId);
if(s == "SJAReg.document"){//已找到
pos = ptmplate->GetFirstDocPosition();
if(pos){//已打开
CDocument* pDoc = ptmplate->GetNextDoc(pos);
ASSERT(pDoc);
ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CSJARegDoc)));
POSITION viewpos = pDoc->GetFirstViewPosition();
CView* pView = pDoc->GetNextView(viewpos);
ASSERT(pView != NULL);
ASSERT(pView->IsKindOf(RUNTIME_CLASS(CSJARegView)));
CFrameWnd* pwnd = pView->GetParentFrame();
ASSERT(pwnd != NULL);
pwnd->ActivateFrame(SW_SHOW);
}
else{//创建
ptmplate->OpenDocumentFile(NULL);
}
break;
}
}
}
void CMainFrame::OnSysStartUdp()
{
WSADATA wsa;
AfxSocketInit(&wsa);
//创建本地连接
m_sockSend.Create(6800,SOCK_DGRAM,NULL);
//获取本地主机名和IP
/* WORD wVersionRequested;
WSADATA wsaData;
char name[255];
CString ip;
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD(2,0);
if(WSAStartup(wVersionRequested,&wsaData)==0){
if(gethostname(name,sizeof(name))==0){
if((hostinfo=gethostbyname(name))!=NULL){
ip = inet_ntoa(*(struct in_addr*)*hostinfo->h_addr_list);
}
}
WSACleanup();
}
else
return;
*/ //绑定本地套接口
m_sockSend.Bind(6800,"192.168.1.59");
m_bStartUDP = TRUE;
}
void CMainFrame::OnSysUseRemoteSource()
{
if(m_bRemoteSource==TRUE) return;//已开启
StopSystem();//先关系统
m_bRemoteSource = TRUE;
//不可少
AfxSocketInit(NULL);
//创建本地连接
m_sockRecv.Create(6801,SOCK_DGRAM,NULL);
//绑定本地套接口
m_sockRecv.Bind(6801,"192.168.1.70");
//
m_sockRecv.AsyncSelect(FD_READ);
}
void CMainFrame::RemoteData()
{
CString szIP("192.168.1.59");
UINT uPort = 6800;
//接受
int iRecv = m_sockRecv.ReceiveFrom(m_rcbuf,11,szIP,uPort,0);
TRACE("received %d byte\n",iRecv);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -