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にテキストを入力し、「リセット」ボタンを押します。それから私は、()(これを確実に)私は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から作成する」という正確な意味は?どのように表示されるべきかをわかるリンクやサンプルを投稿してください。私は現時点で仕事中ですが、家に帰って必要に応じてヘッダーとクラス全体を貼り付けると、あなたのアイデアをすべて試してみます。 –