📄 winwordcontrol.cs
字号:
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 + -