이상한 문제가 발견되었습니다. 내 MFC 응용 프로그램에서 CEnd 1 CWnd 포인터를 캐스팅하는 중이 야. GetFocus 함수를 통해 CWnd 포인터를 검색합니다. dynamic_cast<CEdit*>(pWnd)
일 때 0을 반환합니다. 무엇이 될 수 있습니까?CWnd MFC의 CEdit 포인터에 대한 포인터를 캐스팅
답변
첫째, MFC 라이브러리는 RTTI를 사용하여 컴파일되지 않으므로 dynamic_cast
은 어쨌든 작동하지 않습니다.
둘째 CWnd::FromHandle
의해 반환 CWnd*
어느 현존 CWnd
, 또는 하나도 HWND
주위 플라이급 래퍼가 존재하지 않는 경우. 플라이 웨이 래퍼가 반환되는 경우 기본 HWND
이 편집 컨트롤을 참조하는 경우에도 CEdit
이되지 않습니다.
HWND
을 보유하기 위해 CEdit
을 이미 생성 한 경우에만 CEdit
이 표시됩니다. 당신은 당신이 얻을 CWnd*
은 이미 기존 개체에 대한 것을 알고 싶은 경우에
, 당신은 다음, 명시 적으로 하나를 만들 HWND
에 첨부 Attach
를 호출 할 필요가 CEdit*
를 얻으려면 CWnd::FromHandlePermanent
를 사용합니다.
는 속임수하려는 경우 또는 CEdit
는 데이터 구성원이나 가상 함수가 없습니다 그것은 동일한 메모리 레이아웃을 가지고 있기 때문에 그래서 당신은, A (이론적으로 안전하지 않은) static_cast
를 사용할 수 CWnd
에서 직접 상속합니다.
사실 static_cast는 정상적으로 작동합니다. 유일한 포인트는 어떤 종류의 요소에 초점이 맞는지 확인해야한다는 것입니다. 그러므로 나는 당신을 dynamic_cast 할 수 있다고 생각했습니다. – besworland
아니요, 당신은'GetClassName (HWND)'을 할 필요가 있습니다. – Ben
GetClassName은 좋은 방법입니다! 고맙습니다! – besworland
- 1. MFC의 CEdit 및 GetwindowText
- 2. 배열에 대한 포인터에 대한 포인터를 어떻게 선언합니까?
- 3. 파일에서 정수 포인터에 대한 포인터를 읽는 방법?
- 4. 포인터를 사용하여 개체에 캐스팅
- 5. 포인터에 대한 포인터에 대한 질문과 그들이 NULL인지 확인
- 6. 포인터에 대한 참조
- 7. MFC의 컨트롤 크기 조정
- 8. C++ 함수 매개 변수의 기본 클래스 포인터 포인터에 대한 캐스팅
- 9. const 및 일반 포인터에 대한 포인터를 혼합 할 수 있습니까?
- 10. __far 포인터에 대한 포인터를 선언하는 올바른 방법은 무엇입니까?
- 11. C : 포인터에 대한 포인터를 사용하여 메모리를 할당하기위한 적절한 구문
- 12. 이 검색 함수가 포인터에 대한 포인터를 반환하는 이유는 무엇입니까?
- 13. Cocos2d : 부모의 클래스 포인터에 대한 포인터를 가지고 있어도 괜찮습니까?
- 14. 구조체 포인터에 대한 걱정
- 15. MFC CEdit pParentWnd 전달
- 16. void 포인터에 대한 cpp make_shared
- 17. C++ 포인터에 대한 포인터 삭제
- 18. COM/ATL의 포인터에 대한 포인터
- 19. CWnd :: GetSafeHwnd() 및 CWnd :: m_hWnd ThreadSafe 있습니까?
- 20. void 포인터를 캐스팅 한 이유는 무엇입니까?
- 21. Objective-C의 포인터에 대한 포인터
- 22. 연결된 목록의 포인터에 대한 포인터
- 23. 포인터에 대한 연산
- 24. C에서 포인터에 대한 혼란
- 25. 다른 포인터에 대한 'void *`
- 26. MFC의 경로 선택 구성 요소
- 27. C++에서 포인터에 대한 인덱스
- 28. MFC의 대화 상자에 배치 된 컨트롤의 크기와 위치를 얻는 방법은 무엇입니까?
- 29. 이진 검색에서 포인터에 대한 포인터를 사용하는 이유에 대한 더 자세한 설명이 필요합니다.
- 30. 예외 냄으로써 sscanf를 가진 플로트 [3]에 대한 포인터에 대한 포인터를 사용
'CWnd' 포인터가 실제로'CEdit' 컨트롤에 대한 포인터인지 확신합니까? –
Yeap. CEdit 컨트롤을 가리키고 있는지 확인했습니다. GetDlgCtrlID를 호출하면 컨트롤의 ID를 반환합니다. – besworland
RTTI가 활성화되어 있습니까? C++ 컴파일러 설정에서 이것을 확인할 수 있습니다. – msteiger