Visual Studio デベロッパー センター >
Visual Studio フォーラム
>
Visual Studio ドキュメント フィードバック
>
CreateFont 関数のドキュメントについて
CreateFont 関数のドキュメントについて
タイトルの通り、CreateFont 関数のドキュメントが間違っています。
第 6 引数から 13 引数まで DWORD となっていますが、LOGFONT と同様に BYTE ではないでしょうか?
回答
タイトルの通り、CreateFont 関数のドキュメントが間違っています。
ドキュメントは間違っていません。
Visual Studio 2008に付随するWindows SDKでは下記のように宣言されています。
WINGDIAPI HFONT WINAPI CreateFontA( __in int cHeight, __in int cWidth, __in int cEscapement, __in int cOrientation, __in int cWeight, __in DWORD bItalic,
__in DWORD bUnderline, __in DWORD bStrikeOut, __in DWORD iCharSet, __in DWORD iOutPrecision, __in DWORD iClipPrecision,
__in DWORD iQuality, __in DWORD iPitchAndFamily, __in_opt LPCSTR pszFaceName);
WINGDIAPI HFONT WINAPI CreateFontW( __in int cHeight, __in int cWidth, __in int cEscapement, __in int cOrientation, __in int cWeight, __in DWORD bItalic,
__in DWORD bUnderline, __in DWORD bStrikeOut, __in DWORD iCharSet, __in DWORD iOutPrecision, __in DWORD iClipPrecision, __in DWORD iQuality, __in DWORD iPitchAndFamily, __in_opt LPCWSTR pszFaceName);
これを見る限り、APIの定義とドキュメントで、型は一致しているため、ドキュメントは間違っていないと言えます。
第 6 引数から 13 引数まで DWORD となっていますが、LOGFONT と同様に BYTE ではないでしょうか?
同じような意味合いを持つ引数、メンバの型が違うことは、仕様として一貫性がないということですよね?
そのように設計された理由までは何とも言えませんが、今更変えられるところではないとも思えます。
合わせることによって良くなると言うことであれば、それを明確にして、ご提案下さい。
(但し、ドキュメントフィードバックではなくなりますが…)
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 編集済みAzuleanMVP2009年7月1日 14:15
- 編集済みAzuleanMVP2009年7月1日 14:15
- 回答としてマークミッヒー 2009年7月1日 15:45
間違っている (と思う) ドキュメントは
私がどのドキュメントを参照したかを引っ張り忘れたためにお手数をおかけしていますが、その2つ共に正しいと評価しています。
http://msdn.microsoft.com/en-us/library/dd183499(VS.85).aspx
http://msdn.microsoft.com/ja-jp/library/cc428368.aspx
の 2 つです。
CFont::CreateFontはAPIのMFCでの単なるラッパーです。(APIのCreateFont(第6引数からDWORDのもの)を呼ぶだけ)
逆にお聞きしたいのですが、何を以て間違えていると判断されているのでしょうか?
LOGFONTのメンバーと型が異なることによって、すぐに間違いにはなりません。(デザイン上、一貫性がないという点は残りますが、間違いとは言えません)
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマークミッヒー 2009年7月1日 15:44
すべての返信
タイトルの通り、CreateFont 関数のドキュメントが間違っています。
ドキュメントは間違っていません。
Visual Studio 2008に付随するWindows SDKでは下記のように宣言されています。
WINGDIAPI HFONT WINAPI CreateFontA( __in int cHeight, __in int cWidth, __in int cEscapement, __in int cOrientation, __in int cWeight, __in DWORD bItalic,
__in DWORD bUnderline, __in DWORD bStrikeOut, __in DWORD iCharSet, __in DWORD iOutPrecision, __in DWORD iClipPrecision,
__in DWORD iQuality, __in DWORD iPitchAndFamily, __in_opt LPCSTR pszFaceName);
WINGDIAPI HFONT WINAPI CreateFontW( __in int cHeight, __in int cWidth, __in int cEscapement, __in int cOrientation, __in int cWeight, __in DWORD bItalic,
__in DWORD bUnderline, __in DWORD bStrikeOut, __in DWORD iCharSet, __in DWORD iOutPrecision, __in DWORD iClipPrecision, __in DWORD iQuality, __in DWORD iPitchAndFamily, __in_opt LPCWSTR pszFaceName);
これを見る限り、APIの定義とドキュメントで、型は一致しているため、ドキュメントは間違っていないと言えます。
第 6 引数から 13 引数まで DWORD となっていますが、LOGFONT と同様に BYTE ではないでしょうか?
同じような意味合いを持つ引数、メンバの型が違うことは、仕様として一貫性がないということですよね?
そのように設計された理由までは何とも言えませんが、今更変えられるところではないとも思えます。
合わせることによって良くなると言うことであれば、それを明確にして、ご提案下さい。
(但し、ドキュメントフィードバックではなくなりますが…)
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 編集済みAzuleanMVP2009年7月1日 14:15
- 編集済みAzuleanMVP2009年7月1日 14:15
- 回答としてマークミッヒー 2009年7月1日 15:45
間違っている (と思う) ドキュメントは
http://msdn.microsoft.com/en-us/library/dd183499(VS.85).aspx
http://msdn.microsoft.com/ja-jp/library/cc428368.aspx
の 2 つです。
http://msdn.microsoft.com/en-us/library/2ek64h34.aspx
http://msdn.microsoft.com/en-us/library/aa279837(VS.60).aspx
http://msdn.microsoft.com/ja-jp/library/2ek64h34.aspx
http://msdn.microsoft.com/ja-jp/library/2ek64h34(VS.80).aspx
の 4 つは問題なさそうです。
間違っている、と思っているドキュメントがもしかして 64 bit 版のものでしたらすいません。間違っている (と思う) ドキュメントは
私がどのドキュメントを参照したかを引っ張り忘れたためにお手数をおかけしていますが、その2つ共に正しいと評価しています。
http://msdn.microsoft.com/en-us/library/dd183499(VS.85).aspx
http://msdn.microsoft.com/ja-jp/library/cc428368.aspx
の 2 つです。
CFont::CreateFontはAPIのMFCでの単なるラッパーです。(APIのCreateFont(第6引数からDWORDのもの)を呼ぶだけ)
逆にお聞きしたいのですが、何を以て間違えていると判断されているのでしょうか?
LOGFONTのメンバーと型が異なることによって、すぐに間違いにはなりません。(デザイン上、一貫性がないという点は残りますが、間違いとは言えません)
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマークミッヒー 2009年7月1日 15:44
- Azulean さん、すいません。2 回目の書き込みの途中で書き込まれたようで気付きませんでした。
その後、よくよく確認をしてみると、VS 2008 のドキュメントを見ながら、VS 2005 で検証していた、というお粗末な結果でした。Azulean さんにはもちろんですが、Microsoft 社の方々にもご迷惑をお掛けしました。
すいませんでした。 その後、よくよく確認をしてみると、VS 2008 のドキュメントを見ながら、VS 2005 で検証していた、というお粗末な結果でした。
「VS2005で検証していた」ことで、「正しいのはBYTE型だと誤認した」ということでしょうか?
よろしければ、そのVS2005で検証していたというあたりをお聞かせ頂ければと思います。
これを問う理由としては、VS2005に付属しているPlatformSDKでもCreateFontA/CreateFontWの第6引数はDWORD型であるからです。
なお、参考ですが、MFCのCFont::CreateFontはVS2005/VS2008共に第6引数はBYTE型です。
# MFCとAPIの取り違えなら納得かもしれない。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。ご指摘の通り、MFC と API を取り違えていました。
CFont::CreateFont 関数を記述していた際、ドキュメントを読み間違え、上位 4 ビットに設定する値 (既にそこにある値でした) をシフトした時に、warning C4309: '引数' : 定数値が切り捨てられました。
という警告が出た為、おかしいな、と思ったのが始まりでした。
本当にすいませんでした。


