奇妙な問題が見つかりました。私の MFC アプリケーションでは、CWnd ポインターを CEdit にキャストしようとしています。GetFocus 関数を使用して CWnd ポインターを取得します。私がやっているときdynamic_cast<CEdit*>(pWnd)
、それは0を返します.それは何でしょうか?
2444 次
1 に答える
6
まず、MFC ライブラリは RTTI を有効にしてコンパイルされていdynamic_cast
ないため、動作しません。
第 2 に、CWnd*
返される byCWnd::FromHandle
は現存するCWnd
であるか、存在しない場合は の周りの flyweight ラッパーHWND
です。flyweight ラッパーが返されたCEdit
場合、基になるHWND
ものがエディット コントロールを参照していても、それは にはなりません。
を保持する をCEdit
すでに作成している場合にのみ、 を取得します。CEdit
HWND
CWnd*
取得した が既存のオブジェクトのものであることを知りたい場合は、次を使用しますCWnd::FromHandlePermanent
を取得するには、CEdit*
明示的に作成し、 を呼び出しAttach
て にアタッチする必要がありますHWND
。
または、チートしたい場合CEdit
は、データ メンバーや仮想関数がなく、から直接継承するCWnd
ため、 (理論的には安全ではない) を使用できますstatic_cast
。これは、メモリ内レイアウトがまったく同じであるためです。
于 2012-05-04T10:38:28.447 に答える