2008年7月19日
TextBoxの行数を取るだけなら…
寝る前に書いた『GetLineFromCharIndexメソッドが…欲しい』ですが…単純にワードラップも考慮された行数を取得するだけなら、必殺のWinAPI呼び出しでできることを知りました
WinAPI呼び出しは、できるだけやりたくないわけですが…Compact FrameworkはWinAPIと組み合わせないとできないことが多すぎですね
WinAPIでできることなんてイチイチおぼえてないよ
[DllImport("coredll.dll", CharSet = CharSet.Auto)] private static extern int SendMessageW(IntPtr hWnd, int message, int wParam, IntPtr lParam); private const int EM_GETLINECOUNT = 0xBA; private int GetLineCount(IntPtr hWnd) { return SendMessageW(hWnd, EM_GETLINECOUNT, 0, IntPtr.Zero); } (略) IntPtr hWnd = textBox.Handle; int line = GetLineCount(hWnd);
な感じで、lineに表示してる行数が取れました
でも、次にスクロールの開始行数を求めるためにフォントの高さを求めようと思ったら…FontクラスにGetHeightメソッドがないよ~Compact Frameworkには
![]() |
プログラミングWindows第5版〈上〉Win32 APIを扱う開発者のための決定版! (Microsoft Programming Series) Charles Petzold 長尾 高弘 ロングテール
|
追記 2008-07-19 12:56:33
調べてたら、『ぬるり。: TextBoxと未実装メッセージ(2)』なるエントリを発見
このコードのDllImportだけcoredll.dllに書き換えたらCompactでも使えますね
TrackBack URL :

