重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

この前の http://oshiete.goo.ne.jp/qa/6734007.html の続きです。

(ちょっとだけ↑の訂正します。 XPにEXEを持っていった所、低スペックが関係しているのか、
色の反転の部分が不安定でした。僕が追加したほうの条件を残し、その直後のElse
の条件内は削除してください。)

それはおいておいて、(本題)度々、質問すみません。

リストコントール特定行のフォント情報取得の方法が分かりません。

http://www.g-ishihara.com/mfc_dc_02.htm の部分の this の代わりに入れるものが分かりません。
CClientDC cdc(this); のところです。

ClientDC cdc(CFileListCreatorDlg::m_xcList.GetItem(workRow)); とでもしたいのですが。。。

フォント情報を取得したいタイミングは、リストを書き出すときです。行単位しか指定できなくてもかまいません。

GetCurrentFont()で取得できるとは、思いますが、オブジェクト名をどうやって指定するのかが分かりません。

MSDN http://msdn.microsoft.com/ja-jp/library/zdff988k … も見ましたが、良く分かりませんでした。何か調べ方にコツがあるのでしょうか。。。。


リストの変数名はm_xcListです。

どうすればいいか、教えてくださると うれしいです。

A 回答 (1件)

>GetCurrentFont()で取得できるとは、思いますが、オブジェクト名をどうやって指定するのかが分かりません。



CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CFONT *pFont = pDC->GetCurrentFont();

ではダメなんでしょうか?

この回答への補足

ご回答ありがとうございます。

 CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
 CFont *pFont = pDC->GetCurrentFont();

 //http://msdn.microsoft.com/ja-jp/library/zhcs623h …
 if (NULL != pFont)
 {
  LOGFONT lf;
  pFont->GetLogFont(&lf);
  //TRACE(_T("Typeface name of font = %s\n"), lf.lfFaceName);
  if(lf.lfWeight == FW_BOLD){
   MessageBox(_T("太文字です"));
  } 
 
 }

ご指摘のように確かに *pFontには、試してみると一個一個フォント情報が入っています。
しかし、一個セットする度に上書きされている(?)と思ってしまいます。

前回教えて頂いた方のおかげで、「lpDrawItemStruct」を手がかりに、
void CListCtrlOwner::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ) 【DrawItem関数内】で、
フォント情報を変えたり、LOGFONT(?)に書き出す事はできても、他のユーザー関数で
どう呼び出すかが、すごく疑問です。CFont *pFontを MylistCtrl.h Public で宣言してみましたが、
実行時エラーが起こります。(ダミーのフォントを入れる必要があるのでしょうか?)


どこで、フォント情報を格納し、どこで、取得するのか=GetCurrentFont()するのか、全く分かりません。すみません。(lpDrawItemStructが使えないので)

例えば、あるボタンを押した時に、リスト一行目 一列目のアイテムが FW_BOLDであるか(フォント情報)を得るには、どう書けばいいでしょう。。。定数以外は、適当なネーミングでかまいませんので、教えてください!

ただ、logというぐらいですから、バッファにフォント情報がストックされていると考えていいのですか?

↓後、これは、使えますでしょうか?

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

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

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

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

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

フォントハンドル の ハンドルという言葉がキーかと思いますが、
どうやって、指定するのかが、分かりません。

長々とすみませんm(_ _)m

補足日時:2011/05/21 16:15
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お教え頂いたことを、試行錯誤してましたが、
http://oshiete.goo.ne.jp/qa/6752231.html にて、解決しました。

質問の意図が伝わらず、ご迷惑をお掛けしましたm(_ _)m

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

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