MDIの***view.cppでMDINext()などを使うには?

解決


ハイパー初心者  2007-10-27 04:34:40  No: 66682  IP: 192.*.*.*

vista .NET2005 MFCです。

マルチドキュメントの勉強を始めたのですが、子ウインドウを処理するための関数、MDIGetActive()や、MDINext() は、MainFrame.cpp でしか使えません。
***view.cpp で使おうとすると、ビルドで、「識別子が見つかりませんでした」というエラーになります。
ChildFrm.cppでも、同じエラーになります。

ヘッダファイルをインクルードしたり、いろいろやってみたのですが、解決しません。

***view.cpp で使うには、どうしたらいいのでしょうか。

アドバイスをお願いします。

編集 削除
ハイパー初心者  2007-10-27 04:49:06  No: 66683  IP: 192.*.*.*

自分の書いたものを読み直してみて、言葉足らずだと思ったので、追加します。

ファンクションキーを押した時に、MDINext() が呼ばれるようにしようと思いました。
しかし、***view.cpp で OnKeyDown をハンドルすると、上記のエラーになりますし、MainFrame.cppで OnKeyDown をハンドルすると、ファンクションキーを押しても、OnKeyDown が呼ばれません。

それで煮詰まりました。

よろしくお願いします。

編集 削除
Blue  2007-10-27 14:07:41  No: 66684  IP: 192.*.*.*

ビュークラスからフレームクラスにOnKeyDownメッセージを再送して対処しましょう。

類似スレ
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=1863777&SiteID=7

編集 削除
ハイパー初心者  2007-10-28 05:30:46  No: 66685  IP: 192.*.*.*

ありがとうございました。

((CMainFrame*)AfxGetApp()->GetMainWnd())->OnKeyDown(nChar, nRepCnt, nFlags);

で解決しました。

編集 削除
ハイパー初心者  2007-10-28 14:34:20  No: 66686  IP: 192.*.*.*

すみません。
解決にチェックを入れなかったので、もう一度送信します。

編集 削除
Blue  2007-10-29 01:58:59  No: 66687  IP: 192.*.*.*

OnKeyDownをpublicにするよりもSendMessageでWM_KEYDOWNを送ったほうが綺麗です。

MDIのビューなら

this->GetParentOwner()->SendMessage(WM_KEYDOWN, nChar, MAKELPARAM(nRepCnt, nFlags));

でCMainFrameにWM_KEYDOWNメッセージを遅れます。

編集 削除
ハイパー初心者  2007-10-29 03:22:09  No: 66688  IP: 192.*.*.*

Blueさん、ありがとうございます。

修正しました。

編集 削除