あらかじめ日記

2chまとめサイト「ソノウソホント?」の雑記と、ブログで使えるスクリプトとかテクニックとか。その他、音楽やアニメ、漫画の話題とかも。

まとめサイト「ソノウソホント?」と「ムードもりあげ楽団」はこちら。

CDialog(MFC)からForm(.NET)をモードレス表示するとTABなどのキーが効かない

ふと、古いCDialogなアプリケーションから、別で作ったFormなアプリケーションを呼び出せたら便利だな、と言う事がありまして試してみた時にぶつかった問題。

まず、.NETFormが呼び出せるように、CDialogの旧C++の環境をC++/CLIに移行。
そこから、FormShowDialog(モーダル)なら別に問題ないのですが、Show(モードレス)で表示させるとなぜかTABキーなどが効かないと言う問題が発生。

キーイベントは起きているのにTABなどの標準動作が動かない、と言う状態です。

既知の問題として挙がっているかと思ったものの、調べ方が良くないのか詳しいことは分からず。。

とりあえずキーイベントは来ているのでFormKeyPreviewを設定して、KeyDownイベントでモードレスの場合はそのキーが押されたときと同じ処理する、と言う力技しかないのか、、と思ったものの、結局面倒なのでFormを呼び出す案は取りやめました。笑

メッセージループの処理の仕方が違って、MFCなメッセージループで処理される場合はFormの処理が上手くできていないのかなぁと言う想像、、少し気になるところではあるので、何か情報がありましたら教えて頂きたいところです。