アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://oshiete1.goo.ne.jp/kotaeru.php3?q=880746の続きです。

試行錯誤でCFrameWnd とCFormViewを使ったコーディングをしてみました
CFrameWnd::LoadFrameを使った方はうまくいったのですがCFrameWnd::Createの方はうまくいきませんでした。

//LoadFrame
CCreateContext con;
memset(&con,0,sizeof(CCreateContext));
con.m_pNewViewClass = RUNTIME_CLASS(CXXXView);
m_pMainFrame = new CMainFrame;
m_pMainFrame->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,NULL, &con );
m_pMainFrame->ShowWindow(SW_SHOW);

//Create・・・うまくいかない(何故?)
m_pContext = new CCreateContext;
memset(m_pContext,0,sizeof(CCreateContext));
m_pContext->m_pNewViewClass = RUNTIME_CLASS(CXXXView);
m_pMainFrame->Create("MyClass","MyWindow",WS_OVERLAPPEDWINDOW,CRect(0,0,10,10),NULL,NULL,0,m_pContext);
m_pMainFrame->ShowWindow(SW_SHOW);


ところでLoadFrameでうまくいったのは良いのですが
一つ疑問が、、、CFrameWndをタスクバーでは非表示で
表示することって無理でしょうか?
ShowWindow(SW_SHOW);の時点でタスクバーにでてしまいます。
タスクバーに表示させないにはダイアログベースにする必要があるのでしょうか?
宜しくお願いいたします。

A 回答 (3件)

>>CFrameWnd::Create()の場合、NULLを指定するのも可能>です。

NULLで上手くいきましたか?
>いえNULLにすると「ハンドルされていない例外・・・」が>でてしまいます。

うーん、NULLでだめなのはダイアログベースだからかな?
実際に試してないんでわからないですが・・・

クラス名は自分で登録したクラス名を指定して、CCreateContext*の引数、NULLにした場合フレームウィンドウだけは表示されませんか?
あと、MFCの場合はいざとなったらMFCのフレームワーク自体もデバッグすればたいてい原因は解ると思います。


>LoadFrame時の方ですが以下のようなメッセージがアウトプットウィンドウにでてしまいます。

ASSERTダイアログが出てこないんでしたら気にしないでいいですよ。MFCの内部処理で例外ハンドラを使うような処理をしてるだけですから。
ワーニングの方は、Docがある前提でフレームワークが組まれているからでしょうけど気持ち悪いですけどね。
    • good
    • 0
この回答へのお礼

>クラス名は自分で登録したクラス名を指定して、CCreateContext*の引数、NULLにした場合フレームウィンドウだけは表示されませんか?
それらを含めて色々と試してみましたが無理でした。(なにかすごい基本的な事を見落としているのかもしれませんが・・)
フレームウインドウもでません。

「ハンドルされていない例外はXXX.exeにあります:0xC0000005: Access Violation。」
_AFX_INLINE CStringData* CString::GetData() const
{ ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }
の部分でとまっています。

taka_tetsuには色々とお世話になり感謝しております。
有難うございました。

お礼日時:2004/06/07 07:47

>クラス名の事はあまりよくわかっていないのですが


>先にAfxRegisterWndClassでクラス名を
>登録しておく必要があるということですね?

そうです。
CFrameWnd::Create()の場合、NULLを指定するのも可能です。NULLで上手くいきましたか?

>Windows のクラス名を示す NULL で終わる文字列へのポインタ。
>クラス名には、AfxRegisterWndClass グローバル関数または
>Windows 関数の RegisterClass で登録された任意の
>名称を指定できます。NULL のときは、既定の
>組み込み CFrameWnd 属性が使われます。

参考URL:http://www.microsoft.com/japan/msdn/library/defa …
    • good
    • 0
この回答へのお礼

度々のご回答有難うございます。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の中で処理を行っています。

お礼日時:2004/06/06 22:40

>CFrameWnd::Createの方はうまくいきませんでした。



"MyClass"って自分で登録しましたか?


>ShowWindow(SW_SHOW);の時点でタスクバーにでてしまいます。

LoadFrameやCreateの引数の
CWnd* pParentWnd
にNULLを指定しているからです。

非表示にしてあるの親ウィンドウのCWnd*を渡してください。
    • good
    • 0
この回答へのお礼

taka_tetsuさんの回答には恐縮です。
ご指摘の通りAfxGetApp()->m_pMainWndを指定してやる事で解決致しました。
ご回答、誠に有難うございました。

クラス名の事はあまりよくわかっていないのですが
先にAfxRegisterWndClassでクラス名を
登録しておく必要があるということですね?

お礼日時:2004/06/06 21:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!