?? winwordcontrol.cs
字號:
/// This code has been changed by Anup Shinde.
/// contact: anup@micromacs.com ...:)
/// The original code is written by Matthias Haenel
/// contact: www.intercopmu.de
/// Code was received from: http://www.codeproject.com/cs/miscctrl/winwordcontrol.asp
///
/// you can use it free of charge, but please
/// mention my name ;)
///
/// WinWordControl utilizes MS-WinWord2000 and
/// WinWord-XP
///
/// It simulates a form element, with simple tricks.
///
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WinWordControl
{
/// <summary>
/// WinWordControl allows you to load doc-Files to your
/// own application without any loss, because it uses
/// the real WinWord.
/// </summary>
public class WinWordControl : System.Windows.Forms.UserControl
{
#region "API usage declarations"
[DllImport("user32.dll")]
public static extern int FindWindow(string strclassName, string strWindowName);
[DllImport("user32.dll")]
static extern int SetParent( int hWndChild, int hWndNewParent);
[DllImport("user32.dll", EntryPoint="SetWindowPos")]
static extern bool SetWindowPos(
int hWnd, // handle to window
int hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
uint uFlags // window-positioning options
);
[DllImport("user32.dll", EntryPoint="MoveWindow")]
static extern bool MoveWindow(
int Wnd,
int X,
int Y,
int Width,
int Height,
bool Repaint
);
[DllImport("user32.dll", EntryPoint="DrawMenuBar")]
static extern Int32 DrawMenuBar(
Int32 hWnd
);
[DllImport("user32.dll", EntryPoint="GetMenuItemCount")]
static extern Int32 GetMenuItemCount(
Int32 hMenu
);
[DllImport("user32.dll", EntryPoint="GetSystemMenu")]
static extern Int32 GetSystemMenu(
Int32 hWnd,
bool Revert);
[DllImport("user32.dll", EntryPoint="RemoveMenu")]
static extern Int32 RemoveMenu(
Int32 hMenu,
Int32 nPosition,
Int32 wFlags
);
private const int MF_BYPOSITION = 0x400;
private const int MF_REMOVE = 0x1000;
const int SWP_DRAWFRAME = 0x20;
const int SWP_NOMOVE = 0x2;
const int SWP_NOSIZE = 0x1;
const int SWP_NOZORDER = 0x4;
#endregion
/* I was testing wheater i could fix some exploid bugs or not.
* I left this stuff in here for people who need to know how to
* interface the Win32-API
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[DllImport("user32.dll")]
public static extern int GetWindowRect(int hwnd, ref RECT rc);
[DllImport("user32.dll")]
public static extern IntPtr PostMessage(
int hWnd,
int msg,
int wParam,
int lParam
);
*/
/// <summary>
/// Change. Made the following variables public.
/// </summary>
public Word.Document document;
public static Word.ApplicationClass wd = null;
public static int wordWnd = 0;
public static string filename = null;
private static bool deactivateevents = false;
/// <summary>
/// needed designer variable
/// </summary>
private System.ComponentModel.Container components = null;
public WinWordControl()
{
InitializeComponent();
}
/// <summary>
/// cleanup Ressources
/// </summary>
protected override void Dispose( bool disposing )
{
CloseControl();
if( disposing )
{
if( components != null )
components.Dispose();
}
base.Dispose( disposing );
}
#region Component Designer generated code
/// <summary>
/// !do not alter this code! It's designer code
/// </summary>
private void InitializeComponent()
{
//
// WinWordControl
//
this.Name = "WinWordControl";
this.Size = new System.Drawing.Size(440, 336);
this.Resize += new System.EventHandler(this.OnResize);
}
#endregion
/// <summary>
/// Preactivation
/// It's usefull, if you need more speed in the main Program
/// so you can preload Word.
/// </summary>
public void PreActivate()
{
if(wd == null) wd = new Word.ApplicationClass();
}
/// <summary>
/// Close the current Document in the control --> you can
/// load a new one with LoadDocument
/// </summary>
public void CloseControl()
{
/*
* this code is to reopen Word.
*/
try
{
deactivateevents = true;
object dummy=null;
object dummy2=(object)false;
document.Close(ref dummy, ref dummy, ref dummy);
// Change the line below.
wd.Quit(ref dummy2, ref dummy, ref dummy);
deactivateevents = false;
}
catch(Exception ex)
{
String strErr = ex.Message;
}
}
/// <summary>
/// catches Word's close event
/// starts a Thread that send a ESC to the word window ;)
/// </summary>
/// <param name="doc"></param>
/// <param name="test"></param>
private void OnClose(Word.Document doc, ref bool cancel)
{
if(!deactivateevents)
{
cancel=true;
}
}
/// <summary>
/// catches Word's open event
/// just close
/// </summary>
/// <param name="doc"></param>
private void OnOpenDoc(Word.Document doc)
{
OnNewDoc(doc);
}
/// <summary>
/// catches Word's newdocument event
/// just close
/// </summary>
/// <param name="doc"></param>
private void OnNewDoc(Word.Document doc)
{
if(!deactivateevents)
{
deactivateevents=true;
object dummy = null;
doc.Close(ref dummy,ref dummy,ref dummy);
deactivateevents=false;
}
}
/// <summary>
/// catches Word's quit event
/// normally it should not fire, but just to be shure
/// safely release the internal Word Instance
/// </summary>
private void OnQuit()
{
//wd=null;
}
/// <summary>
/// Loads a document into the control
/// </summary>
/// <param name="t_filename">path to the file (every type word can handle)</param>
public void LoadDocument(string t_filename)
{
deactivateevents = true;
filename = t_filename;
if(wd == null) wd = new Word.ApplicationClass();
try
{
wd.CommandBars.AdaptiveMenus = false;
wd.DocumentBeforeClose += new Word.ApplicationEvents2_DocumentBeforeCloseEventHandler(OnClose);
wd.NewDocument += new Word.ApplicationEvents2_NewDocumentEventHandler(OnNewDoc);
wd.DocumentOpen+= new Word.ApplicationEvents2_DocumentOpenEventHandler(OnOpenDoc);
wd.ApplicationEvents2_Event_Quit += new Word.ApplicationEvents2_QuitEventHandler(OnQuit);
}
catch{}
if(document != null)
{
try
{
object dummy=null;
wd.Documents.Close(ref dummy, ref dummy, ref dummy);
}
catch{}
}
if( wordWnd==0 ) wordWnd = FindWindow( "Opusapp", null);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -