[ad_1]
こんにちは! 助けが必要です – 私は MS VC++ 6 プロジェクトを持っています。 そのため、モーダルウィンドウ(IDC_EDIT1)の1つである変数m_Edit1(CEdit)にEDITコントロールを追加しようとしていますが、その後でもそのようなウィンドウを開くことは不可能です。 アプリケーションが「アクセス違反」エラーでクラッシュしました – NTDLL.DLL (0xC0000005)。 クラスウィザードを介してこの変数を削除すると、すべてが再びOKになります。 そして、メインフォームであっても、すべてのウィンドウでこの問題が見つかりました。 それはどういう意味ですか? サポートありがとうございます。
私が試したこと:
ヘッダーファイル:
// Dialog Data //{{AFX_DATA(CNotebooksDlg) enum { IDD = IDD_NOTEBOOKS_DIALOG }; CEdit m_Edit1; CComboBox m_ComboSerial; CComboBox m_ComboDeviceType; CSortListCtrl m_ctrlListHistory;
cppファイル:
//{{AFX_DATA_MAP(CNotebooksDlg) DDX_Control(pDX, IDC_EDIT1, m_Edit1); DDX_Control(pDX, IDC_COMBO_SERIAL_NUMBER, m_ComboSerial); DDX_Control(pDX, IDC_COMBO_DEVICE_TYPE, m_ComboDeviceType); DDX_Control(pDX, IDC_LIST_HISTORY, m_ctrlListHistory);
解決策 1
電話する必要があります m_Edit.create( style, rect, parent, ID)
CEdit オブジェクトを使用する前に。
解決策 2
ダイアログ内のコントロールを MFC プログラムで動作させるには、3 つの手順があります。 そのうち 2 つを実行し、3 つ目を省略すると、観察された動作が発生します。 3 番目のステップは、編集コントロールを IDD_NOTEBOOKS_DIALOG
識別子付き IDC_EDIT1
リソースファイル内。 これは通常、リソース エディターを使用して行われますが、必要に応じて手動で行うこともできます。
FWIW、私は長い間 MFC を使ってきましたが、最終的にはダイアログ クラス宣言をヘッダー ファイルに決して置かない習慣がつきました。それは単に不必要だからです。 適切なインターフェイスを使用すると、ダイアログ自体以外、ダイアログの実装の詳細を知る必要はありません。 その鍵となるのがインターフェースです。 私が書く典型的なインターフェースは次のようなものになります。
bool OpenNotebookDlg( CWnd * pparent, NotebookData & data );
その関数の実装はダイアログのコードを使用して行われ、データを使用してコントロールを初期化します。 OK
クリックすると、ダイアログからデータが抽出され、true が返されます。 通常、私は Edit
のメソッド NotebookData
クラスとその実装は、示されている関数を呼び出します。 これは非常にクリーンで使いやすい方法だと思います。 1 つの注意点は、ダイアログ コードが表示しているデータについて認識している必要があるということですが、それは公平かつ適切なトレードオフであると考えています。
[ad_2]
コメント