- ベストアンサー
リッチテキストを利用した文字列の画面表示、コントロール変数のアドレス割り当てについて
- 現在、リッチテキストを利用し、文字列を画面に行ごとに挿入、任意の行に対し背景色をつける処理を構築しようとしていますが、うまくいきません。
- CHARFORMAT2構造体を利用し、コントロール変数に対して背景色を変更しようとするとエラーが起こります。
- コントロール変数に対してアドレスが割り当てられておらず、参照元がないという状態です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その子ダイアログにOnInitDialogメンバー関数は実装されていますか? ここで CDialog::OnInitDialog() を呼び出してダイアログの初期化を行うはずです その際に DoDataExcahngeが呼ばれてメンバー変数とコントロールを結びつけるはずです void OCRGetPr::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_RICHEDIT22, richEdit1); の CDialog::DoDataExchange(pDX); にブレークポイントを置いて実行し このダイアログを表示した際に F10キーで DDX_Control(pDX, IDC_RICHEDIT22, richEditCtrl); になるまで送り F11でDDX_Controlの中をチャックして見ましょう
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
同じようなコードで実験してみましたがご質問のような現象は起きません エラー表示って Debug Assaertion ですか? 表示されるメッセージがあるならそれを省略せずに投稿してみましょう MFCのウィザードでDialogベースでアプリを構築 DLGにRichEdit2.0を2個挿入 コントロール変数、CString変数を追加 InitInstanceの冒頭で AfxInitRitchEdit() を実行 コマンドボタンを追加 これのClickイベントで ご質問のようなコードを実行 といった手順です
補足
ご回答ありがとうございます。 大変失礼致しました。 お察しのとおり、エラーは Debug Assaertion でした。 また、エラーが起きる箇所は前述の通りでしたが、 エラーのさらに具体的な位置は、wincore.cpp内の、hWnd?のようです。 また、説明不足で大変申し訳ありません。 今回作成しているものは、親ダイアログからボタンを押すと、子ダイアログに遷移する仕様となっていて、今回お見せしたコードは子ダイアログのコードになります。 作成方法は、リソースタグでDialog→リソースの追加にてダイアログを選択しております。
お礼
重ね重ねありがとうございました。 ご指摘頂いた箇所にて、間違いを発見することができました。 エラーが起きた原因は、OnInitDialog()が呼び出され、ダイアログが作成される前にコントロール変数に値を代入していたために、参照する実体がない、というものでした。 ひとりで考えていたらもう1,2日は悩むところでした。 ありがとうございました。