首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

VC,MAPX 的打印,鹰眼,该如何处理

2013-01-05 
VC,MAPX 的打印,鹰眼1.看了网上的一些资料,打印的时候 使用 PrintMap 函数的,他的第一次参数是 HDC 的,这

VC,MAPX 的打印,鹰眼
 
 1.看了网上的一些资料,打印的时候 使用 PrintMap 函数的,他的第一次参数是 HDC 的,这个dc怎么获取的啊,书上也是一带而过的,打印设备上下文的,不知道这个dc是怎么获取的啊?

 2. vc+mapx 的鹰眼是怎么做的啊,有工程文件吗,网上找到的一些函数很多变量都不知道是那里申明的...


[解决办法]
看来你的VC水平不怎么样..
找个VC用得多点的人指导一下吧

遗憾的是 我VC也不咋的且多年不练了
[解决办法]

// NavigationBar.cpp: implementation of the CNavigationBar class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "global.h"
#include "GStar.h"
#include "MainFrm.h"
#include "NavigationBar.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
//
BEGIN_MESSAGE_MAP(CNavigationBar, CBCGSizingControlBar)
//{{AFX_MSG_MAP(CNavigationBar)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_CONTEXTMENU()
ON_WM_WINDOWPOSCHANGED()
ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_EVENTSINK_MAP(CNavigationBar, CBCGSizingControlBar)
    //{{AFX_EVENTSINK_MAP(CMy01Dlg)
