- ベストアンサー
リストの行ごとの設定変更について
vc++ でアプリケーション開発をしております。 読み込んだログファイルを表示する Viewer 機能を作成しているのですが 別画面で設定することにより、 任意の行の文字色を変更したり、 背景色を変えたり、フォントを Bold 表示にしたりしたいのですが できません。 現時点では LISTBOX を使用してログ表示を行っているのですが コントロールを他のものに変えれば可能なのでしょうか? ご教授、宜しくお願いします。
- みんなの回答 (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); } ---------------------------------------------------------------
その他の回答 (1)
- machongola
- ベストアンサー率60% (434/720)
こんにちは。参考程度と言う事で。 以下は、リストボックスの特定の行の高さを変更します。 WPARAM wParam = index; //設定変更したい行 LPARAM lParam = MAKELPARAM(cyItem, 0); // アイテムの高さを指定する //これを呼ぶ ::SendMessage(hwndListBox, LB_SETITEMHEIGHT, wParam, lParam); 関数からの操作では上記位しか出来ないようです。 特定行の色彩を変えたり、フォントスタイルを孤立させたい場合、オーナードローを処理するしかなさそうです。 結論はリストボックスでも可能なはずです。 WM_MEASUREITEM並びにWM_DRAWITEMのメッセージ処理を検索・検討して見てください。
お礼
ありがとうございます。 質問をした後も調査を続け、 オーナードローで描画をするところまではできました。 背景色の変更、 テキスト色の変更はできたのですが Bold 表示の設定の仕方が分かりません。 もしお分かりでしたら教えてください。 宜しくお願いします。
お礼
ありがとうございました! 参考にさせていただき、 希望の動作が可能となりました!