フォント

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
ぶりっち

フォント

#1 投稿記事 by ぶりっち »

メニューからフォントダイアログを表示させその設定をエディットボックス1
に出力するソースを教えてください。


易しく、丁寧に、教えてくれるかた、大歓迎。
みどるべあ
記事: 25
登録日時: 2005年11月13日(日) 15:25
連絡する:

#2 投稿記事 by みどるべあ »

ヒント:SendMessage( hWnd ,WM_SETFONT, hFont ,0)
hWnd:エディットボックスのハンドル
hFont:フォントのハンドル

少しは考えてみましょう。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 by イグトランス »

 こちらの続きですよね。新たにトピックを作る必要はなかったと思います。

 みどるべあさんの書いたとおり,エディットボックスへWM_SETFONTを送る(SendMessage)のです。
ただ,今回は親のウィンドウハンドル(hMainWnd)と子のID(EditBox1など)がわかっているはずなのでSendDlgItemMessageのほうが便利でしょう。
WM_SETFONTを送るタイミングは前回のコードでCreateFontIndirectを行った直後が適切です。

 また,フォントハンドルはエディットコントロールが使うので,前回のようにすぐに削除するわけにはいきません。
削除するのはエディットコントロールがフォントを使い終わった後にする必要があります。
具体的には,エディットコントロールがなくなったときと別のフォントが指定されたときになるでしょう。

 コントロールが削除されると言うのは通常親が削除されるときだと思えばよいです。
つまりMainWndのDestroyイベントが打ってつけです。
別のフォントが指定されたときと言うのはもちろんMainWnd_IDM_FONT_MenuClick(2度目以降)ですね。

 となるとMainWnd_IDM_FONT_MenuClickを越えてフォントハンドルを持ち続けなければなりません。
それには今のところグローバル変数にするのがABでは一般的です。次の例ではhfntEditという名前にしています。
0で初期化していますが,0なら有効なフォントハンドルではないとしてDeleteFontしないよう弾いています。
(MainWnd_CommandButton1_Clickが最初に呼ばれたときや,1回も呼ばれずにMainWndが終了したときなど)

 ここまでの話をコードにするとこうなります。

コード: 全て選択

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim hfntEdit = 0 As HFONT

/* 中略 */

Sub MainWnd_Destroy()
	プロジェクト名_DestroyObjects()
	If hfntEdit <> 0 Then
		DeleteObject(hfntEdit)
	End If
	PostQuitMessage(0)
End Sub

Sub MainWnd_CommandButton1_Click()
	' ここは前回と同じなので省略
	If ChooseFont(cf) <> FALSE Then
		Dim hfnt As HFONT
		hfnt = CreateFontIndirect(lf)
		SendDlgItemMessage(hMainWnd, EditBox1, WM_SETFONT, hfnt As WPARAM, TRUE)
		If hfntEdit <> 0 Then
			DeleteObject(hfntEdit)
		End If
		hfntEdit = hfnt
	End If
End Sub
返信する