2016-10-19 67 views
1

最初の画像は私がしたいことを示しています。 2番目のものは私が得るものを示しています。MFCリボンステータスバーを通常のCStatusBarのように動作させる方法

ステータスバーに特殊キーの状態(CAPS LOCK、NUM LOCK、SCROLL LOCK)が表示されます。このイメージは、CStatusBarを使用している古いプロジェクトのイメージです。 このスナップショットはCMainFrameクラスからのものです。

この画像は、私は、Visual C++ 2015 MFCと私が得る結果でそれをやっている方法を示しています。このスナップショットはCMainFrameクラスのものです。

私の質問は:誰もが私のアプリケーションは、トグルボタンから変更がLOCKとNUM LOCKが、ユーザーインターフェイスを更新CAPS傍受する方法を教えてもらえます。

私はこのコードを使用しようとしたが、それは動作しません:事前に

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 :: OnUpdateKeyIndi​​catorで動作しません。これは、上記のように定義したものではなく、常に呼び出されます。 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); 
} 
関連する問題