- ベストアンサー
CFrameWnd とCFormView2のコーディングでの試行錯誤とタスクバーの非表示について
- CFrameWndとCFormViewを使ったコーディングの試行錯誤について述べています。CFrameWnd::LoadFrameは成功しましたが、CFrameWnd::Createはうまくいかなかったようです。
- また、CFrameWndをタスクバーで非表示にする方法についても疑問を投げかけています。ShowWindow(SW_SHOW)を使用するとタスクバーに表示されてしまうため、ダイアログベースにする必要があるかどうかを尋ねています。
- 質問文章の中では具体的な解決策は示されていませんが、CFrameWndとCFormView2のコーディングとタスクバーの非表示に関する問題を詳しく調査してみることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>>CFrameWnd::Create()の場合、NULLを指定するのも可能>です。NULLで上手くいきましたか? >いえNULLにすると「ハンドルされていない例外・・・」が>でてしまいます。 うーん、NULLでだめなのはダイアログベースだからかな? 実際に試してないんでわからないですが・・・ クラス名は自分で登録したクラス名を指定して、CCreateContext*の引数、NULLにした場合フレームウィンドウだけは表示されませんか? あと、MFCの場合はいざとなったらMFCのフレームワーク自体もデバッグすればたいてい原因は解ると思います。 >LoadFrame時の方ですが以下のようなメッセージがアウトプットウィンドウにでてしまいます。 ASSERTダイアログが出てこないんでしたら気にしないでいいですよ。MFCの内部処理で例外ハンドラを使うような処理をしてるだけですから。 ワーニングの方は、Docがある前提でフレームワークが組まれているからでしょうけど気持ち悪いですけどね。
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>クラス名の事はあまりよくわかっていないのですが >先にAfxRegisterWndClassでクラス名を >登録しておく必要があるということですね? そうです。 CFrameWnd::Create()の場合、NULLを指定するのも可能です。NULLで上手くいきましたか? >Windows のクラス名を示す NULL で終わる文字列へのポインタ。 >クラス名には、AfxRegisterWndClass グローバル関数または >Windows 関数の RegisterClass で登録された任意の >名称を指定できます。NULL のときは、既定の >組み込み CFrameWnd 属性が使われます。
お礼
度々のご回答有難うございます。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)
>CFrameWnd::Createの方はうまくいきませんでした。 "MyClass"って自分で登録しましたか? >ShowWindow(SW_SHOW);の時点でタスクバーにでてしまいます。 LoadFrameやCreateの引数の CWnd* pParentWnd にNULLを指定しているからです。 非表示にしてあるの親ウィンドウのCWnd*を渡してください。
お礼
taka_tetsuさんの回答には恐縮です。 ご指摘の通りAfxGetApp()->m_pMainWndを指定してやる事で解決致しました。 ご回答、誠に有難うございました。 クラス名の事はあまりよくわかっていないのですが 先にAfxRegisterWndClassでクラス名を 登録しておく必要があるということですね?
お礼
>クラス名は自分で登録したクラス名を指定して、CCreateContext*の引数、NULLにした場合フレームウィンドウだけは表示されませんか? それらを含めて色々と試してみましたが無理でした。(なにかすごい基本的な事を見落としているのかもしれませんが・・) フレームウインドウもでません。 「ハンドルされていない例外はXXX.exeにあります:0xC0000005: Access Violation。」 _AFX_INLINE CStringData* CString::GetData() const { ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; } の部分でとまっています。 taka_tetsuには色々とお世話になり感謝しております。 有難うございました。