プロが教えるわが家の防犯対策術!

vc++ でアプリケーション開発をしております。
読み込んだログファイルを表示する Viewer 機能を作成しているのですが
別画面で設定することにより、
任意の行の文字色を変更したり、
背景色を変えたり、フォントを Bold 表示にしたりしたいのですが
できません。

現時点では LISTBOX を使用してログ表示を行っているのですが
コントロールを他のものに変えれば可能なのでしょうか?

ご教授、宜しくお願いします。

A 回答 (2件)

 こんにちは。

まず、参考程度である事を前提といたします。

 フォントオブジェクトを生成しなければいけません。
 CreateFont()及びCreateFontIndirect()で行います。
 Bold表示とはフォントの太さを高めた物です。
 調査・検討してみてください。
 作成したフォントハンドルはデバイスコンテキストに指定します。

 以下はディフォルトフォントを元に太いフォント(Bold)を作成する例です。

static HFONT CreateMyFont(int nBold)
{
 //ディフォルトフォントをゲットする
HFONT hFontDef = (HFONT)GetStockObject(DEFAULT_GUI_FONT);

 //フォントの詳細を受け取る構造体バッファ
LOGFONT lf;

 //フォントハンドルから詳細を受け取る
GetObject(hFontDef, sizeof(lf), &lf);

//このメンバにフォントの太さを設定する
lf.lfWeight = nBold;

//フォントの作成
return CreateFontIndirect(&lf);
}

//何処かに前もって太いフォントハンドルを作成しておく
static HFONT s_hFontBold = CreateMyFont(FW_BOLD);
---------------------------------------------------------------
//以下はWM_DRAWITEMの中です
DRAWITEMSTRUCT* p = (DRAWITEMSTRUCT*)lParam;

//ListBox, ComboBoxの場合、itemIDのメンバは現在のアイテム行を示しています(ゼロベースです)。
//この処理は3行目のアイテムであった時
if(p->itemID == 2)
{
//オーナードロー用のデバイスコンテキストにフォントハンドルを設定 します(これで太い文字が反映される)

HFONT hFontOld = (HFONT)SelectObject(p->hDC, s_hFontBold);

//DrawText()などを使ってテキストを描写します

//終わったら以前のフォントに戻します
SelectObject(p->hDC, hFontOld);
}
---------------------------------------------------------------
    • good
    • 0
この回答へのお礼

ありがとうございました!

参考にさせていただき、
希望の動作が可能となりました!

お礼日時:2008/07/11 17:44

 こんにちは。

参考程度と言う事で。

以下は、リストボックスの特定の行の高さを変更します。
WPARAM wParam = index; //設定変更したい行
LPARAM lParam = MAKELPARAM(cyItem, 0); // アイテムの高さを指定する
//これを呼ぶ
::SendMessage(hwndListBox, LB_SETITEMHEIGHT, wParam, lParam);

関数からの操作では上記位しか出来ないようです。
特定行の色彩を変えたり、フォントスタイルを孤立させたい場合、オーナードローを処理するしかなさそうです。
結論はリストボックスでも可能なはずです。
WM_MEASUREITEM並びにWM_DRAWITEMのメッセージ処理を検索・検討して見てください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

質問をした後も調査を続け、
オーナードローで描画をするところまではできました。

背景色の変更、
テキスト色の変更はできたのですが
Bold 表示の設定の仕方が分かりません。

もしお分かりでしたら教えてください。
宜しくお願いします。

お礼日時:2008/07/10 16:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!