掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VC++ SDK でエディットにスクロールバーを関連付けするには? (ID:64965)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
解決しました!! wclrp ( 'o')さん、夏みかんさん、ありがとうございました! wclrp ( 'o')さんのおっしゃった 「地道にたくさんの処理を連動するように作らないといけない」 という言葉の意味が、すべてできあがってから理解できましたw 実際のソースを・・・※必要ないと思われる部分は省いています INT_PTR CALLBACK Disp(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static SCROLLINFO si_v, si_h; static int dispno_v,dispno_h,pos_v,pos_h; static RECT rc; switch (message) { case WM_INITDIALOG: // 初期処理 InitDialog_LogDisp(hDlg, message, wParam, lParam); GetWindowRect(GetDlgItem(hDlg,IDC_EDIT1), &rc); // 垂直スクロールバー dispno_v = (rc.bottom - rc.top) / LINEHEIGHT; si_v.cbSize = sizeof(SCROLLINFO); si_v.fMask = SIF_ALL; si_v.nMin = 0; si_v.nMax = MaxLine; si_v.nPage = dispno_v; si_v.nPos = pos_v; SetScrollInfo(GetDlgItem(hDlg,IDC_SCROLLBAR2), SB_CTL, &si_v, TRUE); case WM_VSCROLL: switch (LOWORD(wParam)) { case SB_LINEUP: dy = -1; break; case SB_LINEDOWN: dy = 1; break; case SB_PAGEUP: dy = -1 * si_v.nPage; break; case SB_PAGEDOWN: dy = si_v.nPage; break; //case SB_THUMBPOSITION: case SB_THUMBTRACK: dy = HIWORD(wParam) - si_v.nPos; break; default: dy = 0; break; } dy = max(-1 * si_v.nPos, min(dy, si_v.nMax - si_v.nPos)); if (dy != 0) { si_v.nPos += dy; // テキストのスクロール switch (LOWORD(wParam)) { case SB_LINEUP: SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_SCROLL, SB_LINEUP, 0L); break; case SB_LINEDOWN: SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_SCROLL, SB_LINEDOWN, 0L); break; case SB_PAGEUP: SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_SCROLL, SB_PAGEUP, 0L); break; case SB_PAGEDOWN: SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_SCROLL, SB_PAGEDOWN, 0L); break; case SB_THUMBTRACK: SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_LINESCROLL, 0L, dy); break; default: break; } // スクロールバーのつまみの移動 SetScrollInfo(GetDlgItem(hDlg,IDC_SCROLLBAR2), SB_CTL, &si_v, TRUE); UpdateWindow(GetDlgItem(hDlg,IDC_EDIT1)); UpdateWindow(GetDlgItem(hDlg,IDC_SCROLLBAR2)); } break; } こんな感じになりました。 SendMessageの使い方がよくわからず、最初はSB_THUMBTRACKの場所でも if(dy > 0) SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_SCROLL,SB_LINEUP, 0L); else SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_SCROLL, SB_LINEDOWN, 0L); としていて、ものすごく動きの遅いスクロールバーでしたw (しかも位置が合わない;) とにもかくにも、なんとかなりました。 みなさん、ありがとうございました!!! 壁にぶち当たったらまた書き込ませていただくこともあると思いますので、 そのときはどうかよろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.