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

解決


ハイパー初心者  2007-10-27 13:34:40  No: 66682

vista .NET2005 MFCです。

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

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

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

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


ハイパー初心者  2007-10-27 13:49:06  No: 66683

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

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

それで煮詰まりました。

よろしくお願いします。


Blue  2007-10-27 23:07:41  No: 66684

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

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


ハイパー初心者  2007-10-28 14:30:46  No: 66685

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

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

で解決しました。


ハイパー初心者  2007-10-28 23:34:20  No: 66686

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


Blue  2007-10-29 10:58:59  No: 66687

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

MDIのビューなら

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

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


ハイパー初心者  2007-10-29 12:22:09  No: 66688

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

修正しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加