⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winwordcontrol.cs

📁 在C#中直接打开Word文件并编辑
💻 CS
📖 第 1 页 / 共 2 页
字号:
			if (wordWnd!=0)
			{
				SetParent( wordWnd, this.Handle.ToInt32());				
			
				object fileName = filename;
				object newTemplate = false;
				object docType = 0;
				object readOnly = true;
				object isVisible = true;
				object missing = System.Reflection.Missing.Value;
			
				try
				{
					if( wd == null )
					{
						throw new WordInstanceException();
					}

					if( wd.Documents == null )
					{
						throw new DocumentInstanceException();
					}
				
					if( wd != null && wd.Documents != null )
					{
						document = wd.Documents.Add(ref fileName, ref newTemplate, ref docType, ref isVisible);
					}
							
					if(document == null)
					{
						throw new ValidDocumentException();
					}
				}
				catch
				{
				}

				try
				{
					wd.ActiveWindow.DisplayRightRuler=false;
					wd.ActiveWindow.DisplayScreenTips=false;
					wd.ActiveWindow.DisplayVerticalRuler=false;
					wd.ActiveWindow.DisplayRightRuler=false;
					wd.ActiveWindow.ActivePane.DisplayRulers=false;
					wd.ActiveWindow.ActivePane.View.Type = Word.WdViewType.wdWebView; 
					//wd.ActiveWindow.ActivePane.View.Type = Word.WdViewType.wdPrintView;//wdWebView; // .wdNormalView;
				}
				catch
				{

				}


				/// Code Added
				/// Disable the specific buttons of the command bar
				/// By default, we disable/hide the menu bar
				/// The New/Open buttons of the command bar are disabled
				/// Other things can be added as required (and supported ..:) )
				/// Lots of commented code in here, if somebody needs to disable specific menu or sub-menu items.
				/// 
				int counter = wd.ActiveWindow.Application.CommandBars.Count;
				for(int i = 1; i <= counter;i++)
				{
					try
					{
						
						String nm=wd.ActiveWindow.Application.CommandBars[i].Name;
						if(nm=="Standard")
						{
							//nm=i.ToString()+" "+nm;
							//MessageBox.Show(nm);
							int count_control=wd.ActiveWindow.Application.CommandBars[i].Controls.Count;
							for(int j=1;j<=2;j++)
							{
								//MessageBox.Show(wd.ActiveWindow.Application.CommandBars[i].Controls[j].ToString());
								wd.ActiveWindow.Application.CommandBars[i].Controls[j].Enabled=false;

							}
						}
						
						if(nm=="Menu Bar")
						{
							//To disable the menubar, use the following (1) line
							wd.ActiveWindow.Application.CommandBars[i].Enabled=false;

							/// If you want to have specific menu or sub-menu items, write the code here. 
							/// Samples commented below

							//							MessageBox.Show(nm);
							//int count_control=wd.ActiveWindow.Application.CommandBars[i].Controls.Count;
							//MessageBox.Show(count_control.ToString());						

							/*
							for(int j=1;j<=count_control;j++)
							{
								/// The following can be used to disable specific menuitems in the menubar	
								/// wd.ActiveWindow.Application.CommandBars[i].Controls[j].Enabled=false;

								//MessageBox.Show(wd.ActiveWindow.Application.CommandBars[i].Controls[j].ToString());
								//MessageBox.Show(wd.ActiveWindow.Application.CommandBars[i].Controls[j].Caption);
								//MessageBox.Show(wd.ActiveWindow.Application.CommandBars[i].Controls[j].accChildCount.ToString());


								///The following can be used to disable some or all the sub-menuitems in the menubar
								
								 
								////Office.CommandBarPopup c;
								////c = (Office.CommandBarPopup)wd.ActiveWindow.Application.CommandBars[i].Controls[j];
								////
								////for(int k=1;k<=c.Controls.Count;k++)
								////{
								////	//MessageBox.Show(k.ToString()+" "+c.Controls[k].Caption + " -- " + c.Controls[k].DescriptionText + " -- " );
								////	try
								////	{
								////		c.Controls[k].Enabled=false;
								////		c.Controls["Close Window"].Enabled=false;
								////	}
								////	catch
								////	{
								////
								////	}
								////}
								
								

									//wd.ActiveWindow.Application.CommandBars[i].Controls[j].Control	 Controls[0].Enabled=false;
								}
								*/
								
							}
						
						nm="";
					}
					catch(Exception ex)
					{
						MessageBox.Show(ex.ToString());						
					}
				}


				
				// Show the word-document
				try
				{
					wd.Visible = true;
					wd.Activate();
				
					SetWindowPos(wordWnd,this.Handle.ToInt32(),0,0,this.Bounds.Width,this.Bounds.Height, SWP_NOZORDER | SWP_NOMOVE | SWP_DRAWFRAME | SWP_NOSIZE);
					
					//Call onresize--I dont want to write the same lines twice
					OnResize();
				}
				catch
				{
					MessageBox.Show("Error: do not load the document into the control until the parent window is shown!");
				}

				/// We want to remove the system menu also. The title bar is not visible, but we want to avoid accidental minimize, maximize, etc ..by disabling the system menu(Alt+Space)
				try
				{
					int hMenu = GetSystemMenu(wordWnd, false);
					if(hMenu>0)
					{
						int	menuItemCount = GetMenuItemCount(hMenu);
						RemoveMenu(hMenu, menuItemCount - 1, MF_REMOVE | MF_BYPOSITION);
						RemoveMenu(hMenu, menuItemCount - 2, MF_REMOVE | MF_BYPOSITION);
						RemoveMenu(hMenu, menuItemCount - 3, MF_REMOVE | MF_BYPOSITION);
						RemoveMenu(hMenu, menuItemCount - 4, MF_REMOVE | MF_BYPOSITION);
						RemoveMenu(hMenu, menuItemCount - 5, MF_REMOVE | MF_BYPOSITION);
						RemoveMenu(hMenu, menuItemCount - 6, MF_REMOVE | MF_BYPOSITION);
						RemoveMenu(hMenu, menuItemCount - 7, MF_REMOVE | MF_BYPOSITION);
						RemoveMenu(hMenu, menuItemCount - 8, MF_REMOVE | MF_BYPOSITION);
						DrawMenuBar(wordWnd);
					}
				}
				catch{};



				this.Parent.Focus();
				
			}
			deactivateevents = false;
		}


		/// <summary>
		/// restores Word.
		/// If the program crashed somehow.
		/// Sometimes Word saves it's temporary settings :(
		/// </summary>
		public void RestoreWord()
		{
			try
			{
				int counter = wd.ActiveWindow.Application.CommandBars.Count;
				for(int i = 0; i < counter;i++)
				{
					try
					{
						wd.ActiveWindow.Application.CommandBars[i].Enabled=true;
					}
					catch
					{

					}
				}
			}
			catch{};
			
		}

		/// <summary>
		/// internal resize function
		/// utilizes the size of the surrounding control
		/// 
		/// optimzed for Word2000 but it works pretty good with WordXP too.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void OnResize()
		{
			//The original one that I used is shown below. Shows the complete window, but its buttons (min, max, restore) are disabled
			//// MoveWindow(wordWnd,0,0,this.Bounds.Width,this.Bounds.Height,true);


			///Change below
			///The following one is better, if it works for you. We donot need the title bar any way. Based on a suggestion.
			int borderWidth = SystemInformation.Border3DSize.Width;
			int borderHeight = SystemInformation.Border3DSize.Height;
			int captionHeight = SystemInformation.CaptionHeight;
			int statusHeight = SystemInformation.ToolWindowCaptionHeight;
			MoveWindow(
				wordWnd, 
				-2*borderWidth,
				-2*borderHeight - captionHeight, 
				this.Bounds.Width + 4*borderWidth, 
				this.Bounds.Height + captionHeight + 4*borderHeight + statusHeight,
				true);

		}

		private void OnResize(object sender, System.EventArgs e)
		{
			OnResize();
		}


		/// Required. 
		/// Without this, the command bar buttons that have been disabled 
		/// will remain disabled permanently (does not occur at every machine or every time)
		public  void RestoreCommandBars()
		{
			try
			{
				int counter = wd.ActiveWindow.Application.CommandBars.Count;
				for(int i = 1; i <= counter;i++)
				{
					try
					{
							
						String nm=wd.ActiveWindow.Application.CommandBars[i].Name;
						if(nm=="Standard")
						{
							int count_control=wd.ActiveWindow.Application.CommandBars[i].Controls.Count;
							for(int j=1;j<=2;j++)
							{
								wd.ActiveWindow.Application.CommandBars[i].Controls[j].Enabled=true;
							}
						}
						if(nm=="Menu Bar")
						{
							wd.ActiveWindow.Application.CommandBars[i].Enabled=true;
						}
						nm="";
					}
					catch(Exception ex)
					{
						MessageBox.Show(ex.ToString());						
					}
				}
			}
			catch{}

		}

	}
	public class DocumentInstanceException : Exception
	{}
	
	public class ValidDocumentException : Exception
	{}

	public class WordInstanceException : Exception
	{}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -