| 質問ではなく報告です。
前回こちらでVSCROLLイベントでスクロール同期する方法を教わりましたが、つまみドラッグには無効ということで
色々調べてたらつまみをドラッグしての同期もわかりましたので、書き込ませて頂きます。
まず、RichTextBoxを継承したクラスを作って、それのWndProcをオーバーライドします。
そうすれば、全てのスクロールイベント受け取ることができるので、
ここからそのスクロールの位置をSendMessage投げるように出来そうですが、
微妙にホイールのイベント発生の仕方がおかしいので、ここではつまみドラッグだけを
使うようにしました。
protected override void WndProc(ref Message m) {
const int WM_VSCROLL = 0x115;
const int SB_THUMBPOSITION = 0x4;
const int SB_THUMBTRACK = 0x5;
switch (m.Msg) {
case WM_VSCROLL:
int scrl = ((int)m.WParam) & 0x0000FFFF;
int pos = (int)m.WParam;
switch (scrl) {
case SB_THUMBTRACK: //つまみ中イベント
//このイベントの時はこっちからSendMessage
SendMessage(richTextBox2.Handle,
WM_VSCROLL, pos | SB_THUMBPOSITION,
IntPtr.Zero);
case SB_THUMBPOSITION:
//これはつまみをはなした時なので、VSCROLLからSendMessageするようにします
break;
}
break;
default:
break;
}
base.WndProc(ref m);
}
お役にたてればと。 |