سؤال

هناك ثلاثة أماكن حيث القوائم تظهر في MFC وظيفة (Feature Pack):

  • في القائمة أشرطة (CMFCMenuBar)
  • في القوائم المنبثقة (CMFCPopupMenu)
  • في القائمة المنسدلة' نسخة من CMFCButton

أريد أن أضع الرموز (عالية اللون مع transparancy) في القوائم في كل منهم.لقد وجدت CFrameWndEx::OnDrawMenuImage() التي يمكن استخدامها في العرف رسم الرموز أمام شريط القوائم البنود.انها ليست مريحة جدا ، الحاجة إلى تنفيذ أيقونة الرسم في عام 2008 ، لكنه يعمل.الآخرين لم أجد حلا بعد.هل هناك automagic طريقة تعيين الرموز على القوائم ؟

هل كانت مفيدة؟

المحلول

هذا هو كيف حصلت على هذا العمل:

أولا

, ، وقال آخرون: خلق غير مرئية شريط الأدوات إلى شريط الأدوات الرئيسية (أنا باستخدام المعتادة أسماء على أساس AppWizard أسماء):

MainFrm.h:
class CMainFrame
{
    //...    
    CMFCToolBar m_wndToolBar;
    CMFCToolBar m_wndInvisibleToolBar;
    //...
};

MainFrm.cpp:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    //...

    // Normal, visible toolbar
    if(m_wndToolBar.Create(this,
        TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
    {
        VERIFY( m_wndToolBar.LoadToolBar(
            theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME) );

        // Only the docking makes the toolbar visible
        m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
        DockPane(&m_wndToolBar);
    }

    // Invisible toolbar; simply calling Create(this) seems to be enough
    if(m_wndInvisibleToolBar.Create(this))
    {
        // Just load, no docking and stuff
        VERIFY( m_wndInvisibleToolBar.LoadToolBar(IDR_OTHERTOOLBAR) );
    }
}

الثانية:الصور و شريط أدوات الموارد

IDR_MAINFRAME و IDR_MAINFRAME_256 تم إنشاؤها بواسطة AppWizard.الأول هو قبيح 16 لون النسخة الأخيرة هي مثيرة للاهتمام اللون عالية نسخة.
على الرغم من اسمها ، إذا كنت أتذكر بشكل صحيح ، حتى إنشاء AppWizard صورة 24 بت عمق اللون.الشيء باردة:مجرد استبدال ذلك مع 32bit و الصورة و هذا العمل أيضا.

هناك شريط الأدوات غير مرئية IDR_OTHERTOOLBAR:أنا خلقت شريط الأدوات مع محرر الموارد.فقط بعض الرموز وهمية و الأمر معرفات.مقابل إنشاء صورة نقطية التي استبدلت مع اللون عالية نسخة.فعلت!

ملاحظة

لا تفتح أشرطة الأدوات مع محرر الموارد:قد تضطر إلى تحويله إلى 4bit قبل أن تفعل أي شيء معها.وحتى إذا يمكنك السماح بذلك (لأن وراء Visual Studio عاد wou ذاهبون إلى استبدال النتيجة مع عال لون الصورة مرة أخرى ، ها!), لقد وجدت أنه (أحيانا؟) ببساطة لا يمكن تحرير شريط الأدوات.غريب جدا.
في هذه الحالة أنصح مباشرة تحرير .الملف rc.

نصائح أخرى

أعتقد (ولكن قد أكون مخطئا) أن هذه الطبقات هي نفس BCGToolbar الطبقات التي تم تضمينها في MFC عندما اشترت مايكروسوفت BCG.إذا كان الأمر كذلك, يمكنك إنشاء شريط أدوات مع استخدام نفس معرف على زر في شريط الأدوات كما في عناصر القائمة التي تريد إنشاء الرموز و أنهم يجب أن تظهر تلقائيا.بالطبع, كنت في الواقع لا تحتاج إلى عرض أشرطة الأدوات.

في BCGToolbar يكفي لإنشاء شريط أدوات الموارد & تحميل (ولكن لا يتم عرض نافذة) ، ولكن على زر في شريط الأدوات يجب أن يكون نفس معرف عنصر القائمة الذي تريد الارتباط به

حاول استخدام هذه الدالة:

CMFCToolBar::AddToolBarForImageCollection(UINT uiResID,
   UINT uiBmpResID=0,
   UINT uiColdResID=0,
   UINT uiMenuResID=0,
   UINT uiDisabledResID=0,
   UINT uiMenuDisabledResID=0);

لذلك على سبيل المثال:

CMFCToolBar::AddToolBarForImageCollection(IDR_TOOLBAROWNBITMAP_256);

عملت بشكل جيد جدا بالنسبة لي.

الشيء الوحيد الذي يمكن أن يصاب الشخص على حين غرة هو للتخصيص (أي غير مؤمن) أشرطة الأدوات ، أول شريط الأدوات يمكنك جعل الإطار يقسم حتى يتحول إلى نوع من لوحة نقطية من جميع الرموز في البرنامج.إذا كنت تحاول إضافة المزيد من أشرطة الأدوات في وقت لاحق (أو أشرطة الأدوات) التي النقطية (أو pngs) مع لون مختلف عمقا من الأولى يبدو أنها تفشل لأنه لا يمكن إضافتها إلى نفس الألوان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top