我有一個本機MFC C++應用程序,我有一個基於功能區UI的版本和基於工具欄的版本。這兩個EXE的大小相似(〜30mb),但運行基於功能區的版本大約需要25s,而工具欄版本大約需要5s。這只是爲了讓框架窗口顯示工具。我已經成型的帶狀基於UI版本開始了,果然時間被消耗在CMFCRibbonBar::LoadFromResource
和如何加快MFC功能區應用程序的加載時間
BOOL CMFCRibbonInfoLoader::LoadImage(CMFCRibbonInfo::XImage& image, BOOL bSingle)
{
'
'
'
image.m_Image.SetTransparentColor(GetGlobalData()->clrBtnFace); // 15%
image.m_Image.SmoothResize(dblScale); // 64%
'
}
更深的向下挖更深,很多時候似乎是手工花底紋工具欄〜總時間的44%。
有什麼辦法來加快這個加載時間,可能是通過設置一個非透明的繪圖方案?運行一個程序25秒似乎有點過分,這是一個8核4ghz AMD 8350的EXE映像來自SSD。
編輯:試圖以下幫助理解問題,但並沒有真正有用的答案。
經過一番探索後,似乎打電話給afxGlobalData.EnableRibbonImageScale(FALSE);
禁用縮放,但可以在一些監視器上視覺上留下不好的結果。如果顯示器的圖像尺寸是正確的,我的1920x1080顯示器上的像素爲40x40像素,縮放也會跳過。我還沒有嘗試過,但我想象一下,如果您爲所有功能區控件指定了HDPI圖像,並且足夠幸運地獲得HDPI圖像的1:1縮放比例,它也會被跳過。搜索MFC源代碼(\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ atlmfc \ include \ afxglobals.h)爲m_bIsRibbonImageScale
和m_dblRibbonImageScale
產生大部分相關代碼。
如果大的按鈕圖像不是32x32,那麼功能區編輯器似乎會像原來那樣對待它們,並錯誤地將基本BMP打印出來。因此,將基本大按鈕BMP調整爲40x40會導致屏幕上出現垃圾。
編輯:我曾經認爲弗拉德的答案是可行的,但顯然在MFC功能區資源中使用的XML不是功能區XML。請參閱MSDN here上的相關問題。
編輯上MSDN here
感謝您的鏈接,但不幸的是,MFC中使用的Ribbon XML與鏈接中使用的Ribbon XML不同。我將編輯問題以顯示差異。 –