リストボックスの文字列を等幅フォントに変えたい。 – プログラミング – Home

リストボックスの文字列を等幅フォントに...
 
通知
すべてクリア

[解決済] リストボックスの文字列を等幅フォントに変えたい。


さち
 さち
(@さち)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

たびたびお世話になっています。
特定のコントロールのフォントスタイルを変更する方法を教えてください。

1.ダイアログ上のリストボックスのフォントを等幅フォントにしたい。
 →OSの言語に依存させたくないので、システムフォントに一番近い等幅フォントにしたい。
  (フォント名称は指定したくない)

2. 特定のスタティックコントロール(ラベル)だけ、BOLDにしたい。
   フォント名称やその他設定は全てシステムに依存させたいので、
   日本語OSだとMSPゴシック 9ポイント でBOLDに。
   英語OSならMS Scan SerifのBOLD体したい。


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

使っているのはMFCですか? SDK?

MFCで話してしまいますけれど、
基本的にコントロールもウインドウです。
したがって、CWndクラスのメソッドを使用すれば可能です。
ここは、大事なポイントです。
おさえて置いてください。

SetFontというメソッドが見つかるはずです。
このメソッドでフォントの変更が出来ます。

CFontクラスのインスタンスをダイアログのメンバー変数に追加します。
必要なフォントの種類に応じて個数を調整してください。

CFontクラスをSetFontに渡せば、渡したフォントに変更できます。

後はご自分で調べてください。


返信引用
さち
 さち
(@さち)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

CFontオブジェクトに対して、
CreateFont()すればよいのですか?
この時、引数を指定しますが、BOLDにする以外は全てシステムのフォントにしたいのですが、
どうしたらよいのでしょう。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

システムフォントやデフォルト固定幅フォントを得るには、
GetStockObject()を使用します。

フォント属性の一部を変えたフォントを作るには、
GetObject()で基準とするフォントのLOGFONTを取得し、
変更したい属性だけを修正して、CreateFontIndirect()で
新しいフォントを作成します。


返信引用
さち
 さち
(@さち)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

何度も申し訳ありません。
MFCを使ってコーディングしているのですが、GetStockObject()やGetObject()の使い方がわ
かりません。

::OnInitUpdate()内で行うのですか?


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

GetStockObjectやGetObjectのHELPはよく読まれましたか?
これらの関数はMFCではなくてWin32APIと呼ばれる関数です。
これらの呼び出しは、呼び出しに必要な情報が揃っていれば、
基本的に何処でも出来ます。
これから得られる情報を使ってCreateFontIndirectを呼びたいわけですから、
これを呼ぶ前に呼んでおく必要があるでしょう。
私が進めるのは、ダイアログクラスから派生したクラスのコンストラクタで
処理してしまうという方法です。
ここでフォントを全て作成しておきます。

ところでOnInitUpdateという話が出ていますが、CDialogからの派生でなくて
CFormViewからの派生でやっているのですか?
こういうことは答えに影響するのできちんと提示しましょう。

出来れば、追加発言欄のところにある使用上の注意をよく読んでください。
提示すべき情報について書いてあります。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

MFCであるならば、
CGdiObject::CreateStockObject();
CFont::GetLogFont();
CFont::CreateFontIndirect();
を使用した方がいいですね。

> ::OnInitUpdate()内で行うのですか?

この記述は、OnInitUpdate()というグローバル関数
という意味になりますけど、
CView::OnInitialUpdate()のことでしょうか?

フォントを設定する前ならば、
どこでも好きな場所でフォントを作ることができます。


返信引用
さち
 さち
(@さち)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

解答ありがとうございました。
今までVBのみで開発していた為、VC++に関しては本当に初心者で、MSDNのヘルプ
を読んでもよくわからない事が多々ありましたが、なんとかいけました。
下記のコードでいけました。

CFont* pFont; //現在のフォント
LOGFONT lf;
pFont = GetDlgItem(IDC_TITLE_1)->GetFont();
pFont->GetLogFont(&lf);
lf.lfWeight = FW_BOLD;
     //m_fntBoldはメンバ変数。
m_fntBold.DeleteObject(); // 一旦削除する
m_fntBold.CreateFontIndirect(&lf);
GetDlgItem(IDC_TITLE_1)->SetFont(&m_fntBold);


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました