LOGFONT構造体を取得してファイス名を調べる

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: LOGFONT構造体を取得してファイス名を調べる

Re: LOGFONT構造体を取得してファイス名を調べる

by 7 » 2007年2月08日(木) 19:04

> おっしゃる通り、フォントといっても取得設定には幾つかの方法があると思います。
フォントを取得・設定する方法が幾つかあるといった感じではなく、フォントが幾つかあるので取得・設定もそれらに合わせて幾つか用意されていると言った感じじゃないかと僕は思います。

> 私の最終目標はDraw系のプログラムです。
> コントロールの設定はコントロール自体の設定変更(表現がおかしい?)
> SetWindowText等で、描画部分はDC(xxxDrawxxx)でと考えています。
> DCの方が様々な設定ができる(特にプリンター?)と思っていますのでインターフェース
> (コントロール)にはSetWindowText程度?で良いと思っています
> 何か良い方法がありましたなら教えていただけないでしょうか?
すみません、意図をうまく飲み込めないんですけど...。

最初の質問のコードを見るとコントロールのデバイスコンテキストに設定されているフォントの情報を取得しているので、それを動くようにしてみても「別のコードでフォントを変更してもそのファイス名が取得でき」ないと仰るだけでその「別のコード」がどういったものなのか提示されていないのでよく分かりませんし、「ただ、他CODEでフォント更新をするとイグトランス (egtra) さんのCODEでは再度の呼び出しではフォント更新の結果が反映でき」ないとも仰いますが、やっぱりその「他CODE」が提示されていません。

明確な質問をしてくれれば明確な答えが返せるのですけど、曖昧な質問でちょっと...。

コントロールのフォントとデバイスコンテキストのフォントは別だってことを主張したかったんですけど、分かります? 自分がうまく説明できればいいのですけど、うまく説明できなくて...。

LOGFONT構造体を取得してファイス名を調べる

by ムーミン » 2007年2月08日(木) 15:30

7 さん ヘ
おっしゃる通り、フォントといっても取得設定には幾つかの方法があると思います。
私の最終目標はDraw系のプログラムです。
コントロールの設定はコントロール自体の設定変更(表現がおかしい?)
SetWindowText等で、描画部分はDC(xxxDrawxxx)でと考えています。
DCの方が様々な設定ができる(特にプリンター?)と思っていますのでインターフェース
(コントロール)にはSetWindowText程度?で良いと思っています
※設定方法を検索していたら最初にでてきたのがSetWindowTextでした....(^^);

何か良い方法がありましたなら教えていただけないでしょうか?

Re: LOGFONT構造体を取得してファイス名を調べる

by 7 » 2007年2月07日(水) 18:11

> ただ、他CODEでフォント更新をするとイグトランス (egtra) さんのCODEでは再度
> の呼び出しではフォント更新の結果が反映できませんでした。
> おそらくコントロール用にFONTに関するハンドル,LOGFONT構造体等をグローバル変数にして呼び出すのが確実なのかと考えています。
おそらくコントロール自体(?)のフォントとデバイスコンテキストのフォントをごっちゃにして考えているんじゃないでしょうか?

SetWindowText()関数などで描写する文字列のフォントはコントロールのフォントに依存していて、DrawText()関数などで描写する文字列はコントロールのデバイスコンテキストのフォントに依存しています。

まずムーミンさんが、SetWindowText()関数で描写する文字列のフォントを操作したいのか、DrawText()関数で描写する文字列のフォントを操作したいのか、そこがはっきりするとなんの問題もなくスッキリ解決できると思うのですけど、どうでしょう?

LOGFONT構造体を取得してファイス名を調べる

by ムーミン » 2007年2月07日(水) 17:21

イグトランス (egtra) さん ありがとうございます。

早速試してみるとファイス名が取得している事が確認できました。
おそらくLOGFONT自体が正常に取得できていると思います。

ただ、他CODEでフォント更新をするとイグトランス (egtra) さんのCODEでは再度
の呼び出しではフォント更新の結果が反映できませんでした。
おそらくコントロール用にFONTに関するハンドル,LOGFONT構造体等をグローバル変数にして呼び出すのが確実なのかと考えています。
教えていただいたCODEを参考に作ってみます。CODEができたら投稿します。
次はTEXTBOX(STATICTEXT)等の文字色、背景の変更を考えて行きます。

