いつも参考にさせて頂いております。
リストコントロールのアイテムにボタンを貼り付けるには
どのようにすればいいのでしょうか?
また貼り付けたボタンは
リストコントロールがスクロールされた場合などは特に
意識する必要はないのでしょうか?
すみません 更に もう1点
この時のボタンのイベントはどこで拾えるのでしょうか?
教えて頂ければと思います。
Win2000,VC++6.0
GetSubItemRectで貼り付けたい位置のアイテムのサイズを取得して、それを元にボタンの位
置、大きさをMoveWindowで指定すれば出来ます。
リストコントロールの後ろにボタンが隠れて困ってしまう場合がありますので(以前、この件で
質問して皆様に回答を頂きました)ボタンはリストコントロールの子にしてあげればよいようで
す。
イベントはリストコントロールで取得出来ます。
スクロールには自前で対応する必要があります。
有難うございます。
GetSubItemRect の第2引数は、どの組み合わせになるのでしょうか?
教えて頂ければと思います
>GetSubItemRectの第2パラメタ
自己レス
LVIR_BOUNDS | LVIR_LABEL でできました。
>イベントはリストコントロールで取得出来ます。
リストコントロールのクリックイベントで拾うんですか?
>スクロールには自前で対応する必要があります。
これはどうやってやるのでしょうか?
>リストコントロールのクリックイベントで拾うんですか?
まず、CButtonをCListCtrlのメンバ変数としたいので、CListCtrlから派生したクラスを作成
します。
定義したCButtonは、ダイアログエディタで配置した時のようにIDが自動で付かないわけです
から、自分で空いているIDを定義します。
ヘッダファイルのメッセージマップにボタンが押された時に呼び出される関数を定義します。
例)afx_msg void OnButton1();
ソースファイルの以下の場所に(コレもメッセージマップと呼んでいいんでしょうか?呼び方で
ヘッダとの差別はないのかな)
BEGIN_MESSAGE_MAP(Cxxxxxx, CListctrl)
//{{AFX_MSG_MAP(Cxxxxxx)
ON_BN_CLICKED(ボタン用に定義したID, 関数) //コレを自前で追加
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
すればOKです。
>>スクロールには自前で対応する必要があります。
>これはどうやってやるのでしょうか?
CListCtrlのスクロールイベントが発生した時にボタンがどの位置に来るか計算して、再配置し
てあげればよいと思います。
その時、スクロールによってはみ出てしまったので、非表示にするとかの処理も考えた方がよい
でしょう。
スクロールバーをドラッグするイベントとマウスホイールでスクロールした時は別モノですの
で、両方対応する必要があります。
ヘッダコントロールが出ているときは、境目をドラッグしてセル(?)の大きさが変わった時に
も対応が必要です。
↑ダブルクリック時とかも
またまた有難うございます、
ですが、もう1点確認させてください。
>まず、CButtonをCListCtrlのメンバ変数としたいので、CListCtrlから派生したクラス
>を作成します。
>定義したCButtonは、ダイアログエディタで配置した時のようにIDが自動で付かないわけ
>ですから、自分で空いているIDを定義します。
リストコントロールに表示するデータは固定行でなく、可変だった場合は、
どのようにするのでしょう?
>リストコントロールに表示するデータは固定行でなく、可変だった場合は、
>どのようにするのでしょう?
CButtonを配列で定義して、最初の(添え字0)のIDだけ決めておき、他で決めた
ID+CButtonの個数分のIDは使用しないようにすればよいのではないでしょうか?
行数が幾つになるか分からないという場合は、表示している分だけを配列にして逃げるとか。
画面は有限ですから、ボタンの個数は決まりますよね?
CButton自体はCArray等を使用しても良いのですが、IDが有限なだけに、上限は決めないとダメ
だと思います。
>他で決めたID+CButtonの個数分のIDは使用しないようにすれば
分かりにくいですね。
『決めたID』+CButtonの個数分のIDは他で使用しないようにすれば
に訂正させて下さいませ。
有難うございます。
う~ん、今回、やろうとしてる事は無茶な事ですかね?
ひろぴーさんが過去、同じような事をやろうとした時は
行数は固定だったんですか?
最悪、ActiveXの使用も考えています。。。
#何かありますかね?
>ひろぴーさんが過去、同じような事をやろうとした時は
>行数は固定だったんですか?
行数は固定でしたが、選択された行のサブアイテムにCEditやCComboBoxを貼り付けてデータ入
力できるようなクラスを作ったのです。
単一選択ですから、1個づつしか出てこないんですね(^^;)
行数は制限無しかもしれませんが、表示される行には限界がありますから、その分のCButtonを
用意して使いまわすのがいいと思うのですが。
ActiveXはへなちょこプログラマなので、使ったことがありません。すみません。
なるほど!
選択した時にはじめて有効にするんですね。
それなら、何とかなるかもしれないです。
アリがとうございました、やってみます。