文字列を右寄せや中央揃えで出力(その2)
文字列を右寄せや中央揃えで出力(その1)で紹介しました SetTextAlign() 関数以外にも同等の動作をする API がありました。 DrawText() API 以下のコードをフォームモジュールに貼り付けて実行して見てください。 起動後フォームをクリックするとフォームの縦方向での中央、横方向での中央に"Windows 2000"の文字列が 出力されます。 *----*----*----*----*----*----*----*----*----* Option Explicit Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Const DT_BOTTOM = &H8 Private Const DT_CALCRECT = &H400 Private Const DT_CENTER = &H1 Private Const DT_CHARSTREAM = 4 Private Const DT_DISPFILE = 6 Private Const DT_EDITCONTROL = &H2000 Private Const DT_END_ELLIPSIS = &H8000 Private Const DT_EXPANDTABS = &H40 Private Const DT_EXTERNALLEADING = &H200 Private Const DT_INTERNAL = &H1000 Private Const DT_LEFT = &H0 Private Const DT_METAFILE = 5 Private Const DT_MODIFYSTRING = &H10000 Private Const DT_NOCLIP = &H100 Private Const DT_NOPREFIX = &H800 Private Const DT_PATH_ELLIPSIS = &H4000 Private Const DT_PLOTTER = 0 Private Const DT_RASCAMERA = 3 Private Const DT_RASDISPLAY = 1 Private Const DT_RASPRINTER = 2 Private Const DT_RIGHT = &H2 Private Const DT_RTLREADING = &H20000 Private Const DT_SINGLELINE = &H20 Private Const DT_TABSTOP = &H80 Private Const DT_TOP = &H0 Private Const DT_VCENTER = &H4 Private Const DT_WORD_ELLIPSIS = &H40000 Private Const DT_WORDBREAK = &H10 Private Sub Form_Click() Dim dtFlags&, rc As RECT GetClientRect Me.hwnd, rc dtFlags = DT_CENTER Or DT_SINGLELINE Or DT_VCENTER DrawText Me.hdc, "Windows 2000", LenB(StrConv("Windows 2000", vbFromUnicode)), rc, dtFlags End Sub *----*----*----*----*----*----*----*----*----* このサンプルでは DT_CENTER, DT_VCENTER を指定し縦、横両方向での中央揃えで出力しましたが 他のフォーマットを指定することによりいろんな効果が得られます。 例えば、 DT_END_ELLIPSIS:矩形領域内に収まらない末尾を"..."で表現します。 DT_PATH_ELLIPSIS:矩形領域内に収まるようパス文字列を省略します。 などです。 |
動作確認
Windows95 + Visual Basic 5このサンプルを使用しての感想や、質問は 掲示板や、 らくがき帳に書きとめて頂けるとうれしいです。