はじめまして.
VC++2008 SDK でRichEditについての質問です.
メモ帳などで一行(「aaaa\r\n」など行末に改行がある)をコピーし,
RichEditに貼り付けを行うと最後の改行が反映されない状況に悩んでおります.
例えば...
111111
222222
とRichEditに表示されているところにメモ帳などから「 aaaa\r\n 」をコピーした時に
111111
aaaa222222
となってしまい改行されません.
色々と試してみたところ下記の時にこの問題が起こる事が分かりました.
・クリップボードがテキスト形式の場合に貼り付けを行った時
・クリップボードがリッチエディット形式?の場合であってもテキスト形式で貼り付け
を行った時
テキスト形式で貼り付け:SendMessage(hEdit, EM_PASTESPECIAL, CF_TEXT, NULL);
皆さんの環境でも同じ動作になりますでしょうか?
できれば改行も含めて貼り付けを行いたいのですが何か方法は無いでしょうか?
宜しくお願い致します.
※RichEditの作成部分
case WM_CREATE:
hRtLib = LoadLibrary(_T(RICHED20.DLL));
hEdit = CreateWindowEx(
WS_EX_CLIENTEDGE, _T(RICHEDIT20A), _T("),
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL |
WS_HSCROLL |
ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL |
ES_NOHIDESEL,
0, 0, 400, 400,
hWnd, (HMENU)IDC_EDIT, hInst, NULL);
break;
文字列としての \r\n を改行コード( 0x0D, 0x0A)に置換してやれば?
回答ありがとうございますm(_)m
メモ帳に入力されている一行をコピーしたので,改行コードは0x0d 0x0aでした.
[メモ帳の内容]
aaaa
bbbb
ここで aaaa+[改行] をコピーしました.
そのままメモ帳に貼り付けを行うと改行も一緒に貼り付けできますが
RichEditでは改行が消えてしまう状況です(汗
[1行目に貼り付け後のメモ帳の内容]
aaaa ←貼り付けた一行
aaaa
bbbb
[1行目に貼り付け後のRichEditの内容]
aaaa1111 ←貼り付けた一行(改行消え)
2222
このような状況です(汗
実際に,RichEditをサブクラス化してWM_PASTEで貼り付けを行われる直前のクリップボ
ードの内容を見たところ,aaaa[改行]→0x61 0x61 0x61 0x61 0x0d 0x0a となってお
り,問題無いようでした.
どうやらRichEditがテキスト形式を貼り付けする際に
最後の改行を消してしまうようです(汗
これは,WM_PASTEなどでクリップボード文字列の最後のもう一つ改行を付け加えるなど
の方法しかないでしょうか……?
もし何か良い方法があればご教授お願い致します.
あまり、マルチラインで改行を付けて表示ってやったことないのですが、
横スクロールの「ES_AUTOHSCROLL」はいらないのでは?
エディット画面上の改行動作は効いても、外からの改行は効かずに横スクロール
が優先になってしまうのでは?
確かめてみたらどうですか?
たしか、Windowsに付属の[ワードパッド]は、RichEditを使っているはずなので、ワード
パッドで確認を行ってみました。
結果、改行されなかったです。
よって、簡単な方法があるとは考えづらい気がします。
回答ありがとうございますm(_)m 非常に助かります.
> 横スクロールの「ES_AUTOHSCROLL」はいらないのでは?
さっそくスタイルから外して実行したのですが,結果は変わりませんでした.
> たしか、Windowsに付属の[ワードパッド]は、RichEditを使っているはずなので、
> ワードパッドで確認を行ってみました。
> 結果、改行されなかったです。
こちらもワードパッドで確認したところ,全く同じ状況を確認しました.
皆様のご意見を聞いてみて,bunさんの言う通り簡単な方法は無いような気がしてきまし
た(汗
という事でコピー/貼り付けを行う際にクリップボードの操作を行って対策をしたいと
考えています.
これで解決にしたいと思います.
かなり長い間考えていたので,皆様のご意見を聞けて良かったです.(^^;
貴重なご意見を,本当にありがとうございましたm(_)m
解決チェックを忘れていました(汗