TextBoxの行数を取るだけなら…

寝る前に書いた『GetLineFromCharIndexメソッドが…欲しい』ですが…単純にワードラップも考慮された行数を取得するだけなら、必殺のWinAPI呼び出しでできることを知りました :|

WinAPI呼び出しは、できるだけやりたくないわけですが…Compact FrameworkはWinAPIと組み合わせないとできないことが多すぎですね :cry: WinAPIでできることなんてイチイチおぼえてないよ :arrow:

[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には :shock:

結局いまだにWinAPI大事 :roll:

プログラミングWindows第5版〈上〉Win32 APIを扱う開発者のための決定版! (Microsoft Programming Series) プログラミングWindows第5版〈上〉Win32 APIを扱う開発者のための決定版! (Microsoft Programming Series)
Charles Petzold 長尾 高弘 ロングテール

Advanced Windows 改訂第4版 CAD工学 (情報数理シリーズ) 標準講座MFC6.0―Visual C++による効率的なWindowsプログラミング (Programmer’s SELECTION) インサイド Microsoft Windows 第4版〈上〉 (マイクロソフト公式解説書) Win32API完璧マスタ―Visual C++プログラミング
by G-Tools

追記 2008-07-19 12:56:33
調べてたら、『ぬるり。: TextBoxと未実装メッセージ(2)』なるエントリを発見 :!: このコードのDllImportだけcoredll.dllに書き換えたらCompactでも使えますね ;)

Be Sociable, Share!

TrackBack URL :

No comments yet. Be the first.

Leave a reply