Ich habe eine native MFC C++ - Anwendung, für die ich eine Band UI-basierte Version und eine Toolbar-basierte Version habe. Beide EXEs haben eine ähnliche Größe (~ 30 MB), aber das Ausführen der bandbasierten Version dauert ungefähr 25 Sekunden, während die Toolbar-Version ungefähr 5 Sekunden dauert. Dies dient nur dazu, das Rahmenfenster mit Werkzeugen anzuzeigen. Ich habe den Start der Band UI basierte Version profiliert, und sicher genug, die Zeit, in CMFCRibbonBar::LoadFromResource
und tiefer wird inSo beschleunigen Sie Ladezeit für MFC-Bändchen-Anwendung
BOOL CMFCRibbonInfoLoader::LoadImage(CMFCRibbonInfo::XImage& image, BOOL bSingle)
{
'
'
'
image.m_Image.SetTransparentColor(GetGlobalData()->clrBtnFace); // 15%
image.m_Image.SmoothResize(dblScale); // 64%
'
}
Graben tiefer, viel Zeit damit verbracht, scheint manuell die Symbolleiste Schattierung ausgegeben werden ~ 44% der Gesamtzeit.
Gibt es eine Möglichkeit, diese Ladezeit zu beschleunigen, möglicherweise durch Festlegen eines nicht transparenten Zeichenschemas? 25 Sekunden, um ein Programm zu starten, scheint ein bisschen übermäßig, das ist auf einem 8-Kern 4 GHz AMD 8350 mit dem EXE-Bild von einer SSD kommen.
Edit: Versuchte das folgende, das half, das Problem zu verstehen, aber nicht wirklich für eine nützliche Antwort.
Nach einigem Stöbern scheint ein Aufruf an afxGlobalData.EnableRibbonImageScale(FALSE);
die Skalierung zu deaktivieren, kann aber auf einigen Monitoren zu schlechten Ergebnissen führen. Wenn die Bildgrößen für den Monitor richtig sind, 40x40 Pixel auf meinem 1920x1080 Display, wird die Skalierung ebenfalls übersprungen. Ich habe es noch nicht ausprobiert, aber ich würde mir vorstellen, wenn Sie HDPI-Bilder für alle Ribbon-Steuerelemente angeben und Sie das Glück haben, 1: 1-Skalierung für Ihre HDPI-Bilder zu erhalten, würde es auch übersprungen werden. Durchsuchen des MFC-Quellcodes (\ Programme (x86) \ Microsoft Visual Studio 14.0 \ VC \ atlmfc \ include \ afxglobals.h) für und m_dblRibbonImageScale
den Großteil des relevanten Codes.
Wenn die großen Tastenbilder nicht 32x32 sind, scheint der Farbbandeditor sie so zu behandeln, wie sie waren, und zerhackt die Basis-BMP falsch. Die Größe eines großen BMP-Basisbuttons auf 40x40 zu ändern, führte zu Müll auf dem Bildschirm.
Edit: Ich hatte gedacht, dass die Antwort von Vlad funktionieren würde, aber anscheinend ist das in einer MFC-Menübandressource verwendete XML nicht Ribbon XML. Siehe verwandte Frage auf MSDN here.
bearbeiten Eine weitere Diskussion auf MSDN here
Danke für den Link, aber leider ist das Ribbon XML, das in MFC verwendet wird, nicht dasselbe Ribbon XML, das in dem Link verwandt wird. Ich werde die Frage bearbeiten, um die Unterschiede zu zeigen. –