環境:windowsXP VC++2003 MFC
はじめまして。フクダと申します。
質問させて頂きます。
MDIの開発を行っています。
ビューをリッチエディットビューにしました。
子ウィンドウに文字を入れ垂直スクロールを行うと、
当たり前ですが文字がスクロールバーに付随して動きます。
この場合だと、例えば下にスクロールをすると
文字が徐々に上に行き、非クライアント領域に隠れます。
これをメモ帳のように、スクロールすると行単位でスクロールが
行われる(徐々に上に隠れたりしない)ようにしたいのですが
方法が分りません。
どなたか御教授下さい。
以前に似たようなことをやりました。
ただし、リッチエディットビューではなく、スクロールビューでした。
なので、同じようにうまくいくかどうかは分かりませんが、
まず、SetScrollSizes()で矢印ボタンのスクロール幅を行単位になるように設定
した上で、WM_VSCROLL のメッセージハンドラを実装して、マウスでのスクロール
も行単位になるように丸めました。
void CxxxView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
switch(nSBCode)
{
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
// 任意位置へのスクロールは、行区切り位置へ補正する
{
// スクロールサイズの取得
INT nMapMode;
CSize ViewSize, PageSize, LineSize;
GetDeviceScrollSizes(nMapMode, ViewSize, PageSize, LineSize);
// スクロールサイズの行高さで丸める(四捨五入)
nPos = (UINT)((DOUBLE)nPos / (DOUBLE)LineSize.cy + 0.5) * LineSize.cy;
}
break;
default:
// それ以外はデフォルトの処理とする
break;
}
CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
}
bun様
さっそくの回答ありがとうございました。
解決の糸口が見えました。
教えて頂いた方法で行けそうです。
今後ともよろしくお願いします。