7 さん、 イグトランス (egtra) さん ありがとうございました。

by イグトランス » 2007年2月07日(水) 17:01

7さん さんが書きました:スタティックコントロールのデバイスコンテキストに設定されているフォントフェイスネームを取得するのであって、スタティックコントロールのそれを取得するのではないことに気を付けてください。
というわけで、WM_GETFONTはどうでしょうか。これはコントロールが現在使用しているフォントのハンドルを問い合わせるメッセージです。

コード: 全て選択

'Staticのフォントのハンドルを取得
Dim Static_handle As HFONT
Static_handle = SendDlgItemMessage(hMainWnd, Static1, WM_GETFONT, 0, 0) As HFONT

'LOGFONT構造体を取得
Dim uValue1 As Long 
Dim Static_font As LOGFONT 
uValue1 = GetObject(Static_handle, Len(Static_font), Static_font)
If uValue1 <> 0 Then
    '取得したファイス名を確認 
    SetWindowText(Static_hwnd, Static_font.lfFaceName)
End If

LOGFONT構造体を取得してファイス名を調べる

by ムーミン » 2007年2月07日(水) 08:56

7 さん ご指導ありがとうございます。
ファイス名と思える文字列は取得しているのですが
別のコードでフォントを変更してもそのファイス名が取得できません。
RADツールで初期段階からフォントを変更してもその結果が変わらず
[System]としかファイス名がかえってきません。
LOGFONTの内容を調べると初期値の情報に思えます。
AB(API)では正確に取得でないのでしょうか?

又、不都合があるならGetTextFaceを用いた方がベターなのでしょうか?
Declare Function GetTextFace Lib "gdi32" Alias "GetTextFaceA" (
ByVal hDC As HDC,
ByVal nCount As Long,
ByVal lpFacename As *Char)As Long

ムーミンは私が小さい頃のニックネームでした。
7サンのおっしゃる通り、かわいい顔した冷血タイプの面があったかもしれませんね。
アッハハ!!!

Re: LOGFONT構造体を取得してファイス名を調べる

by 7 » 2007年2月06日(火) 19:11

おそらくこれで出来てます。 スタティックコントロールのデバイスコンテキストに設定されているフォントフェイスネームを取得するのであって、スタティックコントロールのそれを取得するのではないことに気を付けてください。

本題とは関係ないのですけど、日本語訳された作品ですがたしかムーミンは全作読んだような気がします。
「こんなやつ蹴り殺しちゃおうぜ!」みたいなムーミンの台詞に「アニメと印象違う...」と思った記憶があります...(笑)

LOGFONT構造体を取得してファイス名を調べる

by ムーミン » 2007年2月06日(火) 17:42

初めての投稿です。
ActiveBasicの勉強を初めてまだ2週間の初心者です。

StaticText等のフォントを調べるのにLOGFONT構造体を取得し、
ファイス名を表示したいのですがうまくいきません。
どなたか教えていただけないのでしょうか?
勉強中ですのでその都度復帰値を調べながらやっています。

'Staticのハンドル取得
dim Static_hwnd as HWND
Static_hwnd=GetDlgItem(hMainWnd,Static1)

'Staticのデバイスコンテキスト取得
dim Static_hdc as HDC
Static_hdc=GetDC(Static_hwnd)

'Staticのフォントのハンドルを取得
dim Static_handle as HANDLE
Static_handle=GetCurrentObject(Static_hdc,OBJ_FONT)

'LOGFONT構造体のバッファを取得
dim Buffer_Need as Long
Buffer_Need=GetObject(Static_handle,0,byval NULL)

'LOGFONT構造体を取得
dim uValue1 as Long
dim Static_font as LOGFONT
uValue1=GetObject(Static_handle,Buffer_Need,Static_font)

'ファイス名を取得
dim Static_FaceName as string
Static_FaceName=MakeStr(VarPtr(Static_font.lfFaceName(0)))

'取得したファイス名を確認
dim uValue2 as Long
uValue2=SetWindowText(Static_hwnd,Static_FaceName)

ページトップ