by Tomorrow » 2006年1月16日(月) 15:35
> 現在、リッチエディットコントロールを使用したテキストエディタを作っているのですが、それをRTFファイル形式で保存する方法がわかりません。
> 色々と調べてみたのですが、どれもCなどの解説なので、コールバック関数など、ABではどうすればよいのかわかりません。
RTFは使ったこと無いですが、エディットストリームは使ったことがあるので書きなおしてみました。
テストしてませんけど...流れは以下のようになるでしょうか?
コード: 全て選択
Dim hFile As HANDLE 'ファイルハンドル
Dim es As EDITSTREAM 'ストリーム使用
'ファイルオープンしてファイルハンドルを取得
hFile=CreateFile(lpFileName, GENERIC_WRITE, 0, ByVal 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
'ファイルハンドルとコールバック関数アドレスを渡す
es.dwCookie=hFile As DWordPtr
es.pfnCallback=AddressOf(EditStreamOutCallback)
'ファイルにRichEditの内容をRTFで書き込む
SendMessage(hEdit, EM_STREAMOUT, SF_RTF, VarPtr(es) As LPARAM)
'ファイルハンドルを閉じる
CloseHandle(hFile)
'エディットストリームコールバック
Function EditStreamOutCallback(dwCookie As DWordPtr, pbBuff As BytePtr, cb As Long, pcb As *Long) As DWord
'ファイルへ書き込む
If WriteFile(dwCookie As HANDLE, pbBuff, cb, pcb As DWordPtr, ByVal NULL)=FALSE Then
EditStreamOutCallback = TRUE
Else
EditStreamOutCallback = FALSE
End If
End Function
詳しくは、
http://www.kumei.ne.jp/c_lang/sdk2/sdk_133.htm
http://msdn.microsoft.com/library/defau ... frame=true
http://yokohama.cool.ne.jp/chokuto/uraw ... ertf1.html
などを自分で調べてください。
[quote]> 現在、リッチエディットコントロールを使用したテキストエディタを作っているのですが、それをRTFファイル形式で保存する方法がわかりません。
> 色々と調べてみたのですが、どれもCなどの解説なので、コールバック関数など、ABではどうすればよいのかわかりません。[/quote]
RTFは使ったこと無いですが、エディットストリームは使ったことがあるので書きなおしてみました。
テストしてませんけど...流れは以下のようになるでしょうか?
[code] Dim hFile As HANDLE 'ファイルハンドル
Dim es As EDITSTREAM 'ストリーム使用
'ファイルオープンしてファイルハンドルを取得
hFile=CreateFile(lpFileName, GENERIC_WRITE, 0, ByVal 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
'ファイルハンドルとコールバック関数アドレスを渡す
es.dwCookie=hFile As DWordPtr
es.pfnCallback=AddressOf(EditStreamOutCallback)
'ファイルにRichEditの内容をRTFで書き込む
SendMessage(hEdit, EM_STREAMOUT, SF_RTF, VarPtr(es) As LPARAM)
'ファイルハンドルを閉じる
CloseHandle(hFile)
'エディットストリームコールバック
Function EditStreamOutCallback(dwCookie As DWordPtr, pbBuff As BytePtr, cb As Long, pcb As *Long) As DWord
'ファイルへ書き込む
If WriteFile(dwCookie As HANDLE, pbBuff, cb, pcb As DWordPtr, ByVal NULL)=FALSE Then
EditStreamOutCallback = TRUE
Else
EditStreamOutCallback = FALSE
End If
End Function[/code]
詳しくは、
http://www.kumei.ne.jp/c_lang/sdk2/sdk_133.htm
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols.asp?frame=true
http://yokohama.cool.ne.jp/chokuto/urawaza/savertf1.html
などを自分で調べてください。