エディットボックスの行数 – プログラミング – Home

エディットボックスの行数
 
通知
すべてクリア

[解決済] エディットボックスの行数


DE
 DE
(@DE)
ゲスト
結合: 14年前
投稿: 2
Topic starter  

[開発環境]
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);
}
これで指定行迄スクロールするのですが、
指定行がメモ帳の可視部分の一番下の行になります。
これを一番上の行にしたいのですが、どうすればいいでしょうか?
メモ帳の可視部分の行数が分かれば解決するんですが。


引用未解決
トピックタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

>メモ帳の可視部分の行数が分かれば解決するんですが。

GetClientRect()でクライアントのサイズが取得できます。
エディトボックスのクライアントサイズを取得すればよいでしょう。

GetTextMetrics()で、そのDCに割り当てられているフォントのサイズなどが取得できるかと。
フォントの高さ(TEXTMETRIC構造体のtmHeightメンバ…かな?)で割れば、行数出ませんかね?


返信引用
DE
 DE
(@DE)
ゲスト
結合: 14年前
投稿: 2
Topic starter  

瀬戸っぷさん、有難うございます。
解決しました。

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);


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました