• 締切済み

VC++2003SDIでMFCアプリ作成中です。

既存のメソッドである、ファイルを読み込むCDocManager::OpenDocumentFile (LPCTSTR lpszFileName)はどこでタイトルバーを更新しているのでしょうか? ファイルを開けた場合のみタイトルバーを更新したいです。 それともタイトルバーの更新は別の場所で行われているのでしょうか? どなたか教えていただきたいです。

みんなの回答

回答No.1

CDocManager::OpenDocumentFileでは実際にファイルを開いたりはせずに、ドキュメントテンプレートを取得して、そのドキュメントテンプレートのOpenDocumentFileを呼び出しているはずです。 SDIであれば、CSingleDocTemplate::OpenDocumentFileが呼び出され、その中で呼び出されているCDocument::SetPathNameのなかでCDocument::SetTitleが呼ばれます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VC++2003SDIでMFCアプリ作成中です。

    最近使ったファイルからファイルを選んだ際、自動的にタイトルバーが更新されるようですが、これはどのクラスのどのメソッドで行われているのでしょうか? ある条件のときのみタイトルバーを更新したいので、処理を変更する為オーバーライドしたいと考えております。 どなたか教えていただけませんでしょうか?

  • VC++2003でMFCアプリを作成しています。

    自分である拡張子のファイルを読み込んだ際に、ファイルオープンに成功した場合のみタイトルバーを更新したいのですが、どうしたらいいでしょうか? SDIで開発しているのですが、既存のままだと読み込んだ時点でタイトルバーが更新されているようです。 どこでタイトルバーを変えているか教えていただけませんでしょうか?また、その部分をオーバーライドするという意識で間違いないでしょうか?

  • VC++2003SDIでMFCアプリ作成中です。

    MFCで自動生成された画面だと、ステータスバーのチェックのON、OFFの切り替えができるようですが、ステータスバーの内容が自動で上書きされます。 ファイルオープンに成功した場合のみ更新したい場合はどうすればよろしいのでしょうか? どこでステータスバーを更新しているかも教えていただけると嬉しいです。

  • VC++2003でSDIのMFCアプリ作成中です。

    アイコン上にファイルをドロップし、ファイルをオープンする動作を実装し、 正常系は動作確認できました。 しかし、ファイルに読み込み制限などをかけていた場合、こちらのエラー処理に入る前に Windows内部エラー処理に入ってしまうようで、「○○へのアクセスは拒否されました」と ダイアログが表示されます。 デバッグで見て云ったところ、ProcessShellCommand(cmdInfo)の内部でエラーが発生し、 強制的におちているようですが、具体的にどこのクラス、メソッドでエラーを受け取って いるのでしょうか? オーバーライドしてエラー処理を自分で実装したいと考えています。

  • VC++2003でMFCアプリを作成しています。

    最近使ったファイルに書き込みをプログラム上でしたいのですが、どのクラスのどのメソッドで行われているのでしょうか? .iniファイルに書き込まれているところまではわかったのですが、どの.iniファイルに書き込まれているかもわかりません。 OSはXPになりますが、Vista、7のときも知りたいです。 どなたか教えていただけませんでしょうか?

  • VC++、MFCでSDIでアプリ作成中

    現在、VC++、MFCでSDIでアプリ作成中です。 アイコン上にファイル(txtファイル)をドラッグ&ドロップしてメモ帳を起動したいです。 ただ、ドロップされたファイルはうまく読み込めるのですが、そのファイルを開く(表示)することができません。 ドロップされたファイルは、C○○View.cppで int C○○View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: この位置に固有の作成用コードを追加してください CStringArray argv; if( IsDropOnIcon( &argv, TRUE ) ){ int i; for( i = 0; i < argv.GetCount(); i++ ){ MessageBox( argv[ i ], "ドロップされたファイルは", MB_OK ); Read(argv[i]); } } } BOOL C○○View::IsDropOnIcon( CStringArray* argv, BOOL acceptFolder ) { CString cmdlin = ""; CString resToken; char* p; int startnum = 0; p = AfxGetApp()->m_lpCmdLine; if( strlen( p ) == 0 || p[ 0 ] == '-') return FALSE; cmdlin = p; resToken= cmdlin.Tokenize( "\"", startnum ); while( resToken != "" ){ if( resToken != " " && IsExist( resToken, acceptFolder ) ) argv->Add( resToken ); resToken= cmdlin.Tokenize( "\"", startnum ); }; return TRUE; } /* 引数で貰った文字列がファイルかどうかをチェック */ BOOL C○○View::IsExist( CString filepath, BOOL acceptFolder) { CFile fp; if( fp.Open( filepath, CFile::modeRead ) ){ fp.Close(); return TRUE; } return FALSE; } のargv[i]で取得しています。 これが、Read(arg[i])でうまく読み込めません。 ちなみにRead(CString filename)は正しく動くことは確認済みです。 Read(arg[i])を入れる場所がOnCreateがいけないとは思うのですが、どのタイミングで 読み込めばいいかがわかりません。 どなたか教えて頂けないでしょうか?

  • VC++でMFCアプリ作成中です。

    MFCの既存のフレームで、「最近使ったファイル」という欄があります。 これを選んだ際に、指定したプログラムでそのファイルを開きたいのですが、うまくいきません。 どうすればよろしいでしょうか? HogeView.cpp ...(省略) /*************************************** OnOpenRecentFileのオーバーライド ***************************************/ BOOL CWinApp::OnOpenRecentFile(UINT nID) { ASSERT_VALID(this); ASSERT(m_pRecentFileList != NULL); ASSERT(nID >= ID_FILE_MRU_FILE1); ASSERT(nID < ID_FILE_MRU_FILE1 + (UINT)m_pRecentFileList->GetSize()); int nIndex = nID - ID_FILE_MRU_FILE1; ASSERT((*m_pRecentFileList)[nIndex].GetLength() != 0);        /* 選んだファイルを表示 */ AfxMessageBox((*m_pRecentFileList)[nIndex]); CHogeView *myview = new CHogeView(); ★ myview->GetDocument()->SetFilePath((*m_pRecentFileList)[nIndex]); AfxMessageBox(myview->GetDocument()->GetFilePath()); myview->ReadFile((*m_pRecentFileList)[nIndex]); TRACE2("MRU オリジナル関数内: open file (%d) '%s'.\n", (nIndex) + 1, (LPCTSTR)(*m_pRecentFileList)[nIndex]); if (OpenDocumentFile((*m_pRecentFileList)[nIndex]) == NULL){ m_pRecentFileList->Remove(nIndex); } return TRUE; } /****************************************************************** ファイル読み込み ******************************************************************/ void CHogeViewerView::ReadFile(CString filename){ ...(省略) } コンパイルはできるのですが、どうやら★のところがうまく行かず、 Debug Assertion Failed! とエラーがでます。 何が原因なのでしょうか?

  • MFCでPDFビューアアプリ作成中

    アプリを起動する際に、レジストリでpdfのファイル対応付けを行います。 そしてpdfファイルをダブルクリックすることでファイルオープンをするのですが、(実装済み) タイトルバーが文字化けして正しく表示されません。 しかし、ファイルは正しい書式のときはうまく読み込めています。 つまり、タイトルバーの更新部分でおかしなことになっているようなのです。 しかも、なぜかドラッグ&ドロップでファイルを読み込んだ際はファイルも正しく表示されるし タイトルバーも正しく表示されます。 ちなみに、おかしくなるのは全角の文字がファイル名に入っているときです。 原因がわかる方いらっしゃいますでしょうか?

  • SDIアプリ内からもう一つSDIを作成する方法

    開発環境:WindowsXPSp3 + VC++2010 SDIの単純なアプリケーションと、スタティックリンクしているDLL(拡張DLL)があります。 exeのツールバーにあるボタンをクリックすると、DLL内にあるCreateNewWindowという関数を呼ぶようになっています。 このCreateNewWindowでは以下のようなコードが書かれています。 ------------------------------------------------------------------ CSingleDocTemplate* g_pNewWnd ; // グローバル void WINAPI CreateNewWindow() {   if( NULL == g_pNewWnd ) {     g_pNewWnd = new CSingleDocTemplate(       IDR_NEWWINDOW,       RUNTIME_CLASS( CSDIWndDoc ),       RUNTIME_CLASS( CSDIWndFrame ),       RUNTIME_CLASS( CSDIWndView )     );     CDocument* pDocumanet = g_pNewWnd->OpenDocumentFile( NULL ) ;   } } ※初期化や破棄処理は適宜行っているものとします。 ------------------------------------------------------------------ このように、Exeのほうに1つのSDIが存在している状態で、さらにDLL内で別のSDIのウィンドウを作成することは許されるのでしょうか? 実行すると、一応、ウィンドウは作成されるのですが、これらのフレーム内でCMFCToolBarを作成すると、DLLのこの関数でSDIを作成した時点でexe側のツールバーがおかしくなります。 具体的にはDLLのリソースにあるツールバーがexeのツールバーとして不完全な状態で反映され、DLLで作ったSDIウィンドウでは、ツールバーの領域だけ確保されてなにも無い状態です。 この関数を実行するまではexeのツールバーは正常に表示・動作しています。もちろん、リソースIDがユニークになているのは確認済みです。 やりたいことは、SDIやダイアログなどからボタンを押したら動的にSDIのウィンドウを生成して提供するDLLを作成したいのです。 参考になるサイトや書籍、アドバイスを頂けませんでしょうか。 よろしくお願いします。

  • WebアプリよりVC++で作成したEXEを呼出す方法

    初めて、投稿します。よろしくお願いします。 既にVC++6.0で作成されているWindowsアプリケーションを 既に作成した自作のWebアプリケーション(Java+JSPで作成)から呼出す場合、 どのような方法を取ればよいのでしょうか? 過去のログを見ていると、ActiveXコントロールに移植する方法が考えられるようですが、 そうすると、内部の集計ロジックは使いまわせるとしても、一から作り直すことになるように思われます。 コストを抑えて、求められている機能を実現するには、どのような方法が考えられるでしょうか? アドバイスお願いします。 ※個人的には、Windowsアプリで行おうとしている処理を  すべてWebアプリで処理したほうがコストを抑えられるような気が・・・。 ≪実行/開発環境≫ ●サーバ環境  Windows2000Server SP4  IIS 5.0+J2SE1.3.1_04+Tomcat 3.3.1  SQLServer2000  既存のWebアプリケーションは、Java、JSPで作成  フレームワークとしてStrutsを採用 ●クライアント環境  WindowsXP or Windows2000  Internet Explorer 6.0  VC++6.0 ≪既存Windowsアプリの機能≫ ●既存のWindowsアプリケーションは、ダイアログベースのアプリケーション  (プロジェクト作成時、「MFC AppWizard (exe)」で「ダイアログベース」を選択)。 ●DBに接続し、指定された条件でデータを取得し、集計処理を行う。 ●集計処理後、集計結果を以下のいずれかの方法で出力。  (1)CSVファイル  (2)グラフ画面表示(MSChartを使用) ≪求められている機能≫ ●Webアプリ(Webブラウザ)からWindowsアプリを呼出す  (Windowsアプリの機能を活用したい) ●既存のWindowsアプリでは、集計条件、集計結果の出力方法は  画面より指定していたが、今回は設定ファイルから読込む。  画面から指定はしない。 以上です。