私の SDI アプリケーションでは、この動作を取得する必要があります。FormView のボタンをクリックすると、CDialog が開きます。CDialog の [OK] ボタンを押すと、FormView の関数が呼び出されます。CDialog を閉じたくありません。モードレス ダイアログで実行しようとしましたが、ダイアログから formview 関数を呼び出すと、hwnd が失われたように、formview のコントロールにアクセスできません。エラーは m_hwnd のメモリを読み取れません、hwnd は ??? です。これは私のコードです: モードレス ダイアログを開く:
CCampiDlg *m_pDialog = NULL;
HWND hCampi = NULL;
// Invoking the Dialog
m_pDialog = new CCampiDlg;
if (m_pDialog != NULL)
{
BOOL ret = m_pDialog->Create(m_pDialog->IDD, this);
if (!ret) //Create failed.
{
AfxMessageBox(_T("Error creating Dialog"));
}
m_pDialog->ShowWindow(SW_SHOW);
}
ダイアログで[OK]ボタンを押すと、次のようになります。
CEditorTxView pView;
box2 = (CEdit*)(GetDlgItem(IDC_CAMPI_BOX2));
box2->GetWindowTextW(campo);
pView.inserisciCampo(1, campo);
CEditorTxView (CFormView) の inserisciCampo 関数では、コントロール txtCtrl で操作を行う必要がありますが、hwnd が失われています。txtCtrl の宣言は CEditorTxView.h にあります。
CTx1 txtCtrl;
DoDataExchange 関数で初期化します。
void CEditorTxView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TX1, txtCtrl);
}
誰かが私を助けてくれますか?