• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CFrameWnd とCFormView2)

CFrameWnd とCFormView2のコーディングでの試行錯誤とタスクバーの非表示について

このQ&Aのポイント
  • CFrameWndとCFormViewを使ったコーディングの試行錯誤について述べています。CFrameWnd::LoadFrameは成功しましたが、CFrameWnd::Createはうまくいかなかったようです。
  • また、CFrameWndをタスクバーで非表示にする方法についても疑問を投げかけています。ShowWindow(SW_SHOW)を使用するとタスクバーに表示されてしまうため、ダイアログベースにする必要があるかどうかを尋ねています。
  • 質問文章の中では具体的な解決策は示されていませんが、CFrameWndとCFormView2のコーディングとタスクバーの非表示に関する問題を詳しく調査してみることができます。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>>CFrameWnd::Create()の場合、NULLを指定するのも可能>です。NULLで上手くいきましたか? >いえNULLにすると「ハンドルされていない例外・・・」が>でてしまいます。 うーん、NULLでだめなのはダイアログベースだからかな? 実際に試してないんでわからないですが・・・ クラス名は自分で登録したクラス名を指定して、CCreateContext*の引数、NULLにした場合フレームウィンドウだけは表示されませんか? あと、MFCの場合はいざとなったらMFCのフレームワーク自体もデバッグすればたいてい原因は解ると思います。 >LoadFrame時の方ですが以下のようなメッセージがアウトプットウィンドウにでてしまいます。 ASSERTダイアログが出てこないんでしたら気にしないでいいですよ。MFCの内部処理で例外ハンドラを使うような処理をしてるだけですから。 ワーニングの方は、Docがある前提でフレームワークが組まれているからでしょうけど気持ち悪いですけどね。

sha-girl
質問者

お礼

>クラス名は自分で登録したクラス名を指定して、CCreateContext*の引数、NULLにした場合フレームウィンドウだけは表示されませんか? それらを含めて色々と試してみましたが無理でした。(なにかすごい基本的な事を見落としているのかもしれませんが・・) フレームウインドウもでません。 「ハンドルされていない例外はXXX.exeにあります:0xC0000005: Access Violation。」 _AFX_INLINE CStringData* CString::GetData() const { ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; } の部分でとまっています。 taka_tetsuには色々とお世話になり感謝しております。 有難うございました。

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>クラス名の事はあまりよくわかっていないのですが >先にAfxRegisterWndClassでクラス名を >登録しておく必要があるということですね? そうです。 CFrameWnd::Create()の場合、NULLを指定するのも可能です。NULLで上手くいきましたか? >Windows のクラス名を示す NULL で終わる文字列へのポインタ。 >クラス名には、AfxRegisterWndClass グローバル関数または >Windows 関数の RegisterClass で登録された任意の >名称を指定できます。NULL のときは、既定の >組み込み CFrameWnd 属性が使われます。

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_cframewnd.3a3a.create
sha-girl
質問者

お礼

度々のご回答有難うございます。m(__)m >CFrameWnd::Create()の場合、NULLを指定するのも可能です。NULLで上手くいきましたか? いえNULLにすると「ハンドルされていない例外・・・」がでてしまいます。 LoadFrame時の方ですが以下のようなメッセージがアウトプットウィンドウにでてしまいます。 「例外処理 (初回) は XXX.exe (KERNEL32.DLL) にあります: 0xE06D7363: Microsoft C++ Exception」 warningでno documentなんちゃらとでていたので m_pDoc = (CBackAppleDoc*)RUNTIME_CLASS(CBackAppleDoc)->CreateObject(); con.m_pCurrentDoc = m_pDoc; を追加したのですがwarningはなくなりますが「例外・・・」は やはりでてしまいます。ウインドウ自体は何事もなく表示されるのですが・・・ これらの処理はMFCでダイアログボックスベースのウィザードで作成し そのダイアログ自体をツールウインドウにして非表示にし、 OnInitDialogの中で処理を行っています。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>CFrameWnd::Createの方はうまくいきませんでした。 "MyClass"って自分で登録しましたか? >ShowWindow(SW_SHOW);の時点でタスクバーにでてしまいます。 LoadFrameやCreateの引数の CWnd* pParentWnd にNULLを指定しているからです。 非表示にしてあるの親ウィンドウのCWnd*を渡してください。

sha-girl
質問者

お礼

taka_tetsuさんの回答には恐縮です。 ご指摘の通りAfxGetApp()->m_pMainWndを指定してやる事で解決致しました。 ご回答、誠に有難うございました。 クラス名の事はあまりよくわかっていないのですが 先にAfxRegisterWndClassでクラス名を 登録しておく必要があるということですね?