スライダでドラッグ中も値を返す方法 – プログラミング – Home

スライダでドラッグ中も値を返す方法
 
通知
すべてクリア

[解決済] スライダでドラッグ中も値を返す方法


しまだ
 しまだ
(@しまだ)
ゲスト
結合: 20年前
投稿: 16
Topic starter  

はじめまして。
前VBはやったことがあるんですけど、VC++は初心者です。
スライダを動かしたときの値をエディットボックスに表示させようとしているのです
が、
マウスでスライダのボタンをドラッグして離したときにしか表示されません。
ドラッグして移動中もスライダの値を連続的にエディットボックスに返したいのです
が、
どのようにすればよいのでしょうか?

今はOnInitDialogの中で

CSliderCtrl* pSlider1 =(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
pSlider1->SetRange(0,100);
pSlider1->SetPos(50);

このように初期化しており、

void CHalconDlg::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult)
{
CSliderCtrl* pSlider1 =(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
int s1 = pSlider1->GetPos();
エディットボックスのメンバ変数 = s1;
UpdateData(FALSE);
*pResult = 0;
}

ここでスライダの値をエディットボックスに入れています。

宜しくお願い致します。


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

多分、「離したとき」にしか送られない通知メッセージを処理しているからでは?
ドラッグ中に送られる通知メッセージに対応した処理を記述すれば、出来ると思いますよ。
CSliderCtrlの通知メッセージに関する内容を調べて見てはどうでしょう?


返信引用
a
 a
(@a)
ゲスト
結合: 24年前
投稿: 59
 

>>OnReleasedcaptureSlider1
って・・・。
Releasedのハンドラじゃん・・・
対応するハンドラを記述するのはVBだって同じでしょうに・・・

と「初心者」を表明すると何かいいことあるかなと思う人に苦言をば。


返信引用
しまだ
 しまだ
(@しまだ)
ゲスト
結合: 20年前
投稿: 16
Topic starter  

返信ありがとうございました。
おっしゃられる様にSliderCtrlを調べてみたのですが、やはりよく意味が分かりません
でした。
(というか、そういうのは無さそうな気がしました)。
宜しくお願い致します。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

THUMBTRACKとかなんとかいうの、ありません?


返信引用
a
 a
(@a)
ゲスト
結合: 24年前
投稿: 59
 

そか調べられなかったか・・・

スライダーは、スクロールメッセージを投げてきますよ。
つまり、ダイアログでスクロールメッセージをハンドルする。
第三引数で目的のスライダーのメッセージかチェックです。


返信引用
しろーと
 しろーと
(@しろーと)
ゲスト
結合: 19年前
投稿: 20
 

CODE化するとこんな感じでしょうか

void CFooDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CSliderCtrl* pSlider1 =(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
m_ed1 = pSlider1->GetPos(); // Edit に割り付けられた変数に代入
UpdateData(FALSE); // 表示の更新
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}


返信引用
a
 a
(@a)
ゲスト
結合: 24年前
投稿: 59
 

しろーとさんのはちょっと危険っぽいw
CScrollBar* pSlider1 =(CScrollBar*)GetDlgItem(IDC_SLIDER1);
if( pScrollBar == pSlider1 ){
//ここで処理
}
とかにしたほうが安全と思う。


返信引用
しろーと
 しろーと
(@しろーと)
ゲスト
結合: 19年前
投稿: 20
 

aさん

なるほどです。そうですね、ただ実際にはキャストが必要でしょうかww

if ((CSliderCtrl*)pScrollBar == pSlider1)
{
// 処理
}


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 23年前
投稿: 1235
 

>ただ実際にはキャストが必要でしょうか
戻り値が「CWnd」なので、「GetDlgItem」を使う時は必要ですね。


返信引用
菟ー
 菟ー
(@菟ー)
ゲスト
結合: 18年前
投稿: 21
 

??ポインターは合わせてあるようですがナニがへんなんでしょうかね?

void CFooDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
CScrollBar* pSlider1 =(CScrollBar*)GetDlgItem(IDC_SLIDER1);
if( pScrollBar == pSlider1 ){

これでキャストなんかしたら・・・
if ((CSliderCtrl*)pScrollBar == pSlider1)


返信引用
しまだ
 しまだ
(@しまだ)
ゲスト
結合: 20年前
投稿: 16
Topic starter  

みなさんありがとうございます。
OnHScrollを使うんですね!
なんとか動作するようになりました。
みなさんありがとうございました。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 23年前
投稿: 1235
 

あ!
>if ((CSliderCtrl*)pScrollBar == pSlider1)
>これでキャストなんかしたら・・・
ここではいらないです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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