※本内容は、「なんでもわいわい掲示板」の質疑応答で問題は解決してますが、
過去ログに残す意味で、こちらに転載させていただきます。
<いずみ>-------------------------------------------------------------------
VC6.0上でのアプリ開発のお話ですが、「C++の質問」というわけでは
ないので、こちらに投稿させていただきます。
以前、NT4.0で開発したアプリケーションで MsFlexGrid を使用していました。
で、開発アプリの動作環境が NT4.0 から Windows2000 へ変わったんです。
そうしましたら、リストボックスやコンボボックスではホイールマウスの
ホイールでスクロールするんですが、MsFlexGrid ではスクロールしないんですね。
Google で「MsFlexGrid ホイール」等で検索しても
「Windows2000で MsFlexGrid をホイールマウスに対応」という
記事も見つけられなかったので「無理なのだろうか」とも
思っています。
もし、「いや、つかえるよ」や「こうすればできそう」的な
お話があれば、お伺いしたいと思っています。
よろしくお願いいたします。
<たいちうさん>-------------------------------------------------------------
PreTranslateMessageを使ってできました。
CViewに動的に作成したCMSFlexGridです。
以下は私の環境で動いたソースの一部です。
(関連ありそうな箇所)御参考程度に。
BOOL CMyView::PreTranslateMessage(MSG* pMsg)
{
static int iAccumDelta;
switch (pMsg->message) {
case WM_MOUSEWHEEL:
iAccumDelta += (short)HIWORD(pMsg->wParam);
while (iAccumDelta >= 40) {
::SendMessage(pMsg->hwnd, WM_VSCROLL, SB_LINEUP, 0);
iAccumDelta -= 40;
}
while (iAccumDelta <= -40) {
::SendMessage(pMsg->hwnd, WM_VSCROLL, SB_LINEDOWN, 0);
iAccumDelta += 40;
}
return TRUE;
default:
break;
}
return CView::PreTranslateMessage(pMsg);
}
#この質問ならラウンジの方がよかったと思います。
#レスも付やすかったでしょう。
<いずみ>-------------------------------------------------------------------
回答ありがとうございます。
ポイントは WM_MOUSEWHEEL メッセージを捕まえられる事ですね。
自分は普通にダイアログの上に MsFlexGrid を配置しているので
同一の手順で可能かはわかりませんが、やってみようと思います。
結果が出次第改めて御報告します。
<いずみ>-------------------------------------------------------------------
出来ましたので御報告です。
実は以外と簡単だったらしく、下記処理をMsFlexGrid を貼り付けている
ダイアログの処理として追加しただけで実現できました。
BOOL CXXXDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を
呼び出してください
long topRow = m_grd1.GetTopRow() ;
if( zDelta > 0 )
{
topRow -= 1 ;
if( topRow <= 0 ) topRow = 1 ;
}
else
{
topRow += 1 ;
if( topRow >= m_grd1.GetRows() ) topRow = m_grd1.GetRows() - 1;
}
m_grd1.SetTopRow( topRow );
return CDialog::OnMouseWheel(nFlags, zDelta, pt);
}
ありがとうございました。
解決