VC,MAPX 的打印,鹰眼
1.看了网上的一些资料,打印的时候 使用 PrintMap 函数的,他的第一次参数是 HDC 的,这个dc怎么获取的啊,书上也是一带而过的,打印设备上下文的,不知道这个dc是怎么获取的啊?
2. vc+mapx 的鹰眼是怎么做的啊,有工程文件吗,网上找到的一些函数很多变量都不知道是那里申明的...
[解决办法]
看来你的VC水平不怎么样..
找个VC用得多点的人指导一下吧
遗憾的是 我VC也不咋的且多年不练了
[解决办法]
// 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);
}
这是鹰眼的实现,参考一下