using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using ComponentFactory.Krypton.Docking; using ComponentFactory.Krypton.Navigator; using ComponentFactory.Krypton.Toolkit; using ComponentFactory.Krypton.Workspace; using System.Runtime.InteropServices; using UCDraw.UC; using System.IO; using UCDraw; using GeoSigma.UCDraw; using UCDraw.Editor; //using SymbolLibManager; namespace LibTest { public partial class FormMain : Form { int nViewCount = 0; MainView viewerCur; public FormMain() { InitializeComponent(); //this.WindowState = FormWindowState.Maximized; } private void Form1_Load(object sender, EventArgs e) { //KryptonDockingWorkspace ws = dockingManager.ManageWorkspace(dockableWorkspace); //dockingManager.ManageControl(kryptonPanel1, ws); //dockingManager.ManageFloating(this); //OpenFile("c:\\temp\\钻探目标分布图.dfd"); //OpenFile("c:\\temp\\某地区射层层深度构造图.dfd"); } private KryptonPage CreateNewPage(MainView viewer, string pageText) { FileInfo fi = new FileInfo(pageText); //KryptonWorkspaceCell cell = dockableWorkspace.ActiveCell; //if (cell==null) //{ // cell=new KryptonWorkspaceCell(); // dockableWorkspace.Root.Children.Add(cell); // cell.SelectedPageChanged+=Cell_SelectedPageChanged; //} //cell.CloseAction += OnClsoeAction; KryptonPage pageView = new KryptonPage(); //pageView.StateSelected.Tab.Back.Color1 = System.Drawing.SystemColors.GradientActiveCaption; //pageView.StateSelected.Tab.Back.Color2 = System.Drawing.SystemColors.GradientInactiveCaption; //pageView.Text=fi.Name; //pageView.TextTitle=pageView.Text; //pageView.TextDescription=pageView.Text; //pageView.ToolTipStyle= LabelStyle.ToolTip; //pageView.ToolTipTitle=fi.FullName; //pageView.UniqueName=viewer.ID+""; //// Create a close button for the page //ButtonSpecAny bsa = new ButtonSpecAny(); //bsa.Tag=pageView; //bsa.Type=PaletteButtonSpecStyle.Close; //bsa.Click+=new EventHandler(OnClosePage); //pageView.ButtonSpecs.Add(bsa); //// Add the control for display inside the page //viewer.Dock=DockStyle.Fill; //pageView.Controls.Add(viewer); ////viewers.Add(viewerCur); //viewerCur=viewer; ////// Add docking pages ////cell.Pages.Add(pageView); ////cell.SelectedPage=pageView; //viewerCur.MouseMoveXYEvent += ShowMouseXY; return pageView; } private void OnClosePage(object sender, EventArgs e) { // Find the page this button is contained within ButtonSpecAny bsa = (ButtonSpecAny)sender; //KryptonPage page = (KryptonPage)bsa.Tag; // Close the page ClosePage((KryptonPage)bsa.Tag); } /// /// 关闭页面 /// /// 要闭关的页面 /// true-取消闭关 false--关闭 //ToFix:这个规定返回值是否不合理 private bool ClosePage(KryptonPage page) { // We must have a page to actually close if (page!=null) { // bool bModified = false; if (viewerCur !=null && viewerCur.IsDocumentModified()) { bModified = true; } // // If the page is dirty then we need to ask if it should be saved if (page.Text.EndsWith("*") || bModified) { switch (MessageBox.Show("是否将修改保存到'"+page.Text.TrimEnd('*')+"' ?", "关闭文档", MessageBoxButtons.YesNoCancel)) { case DialogResult.Cancel: // Returning true indicates the operation was cancelled return true; case DialogResult.Yes: btnSaveFile_Click(null, null); break; case DialogResult.No: break; } } // Remove the page from the containing cell //KryptonWorkspaceCell cell = dockableWorkspace.CellForPage(page); //cell.Pages.Remove(page); //page.Dispose(); } return false; } private void SetDirtyFlag(bool isDirty) { //KryptonPage pageView = dockableWorkspace.ActivePage; //if (pageView==null) return; //SetDirtyFlag(pageView, isDirty); } private void SetDirtyFlag(KryptonPage pageView, bool isDirty) { if (!isDirty) { pageView.Text=pageView.Text.TrimEnd('*'); pageView.TextTitle=pageView.TextTitle.TrimEnd('*'); pageView.TextDescription=pageView.TextDescription.TrimEnd('*'); } else { pageView.Text=pageView.Text.TrimEnd('*')+"*"; pageView.TextTitle=pageView.TextTitle.TrimEnd('*')+"*"; pageView.TextDescription=pageView.TextDescription.TrimEnd('*')+"*"; } } private void SetTitle(string fullFileName) { //KryptonPage pageView = dockableWorkspace.ActivePage; //if (pageView==null) return; //FileInfo fi = new FileInfo(fullFileName); //pageView.Text=fi.Name; //pageView.TextTitle=pageView.Text; //pageView.TextDescription=pageView.Text; //pageView.ToolTipStyle=LabelStyle.ToolTip; //pageView.ToolTipTitle=fi.FullName; } /// /// 新建图形 /// /// /// private void btnNewFile_Click(object sender, EventArgs e) { NewFile(); } private void NewFile() { //MainView viewer = new MainView(); //if (viewer.NewFile() == false) //{ // return; //} //string strPageText = "图形 " + (++nViewCount); //KryptonPage pageView = CreateNewPage(viewer, strPageText); //SetDirtyFlag(pageView, true); //viewer.LoadLayerTree(); } private void btnOpenFile_Click(object sender, EventArgs e) { string[] fileNames = DocHelper.SelectMutiFiles(); foreach (var item in fileNames) { if (string.IsNullOrEmpty(item)) { OpenFile(item); } } } private void OpenFile(string fileName) { //MainView viewer = new MainView(); //if (viewer.OpenFile(fileName)==false) //{ // return; //} ////string strPageText = "图形 "+(nViewCount+1); //CreateNewPage(viewer, fileName); //viewer.DrawerGotFocus+=Viewer_DrawerGotFocus; } /// /// 文件保存 /// /// /// private void btnSaveFile_Click(object sender, EventArgs e) { SaveFile(); } private void SaveFile() { if (viewerCur == null) return; if (viewerCur.SaveFile()) { SetTitle(viewerCur.FileFullName); //SetDirtyFlag(false); //UpdateApplicationTitle(); } } private void btnSaveAs_Click(object sender, EventArgs e) { if (viewerCur==null) return; if (viewerCur.SaveAs()) { SetTitle(viewerCur.FileFullName); //SetDirtyFlag(false); } } private void Viewer_DrawerGotFocus(object sender, EventArgs e) { //MessageBox.Show(sender.ToString()); } private void Cell_SelectedPageChanged(object sender, EventArgs e) { //修复Bug:当新建/打开一个文档后 viewerCur未能指向新的MainView //出错原因:dockableWorkspace.ActivePage获得的是未新建/打开文档前的当前文档 KryptonWorkspaceCell cell = sender as KryptonWorkspaceCell; if (cell == null) { return; } KryptonPage pageView = cell.SelectedPage; if (pageView==null) return; if(pageView.Controls.Count>0) viewerCur = pageView.Controls[0] as MainView; //KryptonPage pageView = dockableWorkspace.ActivePage; //if (pageView==null) return; //if(pageView.Controls.Count>0) // viewerCur = pageView.Controls[0] as MainView; } /*从最右侧点击X 来关闭一个页面 会调这个函数三次 我难以解决此问题 暂时屏蔽掉 //响应最右侧的关闭按钮触发的关闭事件 private void OnClsoeAction(object sender, CloseActionEventArgs e) { KryptonPage page = dockableWorkspace.ActivePage; MainView viewer = null; if (page.Controls.Count > 0) viewer = page.Controls[0] as MainView; if (viewer == null) { return; } bool bModified = false; if (viewer.IsDocumentModified()) { bModified = true; } if (bModified == false) return; DialogResult result = MessageBox.Show("是否将修改保存到'" + page.Text.TrimEnd('*') + "' ?", "关闭文档", MessageBoxButtons.YesNoCancel); if (result == DialogResult.OK) { btnSaveFile_Click(null, null); } else if (result == DialogResult.Cancel) { e.Action = CloseButtonAction.None; } } */ private void layerTree_Click(object sender, EventArgs e) { viewerCur.LayerVisible=!viewerCur.LayerVisible; } private void btnPropertyShow_Click(object sender, EventArgs e) { viewerCur.PropertyVisible=!viewerCur.PropertyVisible; } private void tsbToolElement_Click(object sender, EventArgs e) { viewerCur.ToolElementVisible=!viewerCur.ToolElementVisible; } private void tsbPrint_Click(object sender, EventArgs e) { viewerCur.PrintDraw(); } private enum KeyModifiers { None = 0, Alt = 1, Control = 2, Shift = 4, Windows = 8 } //id hot key identifier [DllImport("user32.dll", SetLastError = true)] private static extern bool RegisterHotKey(IntPtr hWnd, int id, KeyModifiers fsModifiers, Keys vk); [DllImport("user32.dll", SetLastError = true)] private static extern bool UnregisterHotKey(IntPtr hWnd, int id); private void RegisterHotKeys() { RegisterHotKey(Handle, 1001, KeyModifiers.Control, Keys.O); RegisterHotKey(Handle, 1002, KeyModifiers.Control, Keys.S); RegisterHotKey(Handle, 1003, KeyModifiers.Control, Keys.N); RegisterHotKey(Handle, 1004, KeyModifiers.None, Keys.Escape); } private void UnRegisterHotKeys() { UnregisterHotKey(Handle, 1001); UnregisterHotKey(Handle, 1002); UnregisterHotKey(Handle, 1003); UnregisterHotKey(Handle, 1004); } //private void processHotKey(int hotKeyId) //{ // if (hotKeyId == 1001) // { // //OpenFile(); // } // else if(hotKeyId == 1002) // { // SaveFile(); // } // else if(hotKeyId == 1003) // { // NewFile(); // } // else if (hotKeyId == 1004) // { // ProcessEscape(); // } //} //protected override void WndProc(ref Message m)//监视Windows消息 //{ // const int WM_HOTKEY = 0x0312; //热键消息 // if (m.Msg == WM_HOTKEY) // { // processHotKey(m.WParam.ToInt32()); // } // base.WndProc(ref m); //} //private void FormMain_Activated(object sender, EventArgs e) //{ // RegisterHotKeys(); //} //private void FormMain_Deactivate(object sender, EventArgs e) //{ // UnRegisterHotKeys(); //} //private void ProcessEscape() //{ // if (viewerCur == null) // return; // viewerCur.Escape(); //} private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { //KryptonWorkspaceCell cell = dockableWorkspace.ActiveCell; //if (cell == null) //{ // return; //} //KryptonPage[] pageArray = cell.Pages.ToArray(); //foreach (KryptonPage page in pageArray) //{ // if (page.Controls.Count == 0) //应该不可能出现的情况 // break; //TODO:log // if (ClosePage(page) == true) // { // e.Cancel = true; // break; // } //} //end foreach } //end FormMain_FormClosing public void ShowMouseXY(string mouseXY) { tsslStatusInfo.Text = mouseXY; } private void btnSymbolManage_Click(object sender, EventArgs e) { //var markEdit = new frmMarkEditor(); //markEdit.Show(); } } }