📄 formpocketearth.cs
字号:
MenuItem mi;
// Find the menu item that corresponds to the specified zoom level
// so we can put a checkmark next to that menu item when it is displayed.
switch (zoomLevel)
{
case 3: mi = menuZoom1; break;
case 5: mi = menuZoom2; break;
case 7: mi = menuZoom3; break;
case 9: mi = menuZoom4; break;
case 11: mi = menuZoom5; break;
case 13: mi = menuZoom6; break;
case 15: mi = menuZoom7; break;
case 17: mi = menuZoom8; break;
case 19: mi = menuZoom9; break;
default: throw new ArgumentException("Zoom level is invalid.", "zoomLevel");
}
Zoom(zoomLevel, mi);
}
/// <summary>
/// Handle any zoom menu item.
/// </summary>
/// <param name="zoomLevel">The requested zoom level</param>
/// <param name="sender">The menu item</param>
private void Zoom(int zoomLevel, object sender)
{
map.ZoomLevel = zoomLevel;
// Keep track of which menu item is checked
this.checkedMenu = (MenuItem)sender;
RedrawMap();
}
private void menuZoom1_Click(object sender, EventArgs e)
{
Zoom(3, sender);
}
private void menuZoom2_Click(object sender, EventArgs e)
{
Zoom(5, sender);
}
private void menuZoom3_Click(object sender, EventArgs e)
{
Zoom(7, sender);
}
private void menuZoom4_Click(object sender, EventArgs e)
{
Zoom(9, sender);
}
private void menuZoom5_Click(object sender, EventArgs e)
{
Zoom(11, sender);
}
private void menuZoom6_Click(object sender, EventArgs e)
{
Zoom(13, sender);
}
private void menuZoom7_Click(object sender, EventArgs e)
{
Zoom(15, sender);
}
private void menuZoom8_Click(object sender, EventArgs e)
{
Zoom(17, sender);
}
private void menuZoom9_Click(object sender, EventArgs e)
{
Zoom(19, sender);
}
private void menuAddress_Click(object sender, EventArgs e)
{
using (FormAddress frm = new FormAddress())
{
if (frm.ShowDialog() != DialogResult.Cancel)
{
SearchForAddress(frm.Address);
}
}
}
private void SearchForAddress(string address)
{
bool foundResults;
double lat1, long1, lat2, long2;
// Ask VirtualEarth to do the search
foundResults = Search.SearchForAddress(address, out lat1, out long1, out lat2, out long2);
if (foundResults)
{
map.SetViewport(lat1, long1, lat2, long2);
// This will checkmark the correct zoom menu item and
// redraw the map.
Zoom(map.ZoomLevel);
}
else
{
MessageBox.Show("No search results found for " + address, FormPocketEarth.AppName);
}
}
private void menuZoom_Popup(object sender, EventArgs e)
{
MenuItem menuParent = (MenuItem)sender;
// Set the checked state of all the sub-menu items
foreach (MenuItem m in menuParent.MenuItems)
{
m.Checked = (checkedMenu == m);
}
}
private void menuAbout_Click(object sender, EventArgs e)
{
FormAboutPocketEarth frm = new FormAboutPocketEarth();
frm.ShowDialog();
frm.Dispose();
}
private void FormPocketEarth_Paint(object sender, PaintEventArgs e)
{
map.Paint(e.Graphics);
}
private void FormPocketEarth_KeyDown(object sender, KeyEventArgs e)
{
// Pan by one quarter the size of the map.
int deltaX = Size.Width / 4;
int deltaY = Size.Height / 4;
int newZoom;
// Pan or zoom the map.
switch (e.KeyCode)
{
case Keys.Enter:
case (Keys)120: // Pound key
case Keys.D5:
// Zoom in.
newZoom = map.ZoomLevel + 2;
if (newZoom <= map.MaximumZoom)
{
Zoom(newZoom);
}
break;
case (Keys)119: // Star key
// Zoom out.
newZoom = map.ZoomLevel - 2;
if (newZoom >= map.MinimumZoom)
{
Zoom(newZoom);
}
break;
case Keys.Up:
case Keys.D2:
map.Y -= deltaY;
RedrawMap();
break;
case Keys.Down:
case Keys.D8:
map.Y += deltaY;
RedrawMap();
break;
case Keys.Left:
case Keys.D4:
map.X -= deltaX;
RedrawMap();
break;
case Keys.Right:
case Keys.D6:
map.X += deltaX;
RedrawMap();
break;
case Keys.D1:
map.Y -= deltaY;
map.X -= deltaX;
RedrawMap();
break;
case Keys.D3:
map.Y -= deltaY;
map.X += deltaX;
RedrawMap();
break;
case Keys.D7:
map.Y += deltaY;
map.X -= deltaX;
RedrawMap();
break;
case Keys.D9:
map.Y += deltaY;
map.X += deltaX;
RedrawMap();
break;
}
}
private void RedrawMap()
{
// Clean up the cache so we will try to refetch any bad bitmaps.
MapTiles.PurgeBadBitmaps();
// Invalidate the window.
Invalidate();
}
private void menuExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void menuGps_Click(object sender, EventArgs e)
{
// Obtain lat/long from the GPS device
Gps gps = new Gps();
gps.Open();
GpsPosition pos = gps.GetPosition();
gps.Close();
if (pos == null || !pos.LongitudeValid || !pos.LatitudeValid)
{
MessageBox.Show("Could not obtain a location from a GPS device.", FormPocketEarth.AppName);
}
else
{
map.Latitude = pos.Latitude;
map.Longitude = pos.Longitude;
RedrawMap();
}
}
private void menuFindContact_Click(object sender, EventArgs e)
{
ChooseContactDialog dlg = new ChooseContactDialog();
//dlg.RequiredProperties = new ContactProperty[] {ContactProperty.HomeAddressStreet, ContactProperty.BusinessAddressStreet };
if (dlg.ShowDialog() == DialogResult.OK)
{
Contact c = dlg.SelectedContact;
if (c.HomeAddressStreet.Length > 0)
{
SearchForAddress(c.HomeAddressStreet + ", " + c.HomeAddressCity + ", " + c.HomeAddressState);
}
else if (c.BusinessAddressStreet.Length > 0)
{
SearchForAddress(c.BusinessAddressStreet + ", " + c.BusinessAddressCity + ", " + c.HomeAddressState);
}
else
{
MessageBox.Show(c.FileAs + " does not have an address.", FormPocketEarth.AppName);
}
}
}
private void FormPocketEarth_Deactivate(object sender, EventArgs e)
{
}
private void menuLocalSearch_Click(object sender, EventArgs e)
{
using (FormBusiness frm = new FormBusiness())
{
if (frm.ShowDialog() == DialogResult.OK)
{
double lat1, lon1, lat2, lon2;
// Figure out which area to search
map.GetViewport(out lat1, out lon1, out lat2, out lon2);
ArrayList searchResults =
Search.SearchForBusiness(frm.Business, lat1, lon1, lat2, lon2);
if (searchResults.Count == 0)
{
MessageBox.Show("No matches were found for " + frm.Business + ".", FormPocketEarth.AppName);
}
else
{
// Show all the search results
using (FormBusinessSearchResults frmSearchResults = new FormBusinessSearchResults(searchResults))
{
if (frmSearchResults.ShowDialog() == DialogResult.OK)
{
// User picked one result, so navigate to it.
map.Latitude = frmSearchResults.SearchResult.Latitude;
map.Longitude = frmSearchResults.SearchResult.Longitude;
// This is a good, street-level zoom.
map.ZoomLevel = 13;
RedrawMap();
}
}
}
}
}
}
private void menuOptions_Click(object sender, EventArgs e)
{
using (FormOptions frm = new FormOptions())
{
frm.ShowDialog();
}
}
private void FormPocketEarth_Load(object sender, EventArgs e)
{
this.Text = FormPocketEarth.AppName;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -