C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 高さと巾の寸法の異なる文字(フォント)の表示は?


(過去ログ 68 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■39855 / inTopicNo.1)  高さと巾の寸法の異なる文字(フォント)の表示は?
  
□投稿者/ なば (1回)-(2009/08/14(Fri) 17:26:40)

分類:[.NET 全般] 

高さと巾の寸法が異なる文字を、今までVB6では、
Windows API 関数の
 Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" _
  (ByVal h As Long, ByVal w As Long, ByVal E As Long, ByVal O As Long, _
  ByVal w As Long, ByVal i As Long, ByVal u As Long, ByVal s As Long, _
  ByVal c As Long, ByVal OP As Long, ByVal cp As Long, ByVal q As Long, _
  ByVal PAF As Long, ByVal F As String) As Long
を使って、
    '論理フォントの作成
    h = 12 '文字高さ
    w = 6 '文字巾
    a = 30 '文字表示回転角(度)
    fnt = "MS 明朝"
    wei = 1 '太さ
    iit = 0 'イタリック
    iund = 0 'アンダーライン
    istr = 0 , 打ち消し線
    FontToUse = CreateFont(h, w, a, 0, wei, iit, iund, istr, 1, 0, _
     0, 0, 0, fnt)
とかしてましたが、VBNetではどうするのでしょうか?

 VB6と同様に、このAPIを使おうとしましたが、エラー(↓)になります。
------------------------------------------------------------------------
PInvoke 関数 'DatMj_090814!DatMj_090814.mUtsml::CreateFont' がスタックを
不安定にしています。PInvoke シグネチャがアンマネージ ターゲット シグネチ
ャに一致していないことが原因として考えられます。呼び出し規約、および
PInvoke シグネチャのパラメータがターゲットのアンマネージ シグネチャに一
致していることを確認してください。
------------------------------------------------------------------------
???自分の知識ではさっぱり・・
ご存知の方、よろしくご教示お願いします。


引用返信 編集キー/
■39864 / inTopicNo.2)  Re[1]: 高さと巾の寸法の異なる文字(フォント)の表示は?
□投稿者/ Hongliang (444回)-(2009/08/15(Sat) 01:14:58)
まず、.NET/WinForm における一般的な描画用インターフェイスである GDI+/System.Drawing ではフォントは Font クラスで表現されます。各コントロールに設定できるフォントもこの Font オブジェクトを使用します。
しかし、この GDI+ の Font オブジェクトは縦横の比を指定することはできません。思想として「縦横比を変えたいのなら、描画するときにスケーリングするのが自然だ」というのがあるためだと推測しています。
// ちなみに、これは WPF でも同様です。
このスケーリングによる描画のサンプルには例えば次のようなものがあります。
https://www.grapecity.com/japan/support/search/faqcontent.asp?id=26870

旧来の CreateFont などの Win32API(GDI 関数)を使用して描画する場合、フォント作成から描画まで全て GDI 関数でまかなうことになります。
関数宣言や手順は旧 VB と大体同じだと思いますが、VB7(VB2002)以降、
・整数型 Integer 及び Long のサイズが変わった
 C/C++ の LONG 型や DWORD 型は VB6 までは Long 型を当てていたが、VB7 以降は Integer 型を使用する。
・ハンドルなど OS によってサイズが変わる整数値には IntPtr 型を使う
といった変更があります。
引用返信 編集キー/
■39893 / inTopicNo.3)  Re[2]: 高さと巾の寸法の異なる文字(フォント)の表示は?
□投稿者/ なば (2回)-(2009/08/17(Mon) 01:51:43)
Hongliangさん、ありがとうございます!
例示いただいたサンプルコードで、できました!
ついでに、回転
 g.RotateTransform(a)
も上手くいかなかったのが、いきました。
 g.TranslateTransform(x, y)  '表示位置の設定
を使うのですね。
お盆休みで、当方、検討の時間がとれず、御礼が遅れ
て大変失礼しました。



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -