У меня есть приложение 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 не влияет).
Есть ли у кого-нибудь идеи, как это может произойти? Может ли это программно быть предотвращено или иначе исправлено впоследствии?
Спасибо Евгений за ваши комментарии. Я уже много лет внедряю Word в свое приложение, успешно пересматривая WIndows-7 с Word 2010, и мне нужно продолжать этот путь. Теперь я вижу эту проблему, возникающую в системах Windows-8, и надеюсь, что кто-то найдет для этого решение. С уважением, Хенк –