奇妙な問題が見つかりました。私のMFCアプリケーションでは、CEnditにCWndポインタをキャストしようとしています。 GetFocus関数を介してCWndポインタを取得します。 dynamic_cast<CEdit*>(pWnd)
を実行すると、0が返されます。MndでCWndのCEditポインタへのポインタをキャスト
答えて
最初に、MFCライブラリはRTTIを有効にしてコンパイルされないため、dynamic_cast
は動作しません。
第二に、CWnd::FromHandle
によって返さCWnd*
は、いずれかの現存CWnd
ある、またはどれも、HWND
周りフライ級ラッパーが存在しない場合。フライウェイトラッパーが返された場合、HWND
がエディットコントロールを参照していても、CEdit
になりません。
HWND
を保持するためにCEdit
を既に作成している場合は、CEdit
が表示されます。
あなたはCWnd*
あなたが得るがHWND
に添付するAttach
を呼び出して、明示的に作成する必要がありCEdit*
を取得するにはCWnd::FromHandlePermanent
を使用して、既存のオブジェクトのためのものであることを知りたい場合。
はあなたがカンニングしたい場合は別の方法として、CEdit
はデータメンバや仮想関数を持っていないし、それはまったく同じで、メモリレイアウトを持っているので、あなたは、(理論的には安全ではない)static_cast
を使用することができCWnd
から直接継承します。
実際はstatic_castがうまく動作します。唯一のポイントは、どのような種類の要素に焦点が当てられているかを確認する必要があることです。だから私はあなたにdynamic_castできると思った。 – besworland
いいえ、あなたは 'GetClassName(HWND)'をする必要があります。 – Ben
GetClassNameは良い方法です!ありがとうございました! – besworland
- 1. 配列へのポインタへのポインタのキャスト
- 2. C++型キャスト:voidポインタからクラスポインタへのポインタをキャスト
- 3. キャストこのスニペットで「VLAをCONSTするポインタ」に「CONSTへのポインタ」
- 4. 任意の型ポインタへのvoidポインタのキャスト
- 5. ポインタへのポインタ?
- 6. ポインタへのポインタ
- 7. dladdr:ポインタへのポインタ対オブジェクトへのポインタ
- 8. 構造体へのvoidポインタのキャスト
- 9. long longへのポインタの明示的キャスト
- 10. longへの関数ポインタのキャスト
- 11. キャストするポインタへのローカル変数
- 12. 異なるデータ型へのポインタ型キャスト
- 13. 構造体とキャストへのポインタ
- 14. C++ポインタへのポインタのポインタへのポインタのコピー
- 15. C++ポインタへのポインタ
- 16. ポインタをポインタにキャストしています...ポインタですか?
- 17. ポインタとポインタへのポインタの問題
- 18. Cポインタ型キャスト
- 19. ポインタとC/C++でのキャスト
- 20. 型キャストcharポインタを整数ポインタ
- 21. ポインタのベクトルへのポインタ
- 22. COM/ATLのポインタへのポインタ
- 23. F#のポインタへのポインタ
- 24. scala-nativeのポインタへのポインタ
- 25. C++のポインタへのポインタ
- 26. ポインタの混乱へのポインタ
- 27. ポインタへのポインタのメモリリーク
- 28. Objective-Cのポインタへのポインタ
- 29. C:へのポインタのポインタ
- 30. C、ポインタ(またはポインタへのポインタ?)、**、malloc
あなたの 'CWnd'ポインタは実際に' CEdit'コントロールへのポインタですか? –
Yeap。私はそれがCEditコントロールを指していることを確認しました。 GetDlgCtrlIDを呼び出すと、コントロールのIDが返されます。 – besworland
RTTIが有効になっていますか?これはC++コンパイラの設定で確認できます – msteiger