?? radioview.cpp
字號:
{
static CHOOSECOLOR cc ;
static COLORREF crCustColors[16] ;
cc.lStructSize = sizeof (CHOOSECOLOR) ;
cc.hwndOwner = this->GetSafeHwnd();
cc.hInstance = (HWND)AfxGetInstanceHandle();
cc.rgbResult = APPStatic::colorDlg ;//缺省顏色并返回顏色
cc.lpCustColors = crCustColors ;
cc.Flags = CC_RGBINIT;
cc.lCustData = 0 ;
cc.lpfnHook = NULL ;
cc.lpTemplateName = NULL ;
if(::ChooseColor (&cc))
{
APPStatic::colorDlg = cc.rgbResult;
InvalidateRect(NULL,TRUE);
}
}
LRESULT CRADIOView::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
return CScrollView::DefWindowProc(message, wParam, lParam);
}
void CRADIOView::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your specialized code here and/or call the base class
//DRAWITEMSTRUCT *pDs=lpDrawItemStruct;
CDC *pDC=m_tabSheet.GetDC();
int iIndex=m_tabSheet.GetCurSel();
int iConunt=m_tabSheet.GetRowCount();
CRect rectItem;
m_tabSheet.GetItemRect(iIndex,&rectItem);
POINT pt;
for(int i=0;i<=iConunt;i++){
pt.x=i*rectItem.Width();
pt.y=rectItem.top;
pt.x+=5;pt.y+=4;
if(i==iIndex){
pt.x=pt.x+2;
pt.y=pt.y-3;
}
m_imageListTabSheets.Draw(pDC,i,pt,ILD_MASK);
}
ReleaseDC(pDC);
//CRADIOView::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
void CRADIOView::GenAxis()
{
double BKColor[]={0,0,0};
mwArray mwBkColor(1,3,BKColor);
m_mwhFigure = figure(
mwArray("DoubleBuffer"), mwArray("On"),
mwArray("NumberTitle"), mwArray("Off"),
mwArray("Name"), mwArray("__figure"),
mwArray("Color"), mwBkColor,
mwArray("Visible"), mwArray("off"),
mwArray("MenuBar"), mwArray("none")
);
m_mwhAxis= axes(mwArray("Parent"), m_mwhFigure,
mwArray("Box"), mwArray("On"),
mwArray("XGrid"), mwArray("On"),
mwArray("YGrid"), mwArray("On"),
mwArray("zGrid"), mwArray("On"),
mwArray("xcolor"), horzcat(0.7,.7,.7),
mwArray("ycolor"), horzcat(0.7,.7,.7),
mwArray("zcolor"), horzcat(0.7,.7,.7),
mwArray("color"), horzcat(0,0,.502));
mwArray xLabel=get(m_mwhAxis,"xlabel");
mwArray yLabel=get(m_mwhAxis,"ylabel");
mwArray zLabel=get(m_mwhAxis,"zlabel");
set(xLabel,"string","東向位置(E)/米","fontsize",8);
set(yLabel,"string","北向位置(N)/米","fontsize",8);
set(zLabel,"string","天向位置(U)/米","fontsize",8);
double dColor[3]={.3,1,.2};
m_mwhLineTraj=line(mwArray(0),mwArray(0),"parent",m_mwhAxis,"color",mwArray(1,3,dColor),"linewidth",2);
m_mwhBeacon=line("xdata",0,"ydata",0,"zdata",0,"visible","off","parent",m_mwhAxis);
Vset(m_mwhAxis,"NextPlot","add");//hold on
}
void CRADIOView::DockMatlabFigure(mwArray mwhFigure,CWnd *pParentWnd)
{
mwArray mwFigName=get(mwhFigure,mwArray("name"));
char *pCharFigureName=strdup((char*)(mwFigName.ToString()));
HWND hFig = ::FindWindow(NULL,pCharFigureName);
if(hFig == NULL)
{
AfxMessageBox("未能產生Figure窗口,圖形繪制失??!");
return;
}
// 去掉Figure窗口的標題欄和邊框
long lStyle = ::GetWindowLong(hFig,GWL_STYLE);
::SetWindowLong(hFig,GWL_STYLE,lStyle & (~WS_CAPTION) & (~WS_THICKFRAME));
::SetWindowPos(hFig,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
// 獲取繪圖區域的位置和大小
CRect rectDock;
pParentWnd->GetClientRect(&rectDock);
// 設置Figure窗口為繪圖區域窗口的子窗口并調整其位置
::SetParent(hFig,pParentWnd->GetSafeHwnd());
::SetWindowPos(hFig,NULL,1,1,rectDock.Width()-3,rectDock.Height()-3,SWP_NOZORDER | SWP_NOACTIVATE);
}
void CRADIOView::OnDestroy()
{
CScrollView::OnDestroy();
// TODO: Add your message handler code here
}
void CRADIOView::MakeMatlabFiguresVisible()
{
Vset(m_mwhFigure,"visible","on");
}
void CRADIOView::OnRotate3d()
{
if(m_bIsMatlabFigureShowing){
if(m_bIsRotating3D){
rotate3d(m_mwhFigure,"off");
setptr(m_mwhFigure,"arrow");
m_bIsRotating3D=FALSE;
}
else{
setptr(m_mwhFigure,"hand");
rotate3d(m_mwhFigure,"on");
m_bIsRotating3D=TRUE;
}
}
}
void CRADIOView::OnUpdateRotate3d(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_bIsRotating3D);
pCmdUI->Enable(m_bIsMatlabFigureShowing && !m_bIsZooming);
}
void CRADIOView::OnZoom()
{
if(m_bIsMatlabFigureShowing ){
if(m_bIsZooming){
setptr(m_mwhFigure,"arrow");
Vzoom(m_mwhFigure,"off");
m_bIsZooming=FALSE;
}
else if(!m_bIsZooming && !m_bSimuStarted){
setptr(m_mwhFigure,"glass");
Vzoom(m_mwhFigure,"on");
m_bIsZooming=TRUE;
}
}
}
void CRADIOView::OnUpdateZoom(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_bIsZooming);
pCmdUI->Enable(m_bIsMatlabFigureShowing && !m_bIsRotating3D && !m_bSimuStarted);
}
void CRADIOView::OnRotate2d()
{
// Vaxis(m_mwhAxis,"normal");
Vview(m_mwhAxis,2);
}
void CRADIOView::OnUpdateRotate2d(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bIsMatlabFigureShowing);
}
void CRADIOView::OnAxiscolor()
{
NMTOOLBAR nmtb;
nmtb.iItem=ID_AXISCOLOR;
((CMainFrame*)AfxGetApp()->GetMainWnd())->OnToolbarDropDown(&nmtb,NULL);
}
void CRADIOView::OnUpdateAxiscolor(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bIsMatlabFigureShowing);
}
void CRADIOView::OnUpdateAxistype(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bIsMatlabFigureShowing);
}
void CRADIOView::OnAxisauto()
{
Vaxis(m_mwhAxis,"auto");
}
void CRADIOView::OnAxisequal()
{
Vaxis(m_mwhAxis,"equal");
}
void CRADIOView::OnAxismanual()
{
Vaxis(m_mwhAxis,"manual");
}
void CRADIOView::OnAxisnormal()
{
Vaxis(m_mwhAxis,"normal");
}
void CRADIOView::OnAxison()
{
static BOOL bOn=TRUE;
if(bOn)
Vaxis("off");
else
Vaxis("on");
bOn=!bOn;
}
void CRADIOView::OnAxissquare()
{
Vaxis(m_mwhAxis,"square");
}
void CRADIOView::OnAxistight()
{
Vaxis(m_mwhAxis,"tight");
}
void CRADIOView::OnBoxon()
{
static BOOL bBox=TRUE;
if(bBox)
Vset(m_mwhAxis,"box","off");
else
Vset(m_mwhAxis,"box","on");
bBox=!bBox;
}
void CRADIOView::OnFigurecolor()
{
static CHOOSECOLOR cc ;
static COLORREF crCustColors[16] ;
cc.lStructSize = sizeof (CHOOSECOLOR) ;
cc.hwndOwner = this->GetSafeHwnd();
cc.hInstance = (HWND)AfxGetInstanceHandle();
cc.rgbResult = NULL;//缺省顏色并返回顏色
cc.lpCustColors = crCustColors ;
cc.Flags = CC_SHOWHELP ;
cc.lCustData = 0 ;
cc.lpfnHook = NULL ;
cc.lpTemplateName = NULL ;
if(::ChooseColor (&cc))
{ double BKColor[3];
APPStatic::GetDoubleColor(cc.rgbResult,BKColor);
mwArray mwColor(1,3,BKColor);
Vset(m_mwhFigure,"color",mwColor);
}
}
void CRADIOView::OnXyzcolor()
{
static CHOOSECOLOR cc ;
static COLORREF crCustColors[16] ;
cc.lStructSize = sizeof (CHOOSECOLOR) ;
cc.hwndOwner = this->GetSafeHwnd();
cc.hInstance = (HWND)AfxGetInstanceHandle();
cc.rgbResult = NULL;//缺省顏色并返回顏色
cc.lpCustColors = crCustColors ;
cc.Flags = CC_SHOWHELP ;
cc.lCustData = 0 ;
cc.lpfnHook = NULL ;
cc.lpTemplateName = NULL ;
if(::ChooseColor (&cc))
{ double BKColor[3];
APPStatic::GetDoubleColor(cc.rgbResult,BKColor);
mwArray mwColor(1,3,BKColor);
Vset(m_mwhAxis,"xcolor",mwColor,"ycolor",mwColor,"zcolor",mwColor);
}
}
void CRADIOView::OnAxisbackcolor()
{
static CHOOSECOLOR cc ;
static COLORREF crCustColors[16] ;
cc.lStructSize = sizeof (CHOOSECOLOR) ;
cc.hwndOwner = this->GetSafeHwnd();
cc.hInstance = (HWND)AfxGetInstanceHandle();
cc.rgbResult = m_colorAxisColor;//缺省顏色并返回顏色
cc.lpCustColors = crCustColors ;
cc.Flags = CC_RGBINIT|CC_SHOWHELP ;
cc.lCustData = 0 ;
cc.lpfnHook = NULL ;
cc.lpTemplateName = NULL ;
if(::ChooseColor (&cc))
{ m_colorAxisColor=cc.rgbResult;
double BKColor[3];
APPStatic::GetDoubleColor(m_colorAxisColor,BKColor);
mwArray mwColor(1,3,BKColor);
Vset(m_mwhAxis,"color",mwColor);
}
}
void CRADIOView::OnTrajlinecolor()
{
static CHOOSECOLOR cc ;
static COLORREF crCustColors[16] ;
cc.lStructSize = sizeof (CHOOSECOLOR) ;
cc.hwndOwner = this->GetSafeHwnd();
cc.hInstance = (HWND)AfxGetInstanceHandle();
cc.rgbResult = m_colorAxisColor;//缺省顏色并返回顏色
cc.lpCustColors = crCustColors ;
cc.Flags = CC_RGBINIT|CC_SHOWHELP ;
cc.lCustData = 0 ;
cc.lpfnHook = NULL ;
cc.lpTemplateName = NULL ;
if(::ChooseColor (&cc))
{ m_colorLineTrajColor=cc.rgbResult;
double dColor[3];
APPStatic::GetDoubleColor(m_colorLineTrajColor,dColor);
Vset(m_mwhLineTraj,"color",mwArray(1,3,dColor));
}
}
void CRADIOView::OnGrid()
{
static BOOL bGrid=TRUE;
if(bGrid)
Vset(m_mwhAxis,"xgrid","off","ygrid","off","zgrid","off");
else
Vset(m_mwhAxis,"xgrid","on","ygrid","on","zgrid","on");
bGrid=!bGrid;
}
void CRADIOView::OnAxislimit()
{
CDialogAxisLimit dialogAl;
BOOL bAssertFailed;
do{
if(dialogAl.DoModal()==IDOK){
// dialogAl.UpdateData(TRUE);
bAssertFailed=dialogAl.m_dX1>=dialogAl.m_dX2 || dialogAl.m_dY1>=dialogAl.m_dY2
|| dialogAl.m_dZ1>=dialogAl.m_dZ2;
if(bAssertFailed)
{MessageBox("軸范圍錯誤");}}
else {
bAssertFailed=FALSE;
return;
}
}while(bAssertFailed);
Vset(m_mwhAxis,"xlim",horzcat(dialogAl.m_dX1,dialogAl.m_dX2),
"ylim",horzcat(dialogAl.m_dY1,dialogAl.m_dY2),
"zlim",horzcat(dialogAl.m_dZ1,dialogAl.m_dZ2));
}
void CRADIOView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
{
//從文件初始化
CScrollView::OnActivateView(bActivate, pActivateView, pDeactiveView);
}
void CRADIOView::OnView3d()
{
view(m_mwhAxis,-36,16);
}
void CRADIOView::OnUpdateView3d(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bIsMatlabFigureShowing);
}
void CRADIOView::OnTraceplane()
{
m_bTracePlane=!m_bTracePlane;
//if(m_bInitState){
Vaxis(m_mwhAxis,"auto");
// }
}
void CRADIOView::OnUpdateTraceplane(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bIsMatlabFigureShowing);
pCmdUI->SetCheck(m_bTracePlane);
}
void CRADIOView::OnSetbeacon()
{
m_pDlgBeacon=new CDlgBeacon();
m_pDlgBeacon->Create(IDD_BEACON,this);
m_pDlgBeacon->ShowWindow(SW_SHOW);
}
CBeaconManage* CRADIOView::GetBeaconManage()
{
return &m_beaconManage;
}
void CRADIOView::OnInitstate()
{
//從文件初始化
m_bInitState=TRUE;
if(!m_fileAccess.InitializeFileAccess(GetDocument()->m_strTrajFileName.GetBuffer(0))) return;
m_traj3dShow.Init3DShow(m_fileAccess.GetCurrentPackageData().lon,m_fileAccess.GetCurrentPackageData().lat,m_fileAccess.GetCurrentPackageData().heg);
RefreshMeters();
//畫beacon
m_beaconManage.DrawBeacon(m_mwhAxis);
//
m_dlgSheet1.m_strBeaconLa.Format("%6.3lf",0);
m_dlgSheet1.m_strBeaconPhi.Format("%6.3lf",0);
m_dlgSheet1.UpdateData(FALSE);
m_fileAccess.EndFileAccess();
}
void CRADIOView::OnUpdateInitstate(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!m_bSimuStarted);
}
void CRADIOView::OnUpdateFilesetting(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(!m_bSimuStarted);
}
void CRADIOView::OnUpdateSetbeacon(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!m_bSimuStarted);
}
void CRADIOView::Stop()
{
KillTimer(ID_TIMER_SIMU);
KillTimer(ID_TIMER_DIS);
KillTimer(ID_TIMER_AZ);
KillTimer(ID_TIMER_RADIOFILE);
//Close,ar向File flush
if(m_pBeaconSimu->m_pArRadio){
m_pBeaconSimu->m_pArRadio->Close();
delete(m_pBeaconSimu->m_pArRadio);
}
if(m_pBeaconSimu->m_pFileRadio){
m_pBeaconSimu->m_pFileRadio->Close();
delete(m_pBeaconSimu->m_pFileRadio);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -