2015-06-18 3 views
-1

У меня есть приложение VB.NET, использующее API SetParent для размещения Worddocument внутри элемента управления GroupBox моего приложения.SetParent API под Windows-8 изменяет размер шрифта меню приложения и ленты

Public Class myForm 
    Dim mwrdApp As Microsoft.Office.Interop.Word.Application 
    Dim mwrdDoc As Microsoft.Office.Interop.Word.Document 
    Dim mwrdHwnd As Integer 
    Dim sTemp As String 

    Public Structure RECT 'for GetWindowRect API 
     Dim Left As Integer 
     Dim Top As Integer 
     Dim Right As Integer 
     Dim Bottom As Integer 
    End Structure 

    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer 
    Declare Function GetWindowRect Lib "user32" (ByVal Hwnd As Integer, ByRef lpRect As RECT) As Integer 
    Declare Function MoveWindow Lib "user32" (ByVal Hwnd As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal bRepaint As Integer) As Integer 
    Declare Function SetParent Lib "user32" (ByVal hWndChild As Integer, ByVal hWndNewParent As Integer) As Integer 

    Private Sub myForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     mwrdApp = New Microsoft.Office.Interop.Word.Application 
     mwrdDoc = mwrdApp.Documents.Add 

     sTemp = mwrdDoc.ActiveWindow.Caption 'save document-caption 
     mwrdDoc.ActiveWindow.Caption = "besuretofindthisinstance" 'set detectable caption 
     mwrdHwnd = FindWindow("OpusApp", mwrdDoc.ActiveWindow.Caption & " - " & mwrdApp.Caption) 'find Word window handle 
     mwrdDoc.ActiveWindow.Caption = sTemp 'restore original caption 
     mwrdApp.Visible = True 
     mwrdApp.ScreenUpdating = True 
     mwrdDoc.ActiveWindow.Visible = True 

     MsgBox("Worddocument-window before SetParent") 
     SetParent(mwrdHwnd, myGroupBox.Handle.ToInt32) 'put Word in myGroupBox 
     Dim myGroupBoxRect As RECT 
     GetWindowRect(myGroupBox.Handle.ToInt32, myGroupBoxRect) 'Get size of myGroupBox 
     MoveWindow(mwrdHwnd, 0, 0, myGroupBox.Right - myGroupBox.Left, myGroupBox.Bottom - myGroupBox.Top, True) 'Size the Word window to fit inside myGroupBox: 
    End Sub 
End Class 

После открытия Слова на рабочем столе код останавливается с MessageBox, то Wordwindow (Word 2013) выглядит совершенно нормально.

Затем SetParent-API перемещает WordWindow с рабочего стола в myGroupBox на myForm. До сих пор это работало хорошо с любой операционной системой, однако я недавно переключил свое приложение на Windows-8 (на MS Surface Pro 3), а теперь после SetParent в оснащенных Wordwindows отображаются увеличенные меню и лента. Теперь все заголовки и вкладки в меню Word и элементы управления лентой внезапно увеличились; размер шрифта намного больше (BTW: само слово работает правильно, а также никакого текста в Worddocument не влияет).

Есть ли у кого-нибудь идеи, как это может произойти? Может ли это программно быть предотвращено или иначе исправлено впоследствии?

ответ

0

То, что вы пытаетесь достичь, не поддерживается физически. Вы можете встраивать свое приложение в Word (но не наоборот), создавая надстройку с панелью задач. Рассмотрите возможность использования сторонних компонентов для отображения документов Word в Windows Forms.

Также смотрите на следующих аналогичных нитей:

+0

Спасибо Евгений за ваши комментарии. Я уже много лет внедряю Word в свое приложение, успешно пересматривая WIndows-7 с Word 2010, и мне нужно продолжать этот путь. Теперь я вижу эту проблему, возникающую в системах Windows-8, и надеюсь, что кто-то найдет для этого решение. С уважением, Хенк –