MsFlexGrid とホイールマウス – プログラミング – Home

MsFlexGrid とホイールマウス
 
通知
すべてクリア

[解決済] MsFlexGrid とホイールマウス


いずみ
 いずみ
(@いずみ)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

※本内容は、「なんでもわいわい掲示板」の質疑応答で問題は解決してますが、
 過去ログに残す意味で、こちらに転載させていただきます。

<いずみ>-------------------------------------------------------------------

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);
}

ありがとうございました。


引用未解決
トピックタグ
いずみ
 いずみ
(@いずみ)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

解決


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました