[開発環境]
Windows XP SP1
Visual C++ 6.0
SDK
メモ帳にファイルを読み込ませた後、指定行に移動させる関数をつくりました
void JumpTo(HWND hWndEdit, int nLine)
{
long nCharIndex=SendMessage(hWndEdit,EM_LINEINDEX,nLine-1,0);
PostMessage(hWndEdit,EM_SETSEL,nCharIndex,nCharIndex);
PostMessage(hWndEdit,EM_SCROLLCARET,0,0);
}
これで指定行迄スクロールするのですが、
指定行がメモ帳の可視部分の一番下の行になります。
これを一番上の行にしたいのですが、どうすればいいでしょうか?
メモ帳の可視部分の行数が分かれば解決するんですが。
>メモ帳の可視部分の行数が分かれば解決するんですが。
GetClientRect()でクライアントのサイズが取得できます。
エディトボックスのクライアントサイズを取得すればよいでしょう。
GetTextMetrics()で、そのDCに割り当てられているフォントのサイズなどが取得できるかと。
フォントの高さ(TEXTMETRIC構造体のtmHeightメンバ…かな?)で割れば、行数出ませんかね?
瀬戸っぷさん、有難うございます。
解決しました。
int GetLineCnt(HWND hWndEdit)
{
Rect Rect;
GetClientRect(hWndEdit,&Rect);
TEXTMETRIC tm;
HDC hDC = GetDC();
GetTextMetrics(hDC,tm);
ReleaseDC(hWndEdit,hDC);
return (Rect.bottom/tm.tmHeight);
}
// 332行に移動する例
int nLine=332;
int nLineCnt = GetLineCnt(hWndEdit);
nLine += nLineCnt - 1;
JumpTo(hWndEdit,nLine);