• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:リストビューのスクロールバーを非表示にしたい)

リストビューのスクロールバーを非表示にしたい

このQ&Aのポイント
  • eMbedded Visual C++ 4.0、MFC、ダイアログベースでプログラミングをしています。
  • リストビューのスクロールバーを非表示にする方法を探しています。
  • スクロールバーを非表示にしながら別のプログラムからリストビューをスクロールさせたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんにちは。実験してみた所、実現できましたのでご報告いたします。 ・VC++6.0, MFC, にて行いました。 ・リストビューのスクロールをしないにチェックします(消したいようですので) ・単独のスクロールバー(IDC_SCROLLBAR1)をダイアログに貼り付けて、リストビューをスクロールさせています。 以下参考程度に。 void CKaiketuDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください //テスト用のスクロールバーに対して何かされた if(::GetDlgCtrlID(pScrollBar->GetSafeHwnd()) == IDC_SCROLLBAR1) { //縦の移動量を示す変数 int vScroll = 0; //何の操作か switch(nSBCode) { //下方向関係が押された case SB_LINEDOWN: case SB_PAGEDOWN: vScroll = -10; break; //上方向関係が押された case SB_LINEUP : case SB_PAGEUP : vScroll = 10; } //リストビューのクライアント領域をスクロールさせる ::ScrollWindowEx(m_listCtrl.GetSafeHwnd(), 0, vScroll, 0, 0, 0, 0, SW_SCROLLCHILDREN | SW_INVALIDATE); //リストビュー内の全てのアイテムをスクロールさせる for(int i = 0; i < m_listCtrl.GetItemCount(); ++i) { POINT ptPos = {0}; //アイテムの位置を取る m_listCtrl.GetItemPosition(i, &ptPos); //縦方向に向かって移動量を加算する ptPos.y += vScroll; //アイテム位置を設定する m_listCtrl.SetItemPosition(i, ptPos); } } CDialog::OnVScroll(nSBCode, nPos, pScrollBar); }

その他の回答 (1)

回答No.2

 こんにちは。  訂正です。  ScrollWindowEx()は必要ありませんでした。  アイテム位置を変更するだけでスクロール出来ます。

automatickey
質問者

お礼

ありがとうございます。御礼が遅くなりすみません。 試したところ、うまくいきませんでした。 どううまくいかなかったかは・・・すみません忘れました。 スクロールバーが表示されてしまったような気がします。 プロパティの「スクロールさせない」はアイテムがすべて収まるのが前提なのかもしれません。 また、リストビューのアイテムには高さ調整用のイメージを貼り付けているのでそれが関係していたかもしれません。 とりあえず「スクロールさせない」はチェックせず、表示されてしまうスクロールバーの部分は他のコントロールで隠すことで一応の解決を見ました。 ほかにいい方法があれば教えていただけるとたすかります。 テストできるかは分かりませんが。