はじめまして。
前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;
}
ここでスライダの値をエディットボックスに入れています。
宜しくお願い致します。
多分、「離したとき」にしか送られない通知メッセージを処理しているからでは?
ドラッグ中に送られる通知メッセージに対応した処理を記述すれば、出来ると思いますよ。
CSliderCtrlの通知メッセージに関する内容を調べて見てはどうでしょう?
>>OnReleasedcaptureSlider1
って・・・。
Releasedのハンドラじゃん・・・
対応するハンドラを記述するのはVBだって同じでしょうに・・・
と「初心者」を表明すると何かいいことあるかなと思う人に苦言をば。
返信ありがとうございました。
おっしゃられる様にSliderCtrlを調べてみたのですが、やはりよく意味が分かりません
でした。
(というか、そういうのは無さそうな気がしました)。
宜しくお願い致します。
THUMBTRACKとかなんとかいうの、ありません?
そか調べられなかったか・・・
スライダーは、スクロールメッセージを投げてきますよ。
つまり、ダイアログでスクロールメッセージをハンドルする。
第三引数で目的のスライダーのメッセージかチェックです。
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);
}
しろーとさんのはちょっと危険っぽいw
CScrollBar* pSlider1 =(CScrollBar*)GetDlgItem(IDC_SLIDER1);
if( pScrollBar == pSlider1 ){
//ここで処理
}
とかにしたほうが安全と思う。
aさん
なるほどです。そうですね、ただ実際にはキャストが必要でしょうかww
if ((CSliderCtrl*)pScrollBar == pSlider1)
{
// 処理
}
>ただ実際にはキャストが必要でしょうか
戻り値が「CWnd」なので、「GetDlgItem」を使う時は必要ですね。
??ポインターは合わせてあるようですがナニがへんなんでしょうかね?
void CFooDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
CScrollBar* pSlider1 =(CScrollBar*)GetDlgItem(IDC_SLIDER1);
if( pScrollBar == pSlider1 ){
これでキャストなんかしたら・・・
if ((CSliderCtrl*)pScrollBar == pSlider1)
みなさんありがとうございます。
OnHScrollを使うんですね!
なんとか動作するようになりました。
みなさんありがとうございました。
あ!
>if ((CSliderCtrl*)pScrollBar == pSlider1)
>これでキャストなんかしたら・・・
ここではいらないです。