はじめまして、VC初心者のねこです。
いつもお世話になっております。
WinXP VC6.0 MFCで開発中なのですがリストボックスに表示しているデータに、一行ず
つ線を引き、表みたいにしたいのですがやり方がわかりません。
どうぞよろしくお願いいたします。
リストボックスにはそういうスタイルは無いと思いますので
オーナードロウと言う機能を使って自分で描画するしか無いと思います。
ただし、オーナードロウを使うと言うことはリストボックスの描画を全て
自分でやると言う事になります。線を引くだけでなく、文字列の描画や
選択状態の描画、カーソルの移動に応じた描画などをすべて自分で行なう
必要があるわけです。
なので、一行毎に線を引くと言う必要性がよほど高く無いとやらないと思います。
どうしてもそうしたいと言う話であれば、苦労してでもやるしか無いと思います。
もしくは、CListCtrlをレポート形式で使用し、グリッドを表示させるように
スタイルを設定すれば、似たようなインターフェイスは可能ではあります。
ただし、CListCtrlを使う場合はCListBoxとは扱いが変わってくるので
それなりに勉強する事が必要になると思います。
PATIO様、返信ありがとうございます。
オーナードロウ機能は、「リストボックスプロパティ」の「スタイル」タブの「オーナ
ー描画」を「可変」にするという事でしょうか?
線を描画する際は、何か関数があるのでしょうか?
何回も申し訳ありませんが、よろしくお願いいたします。
oops 様
申し訳ありません。さっきの質問は自分なりにプロパティを変更したり、LineToという
関数を使ったりして試してみたのですが、線が表示されなかったので、もう一度質問さ
せていただきました。
もう少し自分で調べてみます。
ねこと交尾中
オーナードロウを使う手も勿論ありますが、
>表みたいにしたい
例えばEXCELのように、セルの枠線を期待しているのであれば
拡張スタイルを指定すると良いと思います。
(CListCtrl m_Listとして)
m_List.SetExtendedStyle(m_List.GetExtendedStyle() | LVS_EX_GRIDLINES);
又セルの枠線ではなく、リスト文字列の下線を期待しているのであれば、
フォントのスタイルを変更するという手もありますね。
(CFont m_Font1として)
LOGFONT lf;
m_List.GetFont()->GetLogFont(&lf);
lf.lfUnderline = TRUE; // ←下線付きのフォントを指定
m_Font1.CreateFontIndirect(&lf);
m_List.SetFont(&m_Font1);
すいません、書き漏れ。
リストコントロールではなく、リストボックス限定なら
やはりオーナードロウで実現することになると思います。
調べる方法ですけれど、
手元にそういう内容を調べる事が出来る書籍が無いのであれば、
Web上でリストボックスのオーナードロウについて書いてある
ホームページを探してみるのが一番早いと思います。
oopsさんが書いているのも多分そういう意味です。
ただし、VC++6.0向けに書いている物があるかどうかはわかりませんので
ある程度は読み替えが必要になるかもしれません。
この手の技術情報はその物ずばりの物が見つかるとは限りませんから
ある程度、内容を読み解く必要もあります。
その為にはWindowsの基本的な仕組みに関する知識がある程度は必要に
なります。プログラミングをする上では必要な知識になると思いますよ。
FUKU 様、 PATIO 様
色々教えて頂き本当にありがとうございます。Web上で調べて、オーナードロウでリスト
ボックスを作成することがで来ました。
>セルの枠線ではなく、リスト文字列の下線を期待しているのであれば、
フォントのスタイルを変更するという手もありますね。
説明不足で申し訳ありません、今回私が実現したかった機能はリスト文字列に下線を引
くという事でした。
リスト文字列に下線を引く方法は、
CPen* oldp=pDC->SelectObject(&m_pPen); // ペンを作成
pDC->MoveTo(x, y); // ペン先を描画位置に移動
pDC->LineTo(i, n); // 現在の位置から指定した所まで線を引
く
というやり方で実現できました。
失礼な点もたくさんあり、本当に申し訳ありませんでした。
みなさま、本当にありがとうございました。