vista .NET2005 MFCです。
マルチドキュメントの勉強を始めたのですが、子ウインドウを処理するための関数、MDIGetActive()や、MDINext() は、MainFrame.cpp でしか使えません。
***view.cpp で使おうとすると、ビルドで、「識別子が見つかりませんでした」というエラーになります。
ChildFrm.cppでも、同じエラーになります。
ヘッダファイルをインクルードしたり、いろいろやってみたのですが、解決しません。
***view.cpp で使うには、どうしたらいいのでしょうか。
アドバイスをお願いします。
自分の書いたものを読み直してみて、言葉足らずだと思ったので、追加します。
ファンクションキーを押した時に、MDINext() が呼ばれるようにしようと思いました。
しかし、***view.cpp で OnKeyDown をハンドルすると、上記のエラーになりますし、MainFrame.cppで OnKeyDown をハンドルすると、ファンクションキーを押しても、OnKeyDown が呼ばれません。
それで煮詰まりました。
よろしくお願いします。
ビュークラスからフレームクラスにOnKeyDownメッセージを再送して対処しましょう。
類似スレ
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=1863777&SiteID=7
ありがとうございました。
((CMainFrame*)AfxGetApp()->GetMainWnd())->OnKeyDown(nChar, nRepCnt, nFlags);
で解決しました。
すみません。
解決にチェックを入れなかったので、もう一度送信します。
OnKeyDownをpublicにするよりもSendMessageでWM_KEYDOWNを送ったほうが綺麗です。
MDIのビューなら
this->GetParentOwner()->SendMessage(WM_KEYDOWN, nChar, MAKELPARAM(nRepCnt, nFlags));
でCMainFrameにWM_KEYDOWNメッセージを遅れます。
Blueさん、ありがとうございます。
修正しました。
ツイート | ![]() |