画像付 RecentFile の追加

投稿日 by Iwao

RecentFileMF クラスを利用して,画像でのメニュー表示を可能にする

  1. ODMenu を利用可能な様に追加する.
    アプリケーションクラスのヘッダなどで MetaFile.hxx をインクルードして,ODMMetaFile を利用可能に.
  2. ID_RECENT_FILE_00 ~ の必要数分のリソースを作成する.
  3. アプリケーションクラスのヘッダに,include と変数を追加する.
    #include "RecentFM.hxx"
    RecentFileMF RcntFM ;
  4. アプリケーションクラスのコンストラクタに RecnetFileMF の初期化を追加する.
    : RcntFM(_T("RecentFileMF"),30)
  5. InitInstance で,RcntFM のデータを読込む処理を追加する.
    {
     RcntFM.Read() ;
     RcntFM.SetStartID(ID_RECENT_FILE_00) ;
     }
  6. アプリケーションクラスに,範囲でコマンドハンドラを追加する.
    ON_COMMAND_RANGE  (ID_RECENT_FILE_00,ID_RECENT_FILE_29,OnRecentFile)
    void CXxxxApp::OnRecentFile(UINT nID)
    {
     CString selFile = RcntFM.GetSelectFile(nID) ;
     AfxGetApp()->OpenDocumentFile(selFile) ;
     }
  7. ドキュメントクラスのファイルの読み書きの時に,次の様にドキュメントと対応する画像を指定する.
    {
     CXxxxApp* app = (CXxxxApp*)AfxGetApp() ;
     app->RcntFM.Add(fileName,emfName) ;
     }
  8. さらに,ドキュメントに対するファイル名をステータスバーなどに表示するために,CMainFrame に追加する.
    // ツールチップの表示データの更新
    BOOL CMainFrame::OnToolTipText(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
    {
     BOOL ret = CFrameWnd:: OnToolTipText(id,pNMHDR,pResult) ;
                Prompt:: OnToolTipText(id,pNMHDR,pResult) ;
     return ret ;
     }
    // ステータスバーの表示データの更新
    void CMainFrame::GetMessageString(UINT nID, CString &rMessage) const
    {
     CFrameWnd:: GetMessageString(nID,rMessage) ;
     Prompt:: GetMessageString(nID,rMessage) ;
     }


2012/06/12 追記
VC6 でドロップタウンが有効にならない場合,CBRS_SIZE_DYNAMIC を外す.
  if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | …
        … | CBRS_FLYBY/* | CBRS_SIZE_DYNAMIC*/) ||
       !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
ODMenu が有効にならない場合,
  #include “ODMenu.hxx”
  #include “WinMFC.cxx”
Prompt が有効にならない場合,
  #include “Prompt.hxx”
  #include “RecentFM.cxx”
ODMenu は有効ではあるが,何も表示されない
  手動で追加していたため,メッセージマップの修正漏れ
    ON_WM_MEASUREITEM()
    ON_WM_DRAWITEM()


2019/09/20
OnMeasureItem , OnDrawItem が呼ばれない.
  内部的には ODMenu::ModifyMenu が呼ばれていない.
  WinMFC.cxx を読み込む前に ODMenu.hxx が必要.
  App.h 内の include の最後辺りに ODMenu.hxx の追加で対応可能.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です