フォントダイアログ
たとえばこんな感じのメニューハンドラを作ります。
(ここではウィンドウハンドル:hMainWnd,メニューID:IDM_FONTとしています)
メニューハンドラを作るまではWin32プログラミング講座のステップ6~7の辺りを参考にしてみてください。
フォントダイアログを呼び出しているのがChooseFont関数です。
こいつがFALSE以外を返したときはユーザーがフォントを選んでくれたと言うことです。
そのとき,cf.lpLogFontの先(今回はlf)には選ばれたフォントの情報が入っています。
この例ではとりあえずすぐにフォントを作成(CreateFontIndirect)しています。
ここでは特に用もないのですぐに削除(DeleteObject)していますけど。
しかしいつもそうするわけではなく,フォントをどう使うかによってフォントを作る時,消す時は変わります。
この例のようにすぐに作って消すのではないことのほうが多いです。
何に,そしてどのようにフォントを使うかがわからないと
いつ作っていつ消せばよいというアドバイスはできないです。
(ここではウィンドウハンドル:hMainWnd,メニューID:IDM_FONTとしています)
メニューハンドラを作るまではWin32プログラミング講座のステップ6~7の辺りを参考にしてみてください。
コード: 全て選択
Sub MainWnd_IDM_FONT_MenuClick()
Dim cf As CHOOSEFONT
Dim lf As LOGFONT
With cf
.lStructSize = Len(cf)
.hwndOwner = hMainWnd
.lpLogFont = VarPtr(lf)
.Flags = CF_SCREENFONTS Or CF_NOVERTFONTS
End With
If ChooseFont(cf) <> FALSE Then
Dim hfnt As HFONT
hfnt = CreateFontIndirect(lf)
DeleteObject(hfnt)
End If
End Sub
こいつがFALSE以外を返したときはユーザーがフォントを選んでくれたと言うことです。
そのとき,cf.lpLogFontの先(今回はlf)には選ばれたフォントの情報が入っています。
この例ではとりあえずすぐにフォントを作成(CreateFontIndirect)しています。
ここでは特に用もないのですぐに削除(DeleteObject)していますけど。
しかしいつもそうするわけではなく,フォントをどう使うかによってフォントを作る時,消す時は変わります。
この例のようにすぐに作って消すのではないことのほうが多いです。
何に,そしてどのようにフォントを使うかがわからないと
いつ作っていつ消せばよいというアドバイスはできないです。
イグトランスさんありがとうございました。
ありがとうございました。
イグトランスさんのおかげで、問題が解決しました。
これからいろいろお世話になります。
私は、多田 篤志といいます。
早速ですが、申し訳ありません。
印刷するためのダイアログを表示するソースもご存知でしたらおしえていただけませんか。
イグトランスさんのおかげで、問題が解決しました。
これからいろいろお世話になります。
私は、多田 篤志といいます。
早速ですが、申し訳ありません。
印刷するためのダイアログを表示するソースもご存知でしたらおしえていただけませんか。
ところで、イグトランスさんがログオフした状態から書き込みするのをよく見るんですけど・・・毎回クッキー消してるんですか?>>イグトランスさん
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
Re: フォントのことで。
コントロールのフォントを変更するには,WM_SETFONTメッセージを使います。(ABのヘルプに記載はなし。)ダイアログの設定をそのままエディットボックスに反映するソースを教えていただけませんか。
MSDNの記述(英語)
ちょくとさんのページより
サンプルを作ってみましたのでどうぞ。
http://www.sinryow.net/hitori/Font.lzh
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
#Win32プログラミング講座の「テキストエディッタを作る」では上書き保存と名前をつけて保存がないですね。
まず上書き保存といっても新規作成した後,また名前をつけて保存を行っていない場合は名前をつけて保存のダイアログが出てくるのが一般的です。
そうでない場合,当たり前ですが上書き保存では現在開いているファイル名で保存します。
この挙動を実現するにはファイルを開いたときにファイル名をグローバル変数に取っておけばよいでしょう。
その変数の中身が空なら名前をつけて保存と言うことにします。
また実際にファイルを保存する処理は名前をつけて保存と同じですから1つの関数にします。
上書き保存のメニューIDをIDM_SAVEに,名前をつけて保存はIDM_SAVEASとします。
また保存の処理の中ではエディットボックスにEM_SETMODIFYを送っていますが,
これは保存したことをエディットボックスに伝えるためです。
試しにコメントアウトして試してみると違いが出るのではないでしょうか?
ファイルを開くときにはFileNameへファイル名を入れて置いてください。
まず上書き保存といっても新規作成した後,また名前をつけて保存を行っていない場合は名前をつけて保存のダイアログが出てくるのが一般的です。
そうでない場合,当たり前ですが上書き保存では現在開いているファイル名で保存します。
この挙動を実現するにはファイルを開いたときにファイル名をグローバル変数に取っておけばよいでしょう。
その変数の中身が空なら名前をつけて保存と言うことにします。
また実際にファイルを保存する処理は名前をつけて保存と同じですから1つの関数にします。
上書き保存のメニューIDをIDM_SAVEに,名前をつけて保存はIDM_SAVEASとします。
また保存の処理の中ではエディットボックスにEM_SETMODIFYを送っていますが,
これは保存したことをエディットボックスに伝えるためです。
試しにコメントアウトして試してみると違いが出るのではないでしょうか?
コード: 全て選択
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim FileName As String
コード: 全て選択
Sub MainWnd_IDM_SAVE_MenuClick()
If Len(FileName) = 0 Then
MainWnd_IDM_SAVEAS_MenuClick() '名前をつけて保存
Else
FileSave(StrPtr(FiliName))
EndIf
End Sub
Sub FileSave(pFileName As *Byte)
Dim hFile As HANDLE
hFile = CreateFile(pFileName, GENERIC_WRITE, 0,
ByVal 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
If hFile = INVALID_HANDLE_VALUE Then
MessageBox(hMainWnd,"ファイルオープンに失敗しました。", "TextEditor", MB_OK or MB_ICONEXCLAMATION)
Exit Sub
End If
Dim Text As String
Dim Length As Long
Length = GetDlgItemTextStr(hMainWnd, EditBox1, Text)
Dim WrittenBytes As DWord
WriteFile(hFile, StrPtr(Text), Length, VarPtr(WrittenBytes), ByVal 0)
CloseHandle(hFile)
SendDlgItemMessage(hMainWnd, EditBox1, EM_SETMODIFY, FALSE, 0)
End Sub