2016-10-19 12 views
1

첫 번째 이미지는 내가하고 싶은 것을 보여줍니다. 두 번째 것은 내가 얻은 것을 보여줍니다.MFC 리본 상태 표시 줄을 일반 CStatusBar처럼 동작시키는 방법

상태 표시 줄에 특수 키 Caps Lock, Num Lock 및 Scroll Lock의 상태를 표시하고 싶습니다. 이 이미지는 CStatusBar를 사용하는 이전 프로젝트의 이미지입니다. 이 스냅 샷은 CMainFrame 클래스에서 가져온 것입니다.

이 이미지

내가 비주얼 C++ 2015 MFC 내가 얻는 결과에 그 일을하고 방법을 보여줍니다. 이 스냅 샷은 CMainFrame 클래스에서 가져온 것입니다.

내 질문은 : 토글 버튼의 ​​변화를 가로 챌 수 있습니다 내 응용 프로그램 LOCK을 CAPS 및 NUM LOCK 다음 사용자 인터페이스를 업데이트하는 방법을 사람이 말해 수 있습니다.

은이 코드를 사용하려했지만 작동하지 않습니다

ON_UPDATE_COMMAND_UI(ID_INDICATOR_STYLE, &CMainFrame::OnUpdateStyle) 
ON_UPDATE_COMMAND_UI(ID_INDICATOR_FOLD, &CMainFrame::OnUpdateFold) 
ON_UPDATE_COMMAND_UI(ID_INDICATOR_OVR, &CMainFrame::OnUpdateInsert) 

사전에 감사합니다.

+1

나는 당신이 소스 코드의 ** ** 스크린 샷을 게시하는 것이 도움이 될 것이라고 생각하는 것입니다 왜 아무 생각이 없습니다. 비전이 손상된 모든 개발자는 문제를 이해하지 못하는 것입니다. 이 광기를 멈춰라. – IInspectable

+0

어떻게 개선 할 수 있습니까? – manianis

+0

텍스트를 텍스트로 게시하여 우선합니다. 코드 편집기에 이미지를 붙여 넣거나 코드 편집기에서 이미지를 복사 한 것처럼 아닙니다. 여기에 몇 가지 상식 만 적용하면됩니다. – IInspectable

답변

2

먼저 CStatusBar의 표준 동작은 CMFCRibbonStatusBar에서 지원되지 않습니다.

좋은 소식은 동일한 동작을 구현하는 것이 매우 쉽다는 것입니다.

ON_UPDATE_COMMAND_UI(ID_INDICATOR_CAPS, &CMainFrame::OnUpdateButtonsState) 
ON_UPDATE_COMMAND_UI(ID_INDICATOR_NUM, &CMainFrame::OnUpdateButtonsState) 
ON_UPDATE_COMMAND_UI(ID_INDICATOR_SCRL, &CMainFrame::OnUpdateButtonsState) 

실제 업데이트 핸들러 :

는 MDI의 경우 메인 프레임 클래스 또는 자식 프레임의 메시지 맵이 추가 : 여기 당신이 당신의 응용 프로그램에서 구현하기 위해해야 ​​할 것입니다

void CMainFrame::OnUpdateButtonsState(CCmdUI* pCmdUI) 
{ 
    UINT nVK; 
    UINT flag = 0x0001; 

    switch (pCmdUI->m_nID) 
    { 
    case ID_INDICATOR_CAPS: 
     nVK = VK_CAPITAL; 
     break; 

    case ID_INDICATOR_NUM: 
     nVK = VK_NUMLOCK; 
     break; 

    case ID_INDICATOR_SCRL: 
     nVK = VK_SCROLL; 
     break; 

    case ID_INDICATOR_KANA: 
     nVK = VK_KANA; 
     break; 

    default: 
     TRACE(traceAppMsg, 0, "Warning: OnUpdateKeyIndicator - unknown indicator 0x%04X.\n", 
      pCmdUI->m_nID); 
     pCmdUI->ContinueRouting(); 
     return; // not for us 
    } 

    pCmdUI->SetCheck(::GetKeyState(nVK) & flag);   

} 
+0

답장을 보내 주셔서 감사합니다. – manianis

+0

그게 작동하지 않는다는 CFrameWnd : OnUpdateKeyIndicator 항상 위에서 당신이 위에서 제안한 것처럼 정의 된 호출됩니다. CAPS 키를 누르면 표시기가 상태 표시 줄에서 활성화/비활성화됩니다. 나는 그것을 나타나거나 사라지 길 원한다. – manianis

+0

Hurrrray! 이제 작동 중입니다. 모든 코드를 CMainFrame이 아닌 CChildFrame으로 옮겨야합니다. :) 고맙습니다. – manianis

0

코드를 CChildFrame 클래스로 옮겨서 해결했습니다.

ON_UPDATE_COMMAND_UI(ID_INDICATOR_CAPS, &CChildFrame::OnUpdateIndicators) 
ON_UPDATE_COMMAND_UI(ID_INDICATOR_NUM, &CChildFrame::OnUpdateIndicators) 
ON_UPDATE_COMMAND_UI(ID_INDICATOR_SCRL, &CChildFrame::OnUpdateIndicators) 

그리고

void CChildFrame::OnUpdateIndicators(CCmdUI *pCmdUI) 
{ 
    pCmdUI->Enable(); 

    // ... the rest of the above code 

    CString text; 
    if (::GetKeyState(nVK) & flag) 
     text.LoadStringW(pCmdUI->m_nID); 
    pCmdUI->SetText(text); 
}