dポイントプレゼントキャンペーン実施中!

再投稿ですみません。
CListCtrl クラス //m_xcList はCListCtrl型のDDX変数
リストコントロールの一部のフォント情報を取得したいです。

void CMylistCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){~~~}

DrawItem(↑)の中で、描画すると同時に、太文字・赤色情報を、
リストコンロールの各行の最後のカラムを退避用フィールド(セル)として使用し、
文字で「BOLD」「RED」「BOLD,RED」「」のように入れれば、何とか作れそうです。
全然スマートじゃないですよね。

この方法であれば、任意のタイミングでフォント情報を取ることはできそうですが…

またはDrawItemを実行させるために、ダミーの行を1行挿入、その後削除して、
エクスポートする事も考えています。
(データに変更があった場合、必ず呼び出されるから、無意味かもしれないですけど)


処理速度は遅くなると思いますし、僕には、これしかできませんが、
もっと、方法があるはずですよね…

それかlParamを割り振って、何とかするほうがいいですかね。


投稿してからずっと
「リストコントロールのフォント情報取得 VC++ MFC -VB -.Net "LogFont"」
「FW_BOLD FONT VC++ LOGFONT取得」「CFont::CreatePointFont」などで、
検索したのですが、キーワードさえつかめずに、困りました(/_;)


教えてGOOで参考になりそうなのが、3つ↓

■リストの行ごとの設定変更について
http://oshiete.goo.ne.jp/qa/4165655.html

■リストコントロール内の文字の大きさ(ポイント数を)別々にしたい。
http://oshiete.goo.ne.jp/qa/5746038.html

■リストボックスのフォントをサイズを変更したい
http://qanda.rakuten.ne.jp/qa4479812.html?order= …


   せめてキーワードかヒントだけでも…助けて下さい!

A 回答 (1件)

> 再投稿ですみません。



別にいいけど、これだけじゃ前回の質問がどんな内容だったのかわかりません。
前回の質問のリンクを書いておくとかしましょう。

DrawItemをオーバーライドして、アイテムを自分で描画している場合の話ですよね。
フォント情報が必要なのではなくて、各行がどんなフォント・色で描画されているかが知りたいんじゃないですか? そうであけば、DrawItemの中で

・どんなときに太字で描画しているのか
・どんなときに赤色で描画しているのか

が分かれば、DrawItem以外の場所で情報を取得する方法があるでしょう。
どうしてもDrawItem内でないと判断できないのであれば、CListCtrl::SetItemDataでデータを設定すれば、他の処理内でもCListCtrl::GetItemDataでそのデータを取り出せるので、判断できるでしょう。
    • good
    • 0
この回答へのお礼

できました!!返信が遅くなってすみません。
さらに質問の仕方が分からなくてごめんなさいでした。


【前回の質問】リストコントロール特定行のフォント情報取得VC++
http://oshiete.goo.ne.jp/qa/6747822.html

【解決済みの質問】リストコンロールの一行だけを太文字に(VC++)
http://oshiete.goo.ne.jp/qa/6734007.html

■今回、お教え頂いた部分

//CListCtrl::SetItemData(MSDN)↓
//http://msdn.microsoft.com/ja-jp/library/936147y4 …

 if( GetItem(&lvItem) == TRUE ){
  if( nCnt == 0){ //アイテムの場合
   SetItemData(nItem, lf.lfWeight);
  }
 }

これだけで済むとは…、短すぎてソースを載せるのが恥ずかしくなります。

SetItemDataの第二引数は数値ですから、太文字と赤文字を判定するのも、自分で
 1:通常のフォント
 2:太い文字
 3:赤い文字
 4:太くて赤い文字
とでも、意味づけし、GetItemDataでも、それぞれに処理を分けてやればいいのですね。

定数を足すというのもありかもしれませんね(!?)

 if( GetItem(&lvItem) == TRUE ){
  if( nCnt == 0){ //アイテムの場合
   SetItemData(nItem, lf.lfWeight + pDC->GetTextColor());
  }
 }

テストボタン内で、試しに、
if(m_xcList.GetItemData(○行目)== (FW_BOLD + RGB(255,255,255))){
MessageBox(_T("白い太文字です"));
}

としても出来ました。

 【参考元】http://dejibouzu.com/page/2/
  相変わらず、参考にした大元のソース(↑)です。

じきに締め切らせていただきます。

本当にありがとうございましたm(_ _)m

お礼日時:2011/05/22 05:00

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