ページ 11

リッチエディットで書式情報が取得できない

Posted: 2006年10月06日(金) 21:02
by C1000
リッチエディットで、選択されているところの書式情報を取得しようとしているのですが、取得できません。(デバッグで、メンバ変数に何も入らない)どこが原因なのでしょうか。
WinXp Homeでriched20.dllを使用しています。

コード: 全て選択

Dim cfm2 As CHARFORMAT
SendMessage(hEdit,EM_GETCHARFORMAT,SCF_DEFAULT,VarPtr(cfm2))
hEditにはリッチエディットコントロールの、ハンドルが入っています。

Re: リッチエディットで書式情報が取得できない

Posted: 2006年10月06日(金) 21:09
by 7
> リッチエディットで、選択されているところの書式情報を取得しようとしているのですが、取得できません。(デバッグで、メンバ変数に何も入らない)どこが原因なのでしょうか。
恐らくwParamSCF_SELECTIONを指定すると改善されると思います。

EM_GETCHARFORMAT

Posted: 2006年10月06日(金) 21:43
by C1000
すいません。そこは間違いです。SCF_SELECTIONを指定していました。
正しいのコードを実行しても取得できないので、ほかのところに原因があると思うのですが...

Posted: 2006年10月06日(金) 22:29
by 7
> すいません。そこは間違いです。SCF_SELECTIONを指定していました。
> 正しいのコードを実行しても取得できないので、ほかのところに原因があると思うのですが...
では、EM_GETCHARFORMATを飛ばす前に、CHARFORMAT構造体のcbSizeに構造体のサイズを指定してみてはどうでしょう?

Posted: 2006年10月07日(土) 08:03
by C1000
うまくい書式情報を取得できました。7さん、ありがとうございます。

Posted: 2006年10月07日(土) 09:27
by C1000
もうひとつわからないことが出たので、質問します。
フォント選択ダイアログを表示するのに、次のようにdwMaskメンバを参照し、値を設定しているのですが、イタリック体、下線、打ち消し線、のメンバが、常に1になります。どこが原因なのでしょうか。(前の質問のコードの続きに書いています。)

コード: 全て選択


Dim lfd As LOGFONT 'フォント情報
With lfd 'フォント情報の設定
If cfm2.dwMask and CFE_BOLD Then
	cfm2.yHeight=1400
End If	
If cfm2.dwMask and CFE_ITALIC Then
	.lfItalic=1
End If
If cfm2.dwMask and CFE_UNDERLINE Then
	.lfUnderline=1
End If	
If cfm2.dwMask and CFE_STRIKEOUT Then
	.lfStrikeOut=1
End If
End With

Posted: 2006年10月07日(土) 19:27
by 7
> フォント選択ダイアログを表示するのに、次のようにdwMaskメンバを参照し、値を設定しているのですが、イタリック体、下線、打ち消し線、のメンバが、常に1になります。どこが原因なのでしょうか。
常に1になるっていうのは、書式がイタリック体じゃなくても1になるっていうことでしょうか?

CHARFORMAT構造体を見てみたんですけど、文字のスタイルを判定するのはdwMaskメンバを調べるよりdwEffectsを調べた方がいいような気がしました。 試してないのでダメかもしれません...。

Posted: 2006年10月07日(土) 19:53
by C1000
うまく出来ました。7さんありがとうございました。