エディットボックス内のテキストの色分け

[戻る]
しんた 2003/02/17(月) 15:53:55
いつもお世話になります。

さて、早速質問なのですが、
題のとおり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

επιστημη 2003/02/17(月) 15:59:13
ふつーのedit-boxでは、部分的に色を変えることはできません。

しんた 2003/02/17(月) 16:02:02
早速のレスありがとうございます。

やはりそうですか。。。

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

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

NEG(ねぐ) [E-Mail] [HomePage] 2003/02/17(月) 16:50:32
 CRichEditCtrlを使うとか。
http://www24.cds.ne.jp/~neg/pro/piyo1/crec/color.html

しんた 2003/02/18(火) 10:32:22
助言ありがとうございます。

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

以下、コードです。
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(ねぐ) [E-Mail] [HomePage] 2003/02/18(火) 10:49:45
 ”無効”ではなくSetReadOnlyを使用します。

しんた 2003/02/18(火) 12:08:36
ありがとうございます。

m_Alert.SetReadOnly(TRUE);

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

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

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

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

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

REE 2003/02/18(火) 12:48:43
次に書き込むときに、カーソルを移動してから書けばよいです。

しんた 2003/02/18(火) 13:25:18
すいません。
質問が悪かったようですね。

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

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


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

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

しんた 2003/02/19(水) 11:29:30
[[解決]]
いろいろ助言ありがとうございました。

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

古いスレッドには追加発言できません。