by 7 » 2006年5月06日(土) 23:19
> MainWndのEditBox1のフォント色をカラーダイアログで指定できるように
> する機能がほしいのですが、わたしは初心者のため解説とソースを教えていただけませんか。初心者のくせにすみません。
「カラーダイアログ」とか「エディットボックスのフォント色」って検索しましたか?
検索すると分かりますけど、検索するだけで答えが分かることも多々ありますよ。
それでは。
まず、カラー選択ダイアログを表示するにはChooseColor()関数を使います。
グローバル領域(モジュールレベル)でDWord型変数 rgb を宣言しておいてください。
カラー選択ダイアログの手抜きサンプル [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Dim chc As *CHOOSECOLOR ' ダイアログ情報を管理する
Dim buf[16] As DWord ' ユーザーが作った色を残しておきたいならグローバルにする
' カラー選択ダイアログの表示に必要な情報をセット
chc=calloc(SizeOf(CHOOSECOLOR))
chc->lStructSize=SizeOf(CHOOSECOLOR)
chc->hwndOwner=hMainWnd
chc->lpCustColors=VarPtr(buf)
chc->rgbResult=rgb
' カラー選択ダイアログの表示
If ChooseColor(ByVal chc) Then
' ユーザーが色を指定したなら rgb に代入
rgb=chc->rgbResult
End If
free(chc)
次はエディットボックスの文字色を変更します。
ウィンドウメッセージを監視して、WM_CTLCOLOREDITが送られたことが分かればエディットボックスの文字色を変更できます。
これはコールバック関数を改造するだけで済みます。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
Select Case dwMsg
Case WM_CTLCOLOREDIT
If lParam=GetDlgItem(hMainWnd,EditBox1) Then
' カラー選択ダイアログで取得した色を文字色にする
SetTextColor(wParam As HDC,rgb)
Exit Function
End If
End Select
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
カラー選択ダイアログで色を取得した直後も文字色を変更しようとして、デバイスコンテキストのハンドルとエディットボックスのハンドルを指定したWM_CTLCOLOREDITを送信したんですけど、変わりませんね...。
あとWM_CTLCOLOREDITの処理が終わった後、何も返さずに関数を抜けてるので何か問題があるかもしれません。何も問題ないかもしれません。
ここら辺は宿題でしょうか。
> MainWndのEditBox1のフォント色をカラーダイアログで指定できるように
> する機能がほしいのですが、わたしは初心者のため解説とソースを教えていただけませんか。初心者のくせにすみません。
「カラーダイアログ」とか「エディットボックスのフォント色」って検索しましたか?
検索すると分かりますけど、検索するだけで答えが分かることも多々ありますよ。
それでは。
まず、カラー選択ダイアログを表示するにはChooseColor()関数を使います。
グローバル領域(モジュールレベル)でDWord型変数 rgb を宣言しておいてください。
[hide=カラー選択ダイアログの手抜きサンプル][code]Dim chc As *CHOOSECOLOR ' ダイアログ情報を管理する
Dim buf[16] As DWord ' ユーザーが作った色を残しておきたいならグローバルにする
' カラー選択ダイアログの表示に必要な情報をセット
chc=calloc(SizeOf(CHOOSECOLOR))
chc->lStructSize=SizeOf(CHOOSECOLOR)
chc->hwndOwner=hMainWnd
chc->lpCustColors=VarPtr(buf)
chc->rgbResult=rgb
' カラー選択ダイアログの表示
If ChooseColor(ByVal chc) Then
' ユーザーが色を指定したなら rgb に代入
rgb=chc->rgbResult
End If
free(chc)[/code][/hide]
次はエディットボックスの文字色を変更します。
ウィンドウメッセージを監視して、WM_CTLCOLOREDITが送られたことが分かればエディットボックスの文字色を変更できます。
これはコールバック関数を改造するだけで済みます。
[hide][code]Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
Select Case dwMsg
Case WM_CTLCOLOREDIT
If lParam=GetDlgItem(hMainWnd,EditBox1) Then
' カラー選択ダイアログで取得した色を文字色にする
SetTextColor(wParam As HDC,rgb)
Exit Function
End If
End Select
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function[/code][/hide]
カラー選択ダイアログで色を取得した直後も文字色を変更しようとして、デバイスコンテキストのハンドルとエディットボックスのハンドルを指定したWM_CTLCOLOREDITを送信したんですけど、変わりませんね...。
あとWM_CTLCOLOREDITの処理が終わった後、何も返さずに関数を抜けてるので何か問題があるかもしれません。何も問題ないかもしれません。
ここら辺は宿題でしょうか。