エディットボックスのフォントを変更できるようにしたいと思っています。
どのようにしたらいいでしょうか?
hWndEdit1 = CreateWindow("EDIT",
"",
WS_CHILD | WS_VISIBLE | WS_BORDER,
(sPos.left + sSize.cx + 7),
sPos.top,
200,
22,
hWnd,
(HMENU)EDIT1,
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
上記のような形でエディットボックスを生成しています。
「エディットボックス フォント」で検索したことはありますか?
検索したことはあります。
ですが、自分のソースの書き方から
どうしたらよいのかわかりませんでした。
MSDN: Edit Control Text Operations # Changing the Font Used by an Edit Control
http://msdn.microsoft.com/en-us/library/windows/desktop/bb775460.aspx#changing_fonts
> An application can change the font that an edit control uses by sending the WM_SETFONT message.
検索してちゃんと調べれば一次資料である上記に行き着くはず。
さて,何がわからないのでしょうか。
・フォントの作成方法がわからない
・メッセージをコントロールにSendする方法が分からない
・その他 (具体的に)
アプリケーション上で自由にフォントを変更できるようにするプログラムの書き方がわかりません。
> アプリケーション上で自由にフォントを変更できるようにするプログラムの書き方がわかりません。
・メニュー選択か何かをトリガにフォント選択ダイアログを表示させる
・フォント選択ダイアログでフォントが選択されて戻ってきたら,エディットコントロールにフォントを設定する
でやりたいことが実現できそうなので,そう書けば良いです。
# 大雑把な質問に対する回答は,大雑把にしかできませんよ。
大雑把な質問しかできなくてすみませんでした。
まず、フォント選択のダイアログを表示させるプログラムがどのように書けばいいのかがまずわかりません。
次にフォントが選択されて戻ってきた場合にエディットコントロールにフォントを設定する方法もよく理解できませんでした。
とりあえず、
自分で試してみたソースをあげてみて
それすらできないとなると掲示板では無理。
本を買って基礎を学ぶしかない
case WM_PAINT:
// クライアント領域を再描画する処理
hDC = BeginPaint(hWnd, &ps);
hFont = CreateFontIndirect(&lf);
SelectObject(hDC , hFont);
SetTextColor(hDC , cf.rgbColors);
SelectObject(hDC , GetStockObject(SYSTEM_FONT));
TextOut(hDC, sPos.left, sPos.top, skypeid, lstrlen(skypeid));
TextOut(hDC, timePos.left, timePos.top, time, lstrlen(time));
TextOut(hDC, themePos.left, themePos.top, theme, lstrlen(theme));
TextOut(hDC, nPos.left, nPos.top, now, lstrlen(now));
TextOut(hDC, wPos.left, wPos.top, wait, lstrlen(wait));
TextOut(hDC, hPos.left, hPos.top, history, lstrlen(history));
wsprintf(wBuff, "%d人", w);
TextOut(hDC, wPos.left + wSize.cx + 15, wPos.top, wBuff, lstrlen(wBuff));
DeleteObject(hFont);
EndPaint(hWnd, &ps);
return 0;
case WM_COMMAND:
// ボタンがクリックされた時の処理
if (LOWORD(wParam) == BTN1)
{
GetWindowText(hWndEdit4, sBuff, 999);
GetWindowText(hWndEdit5, hBuff, 999);
lstrcat(hBuff,sBuff);
lstrcat(hBuff, "、");
SetWindowText(hWndEdit5, hBuff);
SetWindowText(hWndEdit4, "");
if(w > 0)
{
w--;
}
}
if (LOWORD(wParam) == BTN2)
{
w++;
}
if (LOWORD(wParam) == BTN3)
{
if(w > 0)
{
w--;
}
}
if (LOWORD(wParam) == BTN4)
{
if (!ChooseFont(&cf)) return 0;
}
InvalidateRect(hWnd, NULL, TRUE);
return 0;
ボタンを押したらダイアログを出してフォントの選択を行い、そのフォントをエディットボックスに適応させたいのですが上手く反映されません。
対象は「エディットボックス」じゃなかったんですか?
掲示されたコードだと、クライアント領域に描画しているフォントを変更していることになりますけど。
フォントの指定が変更される契機と、実際の画面描画が走る契機、どっちの方が多いでしょうか?
描画がかかるたびに、フォント作って、使って、消してを繰り返すコードに無駄があるとは思えませんか?
各変数の寿命が不明です。
lfやw、cfがただのローカル変数なら、期待した動作はしないでしょう。
# コピペするときにカットしたのかもしれませんが…エラー処理はちゃんとやっているんですよね?
対象はエディットボックスのフォントです。
自分なりに調べてみてこの形になってしまいました。
エラーは処理しているのでありません。
まずはエディットボックスのフォントを設定することだけをしてみてはどうですか。
いろいろとやろうとして,したいことが完全に抜けているように思えます。
わかりました
そうしてみます。
真面目な話、フォントの廃棄ってどうやるんだろう。
hWndEdit1 = CreateWindow(...);
hFontEdit1 = CreateFont(
10,
0,
0,
0,
0,
FALSE,
FALSE,
FALSE,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
FF_DONTCARE,
TEXT("MS UI Gothic"));
SendMessage(hWndEdit1, (WPARAM)hFontEdit1, TRUE);
こうした場合、ダイアログの WM_DESTROY 辺りで、
SendMessage(hWndEdit1, NULL, FALSE);
DeleteObject(hFontEdit1);
こうするのかな。
WM_DESTROY のタイミングで hWndEdit1 が生きているかが不安。
かと言って、WM_INITDIALOG の対となるメッセージは無いし・・・
確か WS_POPUP のウィンドウは親ウィンドウの WM_DESTROY の
タイミングでは既に消滅していたと思う。
WS_CHILD なら大丈夫だったような気もするけど、
スマートにやるなら、やはり hWndEdit1 をサブクラス化して、
hWndEdit1 の WM_DESTROY で DeleteObject() すべきなのかな。
でも面倒なんだよね><
ヲサヲサラペトナモヤメマルヲサのタイミングでヲサラナアヲサが生きているかが不安。
自分でトラしたならともかく,そうでないのであれば生きているとみなせます。
ヘモトホコヲサラペトナモヤメマルヲサ
コッッョョッュッッッッカウイカイーョ
ヲサヲサヤヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサィヲサゥヲサヲサヲサヲサョヲサトヲサヲサヲサヲサヲサャヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサョ
スススススススススススススススススススススススススススススススススススススススス
ニコ 仲澤@失業者
トコ イーアイッーイッアウィ月ゥ アカコイケコアア 書込者ノト:ロ 」 「」 。 ン
フォントのハンドルの寿命はプログラマに任せられていて
任意です。これは、引数やパラメータにネラホトやネトテがない
ことをみれば自明ですね。従って単一のフォントが異なる
ネラホトを基に作られた複数のネトテで使用されることも許可され
ているわけです。以上の条件からフォントを破棄してよい
条件とは
アョそれを使用しているネトテが一つも無い時。
ですね。
ラペトナモヤメマルの後ではラペミチノホヤを受け取る可能性はないので、
ネトテを使用する機会はもはやありません。現実的には、その
タイミングで大本のネニマホヤを破棄してかまいません。
スススススススススススススススススススススススススススススススススススススススス
ニコ ュ
トコ イーアイッーイッアオィ水ゥ アアコエイコーク シ スュアセヲサアイイョイエケョキアョアエクヲサシッセ 書込者ノト:ロ 「「。 、 ン
ありがとうございました。参考になりました。
スレ主さんも頑張ってね。
ツイート | ![]() |