プロが教える店舗&オフィスのセキュリティ対策術

フォントを設定するにのCreateFontを使っていましたがCreateFontIndirectというAPIも有るそうです。
マイクロソフトの解説に
「CreateFont 関数との違いは、パラメータの指定方法だけです。」
とあります。
しかしどうして同じような関数が2つ用意されているのか分かりません。
両者の特徴と意味とどのように使い分けるのか教えてください。

A 回答 (1件)

数多くの引数を持つか、巨大な構造体を引数に持つかの違いですよね。



好みでいいんじゃないんですか?

個人的にはCreateFontIndirectを使ってますが、CreateFontを使うときもありますし。

GetObjectでフォント情報を取得したときはCreateFontIndirectになりますけど。

#ちなみに、削除の順番は、
1.Create
2.WM_SETFONT
3.前回コールされたときのフォントを削除

ですよ。セットしたばかりのフォントを削除するのではありません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
前回の件で1つのフォントハンドルですまそうとするとどうしてもクリエイト前にデリートして瞬間的にフォントが設定されていない状態がでてきました。
2つの変数を使って以下のようにすべきですね。
1つの変数では扱いが難しいですね?

#include <windows.h>
HWNDhB;

LONG WINAPI WinProcedure(HWND hW,UINT wM,UINT wP,LONG lP)
{
RECTrt;
intW,H;
HFONThFx;
staticHFONThF;
switch(wM)
{
case WM_COMMAND:
SetFocus(hW);return 0;
case WM_SIZE:
GetClientRect(hW,&rt);
W=rt.right-rt.left;H=rt.bottom-rt.top;
hFx=CreateFont(H/4,W/4,0,0,FW_NORMAL,FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,OUT_TT_ONLY_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,"MS Pゴシック");
SendMessage(hB,WM_SETFONT,(WPARAM)hFx,1);
if(hF!=0)DeleteObject(hF);
hF=hFx;
MoveWindow(hB,W/4,H/4,W/2,H/2,1);
return 0;
case WM_DESTROY:
DeleteObject(hF);
PostQuitMessage(0);
return 0;
default:return(DefWindowProc(hW,wM,wP,lP));
}
}
WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int)
{
WNDCLASSwc;
HWNDhW;
MSGms;
wc.lpszClassName="I";
wc.lpfnWndProc=(WNDPROC)WinProcedure;
wc.hInstance=hI;
wc.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hIcon=0;
wc.hCursor=LoadCursor(0,IDC_ARROW);
wc.hbrBackground=HBRUSH(COLOR_WINDOW+1);
wc.lpszMenuName=0;
RegisterClass(&wc);
hW=CreateWindow("I","親",WS_OVERLAPPEDWINDOW,0,0,99,99,0,0,hI,0);
hB=CreateWindow("BUTTON","子",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,0,0,hW,0,hI,0);
ShowWindow(hW,SW_SHOW);
UpdateWindow(hW);
while(GetMessage(&ms,0,0,0))
{
TranslateMessage(&ms);
DispatchMessage(&ms);
}
return (ms.wParam);
}

お礼日時:2003/06/20 07:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!