Breite der Thumbnail-Leiste in der Windows-Desktop-Vorschau bestimmen

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.