• ベストアンサー

最近使ったファイルからファイル名を取得したいです。

現在、VC++、MFC,SDIでプログラムを作成しています。 自動でできるメニュー項目の中に、「最近使ったファイル」というものがあるのですが、 これをクリックすることでタイトルバーがその名前に更新されるようですが、この情報を取得することで ファイル名を出力するにはどうすればよろしいでしょうか? (AfxMessageBoxで出力するだけで大丈夫です)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

MFCのフレームワークをそのまま使っているのであれば、最近使ったファイル(MRU)はレジストリに記録されています。 HKEY_CURRENT_USER\Software\[CWinAppの派生クラスのInitInstanceで設定した名前]\[ソフト名]\Recent File List にリストが入っていると思います。 MFC内部でもこのレジストリを読み取っているので、その辺りを調べたいなら、メニューID(ID_FILE_MRU1だったかな?)からハンドラを調べれば、どのように処理しているかわかるはずです。

gsfgsgshh
質問者

補足

どこでその処理を行っているか具体的に知りたいです。。。

その他の回答 (4)

noname#137556
noname#137556
回答No.5

なんだか、やりたいことが分からなくなってきました。 何をどうしたいのでしょうか? 変更???

回答No.4

CWinAppの派生クラスでメッセージマップを変更すれば、派生クラス側で処理できるはずです。 メッセージマップにどのように記述すればよいかは、CWinAppのメッセージマップを見ればわかりますよね。

回答No.3

ID_FILE_MRU_FILE1~ID_FILE_MRU_FILE16が用意されていて、CWinApp::OnOpenRecentFileで処理されているようです。 これ以上具体的な内容は、VC++のバージョンも示さずに聞く方が間違っています。まぁ、バージョンを示されても、同じバージョンがインストールされている人でないと答えられないので、あまり期待されない方がいいでしょうし。 MFCのソースはマシンに入っているはずなので、ご自分で検索するなりしましょう。

gsfgsgshh
質問者

補足

CWinApp::OnOpenRecentFileじゃAPPで宣言、定義されているので、変更できない気がするのですが・・・。(変更しても反映されない) バージョンは6.0になります。

noname#137556
noname#137556
回答No.1

最近使ったファイルに限らず, ファイルを開くと,ドキュメントクラスの OnOpenDocument が呼ばれるので, 通常はここで処理すれば OK です。 「最近使ったファイル」を選んだ時だけ特別にとなると, コマンドハンドラかその下のどこかを乗っ取ればいいと思います。

