class CGateDlg : public CDialog
{
...
public:
// here is my control's variable
CEdit m_edit_a;
// here I map variable to control
virtual void DoDataExchange(CDataExchange* pDX);
}
을 그리고 이것은 내가 컨트롤에 내 변수를 매핑하는 방법입니다 :
void CGateDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_A, m_edit_a);
}
이 작동하는 방법이다 : 사용자가 입력란에 텍스트를 입력합니다. 그런 다음 그는 "재설정"버튼을 눌러 편집 상자를 지 웁니다.
void CGateDlg::OnBnClickedReset()
{
// clear edit box
m_edit_a.SetWindowTextW(L"");
}
응용 프로그램이 오류없이 시작 :이 리셋 버튼을 클릭 한 후 편집의 선택을 취소 할 책임이 코드 조각입니다. EditBox에 텍스트를 입력하고 "Reset"버튼을 누릅니다. 그럼 난() (이 있는지 확인) 나 winocc.cpp에 이르게 오류, 라인 (245)을 얻을 :
void CWnd::SetWindowText(LPCTSTR lpszString)
{
ENSURE(this);
ENSURE(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));
if (m_pCtrlSite == NULL)
::SetWindowText(m_hWnd, lpszString);
else
m_pCtrlSite->SetWindowText(lpszString);
}
나는 문제가 HWND로 생각 :
this 0x0030fa54 {CEdit hWnd=0x00000000} CWnd * const
하지만 그것을 해결하는 방법 ?
CEdit *m_edit_a;
m_edit_a = reinterpret_cast<CEdit *>(GetDlgItem(IDC_EDIT_A));
m_edit_a->SetWindowTextW(L"");
내가 잘못 뭐하는 거지 :이를 사용하여 내 컨트롤의 값을 액세스 할 때
모든 것이 잘 작동?
전체 수업 코드를 게시 할 수 있습니까? –
어떻게'CGateDlg'를 만드나요? 만약 당신이 리소스 ID에서 그것을 생성하지 않는다면'DDX_Control'은 당신을 위해 작동하지 않을 수도 있고'CEdit '을 사용하기 전에'CGateDlg'에 대한'OnCreate' 오버로드에서'm_edit_a.Create'를 명시 적으로 호출해야 할 수도 있습니다 ' – AJG85
"자원 ID에서 생성"이란 정확히 무엇을 의미합니까? 어떻게 보일지 볼 수있는 링크 나 샘플을 게시 해주십시오. 나는 지금 일하고 있지만 집에 돌아와 필요할 때 전체 머리글과 수업을 붙여 넣으면 모든 아이디어를 시험해 볼 것입니다. –