ON_EVENT(CNavigationBar, IDC_NAVIGATION, 4 /* AfterTrackingLayerDraw */, OnAfterTrackingLayerDrawMap2, VTS_I4)
ON_EVENT(CNavigationBar, IDC_NAVIGATION, -605 /* MouseDown */, OnMouseDownMap2, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
ON_EVENT(CNavigationBar, IDC_NAVIGATION, -607 /* MouseUp */, OnMouseUpMap2, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
ON_EVENT(CNavigationBar, IDC_NAVIGATION, -606 /* MouseMove */, OnMouseMoveMap2, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CNavigationBar::CNavigationBar()
{
m_pViewMap=NULL;
}

CNavigationBar::~CNavigationBar()
{

}

int CNavigationBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CBCGSizingControlBar::OnCreate(lpCreateStruct) == -1)
return -1;

CRect rectDummy;
rectDummy.SetRectEmpty ();

// Create tabs window:
if (!m_wndTab.Create (CBCGTabWnd::STYLE_3D, rectDummy, this, 1))
{
TRACE0("Failed to create workspace tab window\n");
return -1;      // fail to create
}

m_wndTab.SetImageList (IDB_WORKSPACE, 16, RGB (255, 0, 0));

if(!m_map.Create("Navigator",WS_VISIBLE
[解决办法]
WS_CHILD
[解决办法]
WS_BORDER
[解决办法]
WS_THICKFRAME,CRect(0,0,100,100),this,IDC_NAVIGATION))//&m_wndTab
return -1;
m_wndTab.AddTab(&m_map, _T("导航"), 2);
return 0;
}

void CNavigationBar::OnSize(UINT nType, int cx, int cy) 
{
CBCGSizingControlBar::OnSize(nType, cx, cy);
//Resize(m_map,cx,cy,1);


// Tab control should cover a whole client area:
m_wndTab.SetWindowPos (NULL, -1, -1, cx, cy,
SWP_NOMOVE 
[解决办法]
 SWP_NOACTIVATE 
[解决办法]
 SWP_NOZORDER);
}

void CNavigationBar::OnContextMenu(CWnd* pWnd, CPoint point) 
{

}

BOOL CNavigationBar::PreTranslateMessage(MSG* pMsg) 
{
if (pMsg->message == WM_KEYDOWN &&
pMsg->wParam == VK_ESCAPE)
{
CMainFrame* pMainFrame = (CMainFrame*) AfxGetMainWnd ();
ASSERT_VALID (pMainFrame);

if (pMainFrame->GetActivePopup () == NULL)
{
pMainFrame->SetFocus ();
return TRUE;
}
}
return CBCGSizingControlBar::PreTranslateMessage(pMsg);
}

void CNavigationBar::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 
{
CBCGSizingControlBar::OnWindowPosChanged(lpwndpos);
}

void CNavigationBar::RefreshLyrs()
{
CMoLayers lyrs(m_map.GetLayers());
CMoMapLayer lyr;
lyrs.Clear();
CMoLayers viewlyrs(m_pViewMap->GetLayers());
int iCount=viewlyrs.GetCount();
for(int i=0; i<iCount; i++)
{
lyrs.Add(viewlyrs.Item(COleVariant(long(i))));
}

//m_map.Refresh();
}

void CNavigationBar::SetMap(CMap1 *pMap)
{
m_pViewMap=pMap;
}

void CNavigationBar::OnAfterTrackingLayerDrawMap2(long hDC) 
{
// TODO: Add your control notification handler code here
if(m_pViewMap==NULL) return;
CMoLayers lyrs(m_map.GetLayers());
if(lyrs.GetCount()==0)
return;

CMoSymbol sym;
sym.CreateDispatch("MapObjects2.Symbol");
if(sym.m_lpDispatch != NULL)
{
sym.SetSymbolType(moFillSymbol);
sym.SetOutlineColor(moRed);
sym.SetStyle(moTransparentFill);
m_map.DrawShape(m_pViewMap->GetExtent(),sym);
}

if(m_rect.m_lpDispatch != NULL)
{
sym.SetOutlineColor(moBlue);
m_map.DrawShape(m_rect,sym);
}
}

void CNavigationBar::OnMouseDownMap2(short Button, short Shift, long X, long Y) 
{
if(m_pViewMap==NULL) return;
CMoLayers lyrs(m_map.GetLayers());
if(lyrs.GetCount()==0)
return;
CMoPointpt(m_map.ToMapPoint(X,Y));
if(m_pViewMap->GetExtent().IsPointIn(pt))
{
::SetCapture(m_map.m_hWnd );
if(m_rect.m_lpDispatch != NULL)
m_rect.ReleaseDispatch();
m_rect.CreateDispatch("MapObjects2.Rectangle");
if(m_rect.m_lpDispatch != NULL)
{
m_rect = m_pViewMap->GetExtent();
m_point = m_map.ToMapPoint(X,Y);
}
}

}

void CNavigationBar::OnMouseUpMap2(short Button, short Shift, long X, long Y) 
{
// TODO: Add your control notification handler code here
if(m_pViewMap==NULL) return;
CMoLayers lyrs(m_map.GetLayers());
if(lyrs.GetCount()==0)
return;
if(m_rect.m_lpDispatch != NULL)
{
m_pViewMap->SetExtent(m_rect);
::ReleaseCapture();
m_rect.ReleaseDispatch();
RefreshTrackingLayer();
}
}

void CNavigationBar::OnMouseMoveMap2(short Button, short Shift, long X, long Y) 


{
// TODO: Add your control notification handler code here
if(m_pViewMap==NULL) return;
CMoLayers lyrs(m_map.GetLayers());
if(lyrs.GetCount()==0)
return;
if(m_rect.m_lpDispatch != NULL)
{
CMoPoint pt(m_map.ToMapPoint(X,Y));
m_rect.Offset(pt.GetX() - m_point.GetX(),pt.GetY()-m_point.GetY());
m_point = pt;
RefreshTrackingLayer();
}
}


void CNavigationBar::Refresh()
{
RefreshTrackingLayer();
//m_map.Refresh();
}

void CNavigationBar::Clear()
{
CMoLayers lyrs(m_map.GetLayers());
int iCount=lyrs.GetCount();
for(int i=iCount-1; i>=0; i--)
lyrs.Remove(i);
m_map.Refresh();
}

void CNavigationBar::RefreshTrackingLayer()
{
VARIANT va;
VariantInit(&va);
va.vt = VT_DISPATCH;  
CMoRectangle mrt(m_map.GetExtent());
va.pdispVal = mrt.m_lpDispatch;
CMoTrackingLayer tLayer(m_map.GetTrackingLayer());
tLayer.Refresh(true, va);
}

void CNavigationBar::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
if(nChar=='\n')
{
CMoLayers lyrs(m_map.GetLayers());
CMoMapLayer lyr;
int iCount=lyrs.GetCount();
for(int i=0; i<iCount; i++)
{
lyr=lyrs.Item(COleVariant(long(i)));
lyr.SetVisible(TRUE);
 }
}
CBCGSizingControlBar::OnKeyDown(nChar, nRepCnt, nFlags);
}
这是鹰眼的实现,参考一下

热点排行