エディットボックス内のテキストの色分け – プログラミング – Home

エディットボックス内のテキストの色分け
 
通知
すべてクリア

[解決済] エディットボックス内のテキストの色分け


しんた
 しんた
(@しんた)
ゲスト
結合: 23年前
投稿: 48
Topic starter  

いつもお世話になります。

さて、早速質問なのですが、
題のとおり1つのエディットボックス内に表示させるテキストの色分けをしたいのです。
具体的に言うと、

m_messageという、メンバ変数を作成して、そこに
aaa、bbbという、2通りのテキストを表示させます。
このときに、aaaは青で表示し、
bbbは赤で表示としたいのですが、なかなか、上手くいきません。

また、このときに文字を表示させるのは最初から入っているのではなく、
マウスの右ボタンを押したときにはaaa、
左ボタンを押したときにはbbb
と場合わけをしています。

void CMainView2::OnRButtonDown(UINT nFlags, CPoint point)
{
CString work=";
m_message=aaa\r\n;
work=m_message;
m_message=work+m_message;
UpdateData(FALSE);

CFormView::OnRButtonDown(nFlags, point);
}

void CMainView2::OnLButtonDown(UINT nFlags, CPoint point)
{
CString work=";
m_message=bbb\r\n;
work=m_message;
m_message=work+m_message;
UpdateData(FALSE);

CFormView::OnRButtonDown(nFlags, point);
}

HBRUSH CMainView2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
if(Symbol==aaa)
{
pDC->SetTextColor(RGB(255,0,0));
}
else pDC->SetTextColor(RGB(0,0,255));
return hbr;
}

この、プログラムだと、
色はきちんと変わるのですが、
ボックス内のテキストすべての色が変わってしまいます。

長くなってすいませんが
何か、ご助言ください。

環境Win2000,MDI,MFC


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

ふつーのedit-boxでは、部分的に色を変えることはできません。


返信引用
しんた
 しんた
(@しんた)
ゲスト
結合: 23年前
投稿: 48
Topic starter  

早速のレスありがとうございます。

やはりそうですか。。。

方法としては、edit-boxを複数配置するしかないのでしょうか??

なにか、他に方法があるのでしょうか??
作っているものが、アラートを表示するものなので、
出来れば見た目をきれいにし、色分けをしたいと考えていたもので…


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 23年前
投稿: 178
 

 CRichEditCtrlを使うとか。
http://www24.cds.ne.jp/~neg/pro/piyo1/crec/color.html


返信引用
しんた
 しんた
(@しんた)
ゲスト
結合: 23年前
投稿: 48
Topic starter  

助言ありがとうございます。

リッチエディットにして上手く動きました。

以下、コードです。
void CMainView2::OnRButtonDown(UINT nFlags, CPoint point)
{
message=aaa\r\n;
CFormView::OnRButtonDown(nFlags, point);
}

void CMainView2::OnLButtonDown(UINT nFlags, CPoint point)
{
message=bbb\r\n;
CFormView::OnRButtonDown(nFlags, point);
}
void CMainView2::CtlColor()
{
CHARFORMAT cf;
CRichEditCtrl *cre=(CRichEditCtrl *)GetDlgItem(IDC_Alert);
cre->GetSelectionCharFormat(cf);
cf.dwMask=CFM_COLOR;
cf.dwEffects=0;
if(Symbol==aaa)
{
cf.crTextColor=RGB(255,0,0);
}
else
{
cf.crTextColor=RGB(0,0,255);
}
cre->SetSelectionCharFormat(cf);
cre->ReplaceSel(message);
}

ところで、
リッチエディットのことなのですが、
”無効”にした状態だと、
スクロールバーが動きません。

コレを動かすようにする方法はあるのでしょうか??


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 23年前
投稿: 178
 

 ”無効”ではなくSetReadOnlyを使用します。


返信引用
しんた
 しんた
(@しんた)
ゲスト
結合: 23年前
投稿: 48
Topic starter  

ありがとうございます。

m_Alert.SetReadOnly(TRUE);

を記述することで解決は出来ましたが、
新たな問題が。。。

コレだと、書き込みは出来ないのですが、
カーソル??(点滅してるやつ)みたいなものが出てきますよね?

なので、次に書き込むときにはそのカーソルがある位置からになってしまうのです。。。

コレを、回避する方法はないのでしょうか?

質問ばかりしてすいません。


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

次に書き込むときに、カーソルを移動してから書けばよいです。


返信引用
しんた
 しんた
(@しんた)
ゲスト
結合: 23年前
投稿: 48
Topic starter  

すいません。
質問が悪かったようですね。

私が行いたいのは、
このページのようにカーソル自体が出てこないというのをつくりたかったのです。
すいません。

まさに、このページのような感じで、
コピーは出来るのだけど、書き込みは出来なくカーソルも出てこない。
もちろん、スクロールも出来るといったのを作成したかったのです。

すいません、質問下手で。

また、よろしければ、ご助言ください


返信引用
しんた
 しんた
(@しんた)
ゲスト
結合: 23年前
投稿: 48
Topic starter  

いろいろ助言ありがとうございました。

読取専用で、
カーソルの位置を移動することで、解決しました。
いろいろな助言ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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