Click here for the English article.
Einleitung
Häufig ist es erforderlich, die Breite der Thumbnail-Leiste in der Windows-Desktop-Vorschau flexibel anzupassen, um die Darstellung an unterschiedliche Fenstergrößen, Bildschirmauflösungen oder gewünschte Thumbnail-Größen anzupassen. Dadurch steht je nach Bedarf mehr Platz für die Vorschau oder für die Thumbnail-Leiste zur Verfügung.
C#
In C# kann das ListLabelPreviewControl für die Darstellung von Berichten verwendet werden. Die Breite der Thumbnail-Leiste kann dabei wahlweise direkt über das Visual Studio Property definiert werden:
Oder auch an geeigneter Stelle dynamisch im Code zur Laufzeit für mehr Flexibilität:
partial class Form1
{
private System.ComponentModel.IContainer components = null;
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.PreviewControl = new combit.Reporting.ListLabelPreviewControl(this.components);
this.PreviewControl.ThumbnailWidth = 90; // gewünschte Breite in Pixel
}
}
C++
In C++ wird, um die Breite der Thumbnail-Leiste zu bestimmen, die Message LS_VIEWERCONTROL_SET_OPTION mit dem Parameter LS_OPTION_NAVIGATIONBARWIDTH und der gewünschten Breite mittels der Windows-Funktion ::SendMessage an das Fensterhandle gesendet.
Die Windows-Funktion ::FindWindowExW() wird verwendet, um das richtige Fensterhandle zu ermitteln, indem der Name der Fensterklasse "LlStgsysViewerControl31W" als Zeichenfolge übergeben wird:
CViewerView* pView = dynamic_cast<CViewerView*>(GetActiveView());
if (pView != nullptr && ::IsWindow(pView->m_LlView.GetSafeHwnd()))
{
HWND hwndParentControl = pView->m_LlView.GetSafeHwnd();
HWND hwndViewerControl = ::FindWindowExW(hwndParentControl, NULL, L"LlStgsysViewerControl31W", NULL);
if (hwndViewerControl != NULL)
{
::SendMessage(
hwndViewerControl,
LS_VIEWERCONTROL_SET_OPTION,
LS_OPTION_NAVIGATIONBARWIDTH,
90 // gewünschte Breite in Pixel
);
}
}
Der Name der Fensterklasse enthält die Versionsnummer der verwendeten List & Label-Version, welche auch durch einen Aufruf der Funktion LlGetVersion(LL_VERSION_MAJOR) zurückgegeben werden kann, siehe API Referenz / Referenz der Funktionen / LlGetVersion.
Um das Beispiel mittels dieser Funktion unabhängig von der verwendeten Version zu machen, muss die Zeichenfolge entsprechend zusammengesetzt werden. Hierbei wird wstring verwendet, um dem Standard der Windows-API zu entsprechen:
CViewerView* pView = dynamic_cast<CViewerView*>(GetActiveView());
if (pView != nullptr && ::IsWindow(pView->m_LlView.GetSafeHwnd()))
{
std::wstring versionNumber = std::to_wstring(LlGetVersion(1));
std::wstring windowClassName;
windowClassName.append(L"LlStgsysViewerControl").append(versionNumber).append(L"W");
HWND hwndParentControl = pView->m_LlView.GetSafeHwnd();
HWND hwndViewerControl = ::FindWindowExW(hwndParentControl, NULL, windowClassName.c_str(), NULL);
if (hwndViewerControl != NULL)
{
::SendMessage(
hwndViewerControl,
LS_VIEWERCONTROL_SET_OPTION,
LS_OPTION_NAVIGATIONBARWIDTH,
90 // gewünschte Breite in Pixel
);
}
}
Besonderheiten
Der Wert muss größer 0 sein und darf nicht mehr als die halbe Breite des Preview Controls in Pixel betragen. Anderenfalls wird die Breite der Thumbnail-Leiste automatisch auf 200 Pixel korrigiert.
