リッチエディットでセンタリング – 固定ページ 2 – プログラミング – Home

リッチエディットでセンタリング
 
通知
すべてクリア

[解決済] リッチエディットでセンタリング

固定ページ 2 / 3

kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

背景色の変更だけなら普通のエディットボックスでも WM_CTLCOLOREDIT で出来ます。

普通のエディットボックスなら複数行でなくてもセンタリング出来ませんかね?
(少なくともWindows2000では出来ますが。)

> MFCを知らないのですが、MFC なら CRichEditCtrl::SetParaFormat
> というのはSDKだと別の書き方でできるのですか?

EM_SETPARAFORMAT メッセージです。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

>普通のエディットボックスなら複数行でなくてもセンタリング出来ませんかね?
>(少なくともWindows2000では出来ますが。)

WindowsNTでも出来ますね


返信引用
spark
 spark
(@spark)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

ありがとうございます。
今からEM_SETPARAFORMATをやってみます。

背景色の変更ならエディットボックスでWM_CTLCOLOREDITで出来るんですか?
やってみたけど、背景色は変わったけど、ボックス内の文字部分の
背景色は白です。この白を好きな色にする方法はありませんか?
これさえ分かればリッチエディットも必要ないのに。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

> やってみたけど、背景色は変わったけど、ボックス内の文字部分の
> 背景色は白です。この白を好きな色にする方法はありませんか?

WM_CTLCOLOREDIT のハンドラで SetBkColor します。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

引数のpDCに対してCDC::SetBkColorすれば良いのでは?


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

しまった(^^;
引数は、HDCでしたね・・


返信引用
spark
 spark
(@spark)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

case WM_CTLCOLOREDIT:
SetBkColor((HDC)wParam, 45678);
break;

これでは色が変わりませんでした。
これからEM_SETPARAFORMATのほうもやってみます。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

WM_CTLCOLOREDIT の戻り値はブラシを返すんですよ。

[spark 2002/02/27(水) 13:41:31] ではそうしてらしたと思うんですが、
それに加えて SetBkColor もするということです。


返信引用
spark
 spark
(@spark)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

ありがとうございます。

リッチエディットならWin98で
ES_MULTILINEスタイルの時のみ

PARAFORMAT pf;
memset(&pf, 0, sizeof(PARAFORMAT));
pf.cbSize = sizeof(PARAFORMAT);
pf.dwMask = PFM_ALIGNMENT;
pf.wAlignment = PFA_CENTER;
SendMessage(hRich02, EM_SETPARAFORMAT, 0, (LPARAM)&pf);

でセンタリングできました。

エディットではWin98で

SetBkColor((HDC)wParam, 45678);

で成功していません。
これもOSがWin2000とかだとうまくいくんですか?


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

SetBkColorだけでなく
ブラシのハンドルも返しましょう

case WM_CTLCOLOREDIT:
SetBkColor((HDC)wParam, 45678);
   return ( (LRESULT) hBrush );
break;


返信引用
spark
 spark
(@spark)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

case WM_CTLCOLOREDIT:
return (LRESULT)(HBRUSH)SetBkColor((HDC)wParam, 45678);
break;

こうですか?
でも、背景色は白でした。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

>case WM_CTLCOLOREDIT:
>return (LRESULT)(HBRUSH)SetBkColor((HDC)wParam, 45678);
>break

あの・・、::SetBkColorの戻り値は、COLORREFですよ・・
それをHBRUSHにキャストしてどうするの?

hBrush = ::CreateSolidBrush( 45678 );
のように一度だけブラシを準備しておきましょう


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

またもや
× のように一度だけブラシを準備しておきましょう
○ のように一度だけブラシを作成しておいて、使いましょう


返信引用
spark
 spark
(@spark)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

return (LRESULT)(HBRUSH)SetBkColor((HDC)wParam, 45678);
はめちゃくちゃです。意味も分からず書いてみました。

ありがとうございました。
リッチエディットなら1行でもES_MULTILINEにする。
エディットなら

hBrush = CreateSolidBrush(123);

 case WM_CTLCOLOREDIT:
  SetBkColor((HDC)wParam, 456);
  return ( (LRESULT) hBrush );
break;

のように背景色と、文字部分の背景色をそれそれれ指定する。
間違った部分かあったらご指摘お願いします。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

忘れていましたが後始末も忘れずに・・

case WM_DESTORY://例えば
::DeleteObject( hBrush );
break;


返信引用
固定ページ 2 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました