3

我需要在 Windows 窗体应用程序的面板控件中打开一个 word 文档来查看/编辑文件并保存。

我使用这个声明:

    [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 hWnd,
        int X,
        int Y,
        int nWidth,
        int nHeight,
        bool bRepaint
    );

    const int SWP_DRAWFRAME = 0x20;
    const int SWP_NOMOVE = 0x2;
    const int SWP_NOSIZE = 0x1;
    const int SWP_NOZORDER = 0x4;
    const int SWP_FRAMECHANGED = 0x20;
    ToolsComponents.MSWord word = new ToolsComponents.MSWord();

    private void toolStripButton2_Click(object sender, EventArgs e)
    {
        word.CreateWordDocument();
        word.OpenFile(@"C:\Users\ME\Documents\test.docx", true);
        int wordWnd = FindWindow("Opusapp", null);
        if (wordWnd != 0)
        {
            int ret = SetParent(wordWnd, pnlShowForm.Handle.ToInt32());

            //int ret2 = FindWindow("Opusapp", null);
            //ret = SetParent(wordWnd, pnlShowForm.Handle.ToInt32());
            SetWindowPos(wordWnd, pnlShowForm.Handle.ToInt32(), 0, 0, pnlShowForm.Bounds.Width - 20, pnlShowForm.Bounds.Height - 20, SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOMOVE | SWP_DRAWFRAME);
            MoveWindow(wordWnd, -5, -33, pnlShowForm.Bounds.Width + 10, pnlShowForm.Bounds.Height + 57, true);
        }
    }

    private void frmDocumentManager_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (word != null)
        {
            word.CloseDoc(true);
            word.Quit();
        }

但这不是一个好的解决方案,并且在运行时有问题。有时 MS word 和文档在表格之外开始,我无法控制。

4

0 回答 0