문제

새로운 MFC 기능(Feature Pack)에는 메뉴가 표시되는 세 가지 위치가 있습니다.

  • 메뉴 모음(CMFCMenuBar)
  • 팝업 메뉴에서(CMFCPopupMenu)
  • CMFCButton의 '드롭다운 메뉴' 버전

모든 메뉴에 아이콘(고색 및 투명도)을 넣고 싶습니다.메뉴 모음 항목 앞에 아이콘을 사용자 정의하는 데 사용할 수 있는 CFrameWndEx::OnDrawMenuImage()를 찾았습니다.2008년에 아이콘 그리기를 구현해야 해서 그다지 편리하지는 않지만 작동합니다.다른 사람들에게는 아직 해결책을 찾지 못했습니다.메뉴 아이콘을 자동으로 설정하는 방법이 있나요?

도움이 되었습니까?

해결책

이것이 내가 작동하게 된 방법입니다.

첫 번째

, 다른 사람들이 말했듯이 기본 도구 모음 옆에 보이지 않는 도구 모음을 만듭니다(저는 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비트 색 심도를 갖습니다.멋진 점:32비트 이미지로 교체하면 작동합니다.

보이지 않는 도구 모음이 있습니다 IDR_OTHERTOOLBAR:리소스 편집기를 사용하여 도구 모음을 만들었습니다.더미 아이콘과 명령 ID만 있으면 됩니다.그런 다음 VS는 내 하이 컬러 버전으로 대체된 비트맵을 생성했습니다.완료!

메모

리소스 편집기로 도구 모음을 열지 마세요.무엇이든 할 수 있으려면 먼저 4비트로 변환해야 할 수도 있습니다.그리고 심지어 만약에 그렇게 하도록 놔두세요(왜냐하면 Visual Studio 뒤에서 결과를 다시 하이 컬러 이미지로 바꿀 것이기 때문입니다, 하!). 나는 그것이(때때로?) 단순히 도구 모음을 편집할 수 없다는 것을 발견했습니다.아주 이상한.
그런 경우에는 .rc 파일을 직접 편집하는 것이 좋습니다.

다른 팁

나는 이 클래스가 Microsoft가 BCG를 구입했을 때 MFC에 포함된 BCGToolbar 클래스와 동일하다고 생각합니다(그러나 내가 틀렸을 수도 있음).그렇다면 아이콘을 생성하려는 메뉴 항목과 동일한 ID를 사용하여 도구 모음 버튼을 생성하고 사용할 수 있으며 자동으로 나타납니다.물론 실제로 도구 모음을 표시할 필요는 없습니다.

BCGToolbar에서는 리소스에 도구 모음을 만들고 로드하는 것만으로도 충분하지만(창을 표시하지는 않음) 도구 모음 버튼은 연결하려는 메뉴 항목과 동일한 ID를 가져야 합니다.

이 기능을 사용해 보세요:

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

예를 들어:

CMFCToolBar::AddToolBarForImageCollection(IDR_TOOLBAROWNBITMAP_256);

나를 위해 아주 잘 일했습니다.

사람들을 놀라게 할 수 있는 한 가지는 사용자 정의 가능한(예: 잠기지 않은) 도구 모음, 즉 첫 번째 도구 모음의 경우 프레임워크가 분할되어 프로그램의 모든 아이콘이 포함된 일종의 팔레트 비트맵으로 변한다는 것입니다.나중에 첫 번째 도구 모음과 색상 농도가 다른 비트맵(또는 png)이 있는 도구 모음(또는 다른 도구 모음)을 더 추가하려고 하면 동일한 팔레트에 추가할 수 없기 때문에 실패하는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top