関連するQ&A

  • ウィンドウ生成時の不具合について

    VC++6.0 WIN98 MFCにて ウィザードを使ってSDIにてウィンドウ1を作成し、メニューをクリックすることで、ウィンドウ2が新たに生成されるプログラムを書きました。 ウィンドウ2が生成されたときに、ウィンドウ1に重なっていると、ウィンドウ2を閉じてもウィンドウ1のクライアント領域にウィンドウ2の形が残ったままになってしまいます。 どうしてこうなるのでしょうか?

  • ファイルの取得

    簡単な勤怠管理システムを作成したいと思ってます。 勤怠管理表を各自記入し、指定のフォルダにいれます。 その際、そのフォルダに自動でアクセスし自動でファイル名を取って、検索するようなプログラムを作成したいのですが、どのようなプログラムを書けばいいでしょうか。ご教示くださいませんでしょうか。 VBAやVCではなく、C言語でこの処理をやりたいのですが。

  • ファイル作成者名の取得

    VBで、ファイルの作成者名・更新者名・作成日時・更新日時を取得する方法を探しています。 作成日時・更新日時の方はAPIを使用すれば可能だと分かったのですが、 作成者名・更新者名の取得方法が見つかりません。 取得が可能かどうかも含めて、教えていただけませんでしょうか? よろしくお願いします。

  • Windowsアプリ 外部プログラムの複数起動

    Windowsアプリを作成することになり、そのアプリで次の 動作をさせたいと思っています。 ・メニューバー内の項目をクリックすると同一exeファイルが  複数起動する。 ・例として、  ・・「ファイル(F)」のリスト内に「レポート」という    項目を作成し、「ファイル(F)」→「レポート」と    選択し「レポート」をクリックすると、Report.exe    (C:\Program Filesフォルダ内)を4個起動させる。  ・・4個のexeは、別々のウィンドウで表示される。  ・・その別々のウィンドウは、重ねて表示することや、    並べて表示することもできる。 開発環境を下記します。  WindowsXP Professional  Visual Studio.NET 2002  VC++ MFC そこで質問ですが、上記の動作は、  ・実現できますか。  ・実現できるならSDI、MDIのどちらになりますか。  ・実現できるなら参照するサイトやサンプルプログラム、   書籍、ヒントとなる関数やコードなど、なんでも   よろしいのでご存じなことを教えて頂けないで   しょうか。 ご存じの方すいませんがよろしくお願いします。

  • クラス名が取得できない

    質問させていただきます VBAで計算した結果を、外部プログラムでグラフを書き、計算するたびにグラフを更新したいと考えています。 Call Shell("開くプログラム名 開くファイル名", vbNormalFocus) hwnd = FindWindow("クラス名", vbNullString) 計算をする 計算したファイルの出力 postmessageでグラフを更新する命令の出力 (最後の3行を繰り返す) そこで、HandleXというソフトを使いクラス名を取得しようと考えましたが、[classname]という所が毎回変化してしまい、取得できませんでした。 対処法があれば教えてください。お願いします。

  • ウインドウ位置の自動移動の解除

    winXP VS2005 MFC SDI クライアント領域をクリックしてウインドウの移動を出来るようにしたのですが、 クライアント領域をクリックしながらウインドウを移動し、 ウインドウのタイトルバーがデスクトップ外に出た状態で 移動をやめる(マウスのクリックをやめる)とウインドウが自動で タイトルバーが表示されるところまで移動してしまいます。 (マウスを放した位置で止まってくれない) この自動的な動きを止める方法をよろしくお願いします。

  • ファイルストリームからファイル名とパスの取得

    例えば、 ofstream file( "ttt.txt" ) としてファイルストリームを作った後で、このインスタンスを使ってfileが指しているファイルのファイル名やファイルのパスを取得することはできるのでしょうか。C及びC++の勉強をしていまして、できればOSやコンパイラに依存しない方法があれば知りたいと思っております。また、WindowsXP、VC++6.0(MFCは使っていません)を使っていますので、これらに依存した方法があるようでしたら教えていただけないでしょうか。お願いします。

  • Menu 項目のあとにつづく  ...  の意味は?

    VC++ で MFC アプリケーションを作っています。 一般的なソフトを見ると Menu で項目のあとに「 ... 」のあるものとないものがあります。 たとえば IE で ファイル(F) をクリックすると表示されるメニュー:    新規作成(N)    開く(O)... 新規作成には「 ... 」がついていませんが,開くには「 ... 」がついています。 どうでも良い部分かもしれないのですが,気になって仕方ありません!! マヌケな質問であるかもしれませんが,ご教授いただければ幸いです。

  • タイトルバーやメニューバーの高さ取得

    サイズ変更可能なダイアログ ボックスアプリケーションを作っています ダイアログサイズ変更時に GetClientRect( m_DlgSize ); のようにしてサイズを取得し、設定ファイルにm_DlgSizeを保存します 次回起動時にInitDialog()で SetWindowPos( NULL, 0, 0, m_DlgSize.Width(),m_DlgSize.Height() ,SWP_NOMOVE); のように復元しました。 幅はきちんと復元できたんですけど高さが小さくなってしまいます。 どうやらGetClientRectではメニューバーやタイトルバーの高さを含めない座標を返し、 SetWindowPosではそれらも含めてサイズを設定してしまうようです この差を埋めるためにメニューバーやタイトルバーの高さを取得する方法がわかりません。 何か良い方法があったらご教授願います。 環境はVC++6.0 MFCです。

  • VC++.net SDIで追加したメニューを灰色から黒にする方法

    VC++.net 2003 のSDIでプログラムを作っています。 新たにメニューを追加したのですが、実行しても文字が灰色になっており、選択することができません。 手元にある入門書には、フォームアプリケーションの場合は、新たに追加した「メニューをダブルクリックすると、コードエディタに切り替わり、Clickメソッドの枠組みが自動的に生成される」とあるのですが、私の場合、ダブルクリックしても何も起こりません。ネットで検索すると、VC++ ver.6 の情報ばかりで、VC++.net 2003の場合が、いまいちよくわかりません。 「この本に書いてある」という情報でも構わないのでよろしくお願いします。

専門家に質問してみよう