はじめまして。Konと申します。よろしくお願いします。
使用PCはWinXP、MicrosoftVisualC++6.0 を使用しています。
MFC で、基本クラスをCFormView にしてプロジェクトを作りました。
スクロールバーとエディットボックスを連動したいと考えています。
1セットしか無い場合は、
void CInterFaceView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar*
pScrollBar)
{
int pos;
pos=pScrollBar->GetScrollPos();
switch(nSBCode){(中略)}
UpdateData(true);
m_【エディットボックス】.Format(%d,m_【スクロールバー】);
UpdateData(false);
pScrollBar->SetScrollPos(pos);
CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
}
でリアルタイムで動きました。
現在は、18セットあります。
スクロールバーが動くたびに、全てのエディットボックスを更新するのは
合理的では無いと思いますので、動いたスクロールバーを特定した後
エディットボックス1つを更新するようにしたいのですが、
なにか方法はありませんでしょうか?
ちなみに、エディットボックスとスクロールバーのメンバ変数は
m_edtext_par[i]、m_scroll_par[i]として、配列にすることまでは成功してます。
C++初心者で、話の通りが悪いかもしれませんが、
是非お力をお借り致したく、よろしくお願いします。
第3引数pScrollBarで判別できるんちゃいますか?
確かに pScrollBar はスクロールバーを特定していますが、
起動するたびに違う値が返ってきます。
しかも、規則的に数値が増えていないようです。
デバッグの方法が未熟なのかもしれません。
もうすこし、具体的におわかりになりませんか?
CWnd::GetDlgCtrlID() によって、スクロールバーのコントロールIDが得られませんか?
いえ、pScrollBarはCScrollBar*なのですから
そこからウインドウハンドルを参照してm_scroll_par[i]の中のウインドウハンドルと
つき合わせて比較してみるとか、方法はいくらでもあるのでは?
その値そのもので判断するのではなくてその値を利用して得られる情報にまで目を向けま
しょう。
逆に言うとCWnd*とか、CScrollBar*と言うようにコントロールクラスのポインタが
あるんだから何とでもなるぞと考えられるようになると言いのですけれど。
実際の話、コントロールクラスのポインタがあればたいていの操作は出来ますからね。
申し訳ありません。
ちょっと話が難しくて、ついて行けなかったのですが、
1,pScrollBarからウインドウハンドルを特定できる。
2,ウインドウハンドルはメンバ変数を呼び出せる。
という理解で間違いありませんか?
実は、ポインタがまだ怪しいのと、ウインドウハンドルがよく分からなかったので、
実際の方法が全く思いつきませんでした。
>1,pScrollBarからウインドウハンドルを特定できる。
yes. あるいはcontrol-IDを。
>2,ウインドウハンドルはメンバ変数を呼び出せる。
何言ってるかわかんね。
>>2,ウインドウハンドルはメンバ変数を呼び出せる。
>何言ってるかわかんね。
最終的には、スクロールバーのメンバ変数が配列で何番目か知りたいので
ウインドウハンドルから、メンバ変数が分かるのかと思いました。
> ウインドウハンドルから、メンバ変数が分かるのかと思いました。
わかるでしょ。同じハンドルを持ったヤツを探し出せばいいんだから。
>わかるでしょ。同じハンドルを持ったヤツを探し出せばいいんだから。
あ、やっぱり分かるんですね。
>>2,ウインドウハンドルはメンバ変数を呼び出せる。
あー、これはつまり
2,ウインドウハンドルからどのメンバ変数かを割り出せる
と言いたかったのか。ならばそのとおり。
# てゆっか、最初の表現じゃわかんねぇよふつー
すみません。
あんまり他の人とプログラムの話をしないものですから
なんと表現して良いのか、サッパリなのです。
容赦なく、指摘してください!
いま、pScrollBarからウインドウハンドルを特定しようとしています。
具体的な記述を教えて頂けませんか?
自分で調べるのが良いのでしょうが、少々急いでいるので、
お手伝い下さい。
> いま、pScrollBarからウインドウハンドルを特定しようとしています。
> 具体的な記述を教えて頂けませんか?
# C++に不慣れとミタ。
CSCrollBarはCWndの派生クラスです。
CWndのメソッドなりメンバ変数を眺めれば必ず見つかります。
# 魚はあげないけど、魚の獲り方なら教えてあげる。
># C++に不慣れとミタ。
愚痴っても仕方ないですが、不慣れなんてものじゃ無いです。
CScrollBar* と*が後ろに付いているのは、
コントロールクラスのポインタだからですか?
CWnd::GetDlgCtrlID() を使えば良いのでしょうか?
でも、どうやって使ったら良いのか、まだ考え中です。