• ベストアンサー

リストの行ごとの設定変更について

vc++ でアプリケーション開発をしております。 読み込んだログファイルを表示する Viewer 機能を作成しているのですが 別画面で設定することにより、 任意の行の文字色を変更したり、 背景色を変えたり、フォントを Bold 表示にしたりしたいのですが できません。 現時点では LISTBOX を使用してログ表示を行っているのですが コントロールを他のものに変えれば可能なのでしょうか? ご教授、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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); } ---------------------------------------------------------------

Zepetto
質問者

お礼

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

その他の回答 (1)

回答No.1

 こんにちは。参考程度と言う事で。 以下は、リストボックスの特定の行の高さを変更します。 WPARAM wParam = index; //設定変更したい行 LPARAM lParam = MAKELPARAM(cyItem, 0); // アイテムの高さを指定する //これを呼ぶ ::SendMessage(hwndListBox, LB_SETITEMHEIGHT, wParam, lParam); 関数からの操作では上記位しか出来ないようです。 特定行の色彩を変えたり、フォントスタイルを孤立させたい場合、オーナードローを処理するしかなさそうです。 結論はリストボックスでも可能なはずです。 WM_MEASUREITEM並びにWM_DRAWITEMのメッセージ処理を検索・検討して見てください。

Zepetto
質問者

お礼

ありがとうございます。 質問をした後も調査を続け、 オーナードローで描画をするところまではできました。 背景色の変更、 テキスト色の変更はできたのですが Bold 表示の設定の仕方が分かりません。 もしお分かりでしたら教えてください。 宜しくお願いします。

関連するQ&A