リストボックスの一行ごとにラインを引く – プログラミング – Home

リストボックスの一行ごとにラインを引く
 
通知
すべてクリア

[解決済] リストボックスの一行ごとにラインを引く


ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

はじめまして、VC初心者のねこです。
いつもお世話になっております。

WinXP VC6.0 MFCで開発中なのですがリストボックスに表示しているデータに、一行ず
つ線を引き、表みたいにしたいのですがやり方がわかりません。

どうぞよろしくお願いいたします。


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

リストボックスにはそういうスタイルは無いと思いますので
オーナードロウと言う機能を使って自分で描画するしか無いと思います。

ただし、オーナードロウを使うと言うことはリストボックスの描画を全て
自分でやると言う事になります。線を引くだけでなく、文字列の描画や
選択状態の描画、カーソルの移動に応じた描画などをすべて自分で行なう
必要があるわけです。
なので、一行毎に線を引くと言う必要性がよほど高く無いとやらないと思います。
どうしてもそうしたいと言う話であれば、苦労してでもやるしか無いと思います。

もしくは、CListCtrlをレポート形式で使用し、グリッドを表示させるように
スタイルを設定すれば、似たようなインターフェイスは可能ではあります。
ただし、CListCtrlを使う場合はCListBoxとは扱いが変わってくるので
それなりに勉強する事が必要になると思います。


返信引用
ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

PATIO様、返信ありがとうございます。

オーナードロウ機能は、「リストボックスプロパティ」の「スタイル」タブの「オーナ
ー描画」を「可変」にするという事でしょうか?

線を描画する際は、何か関数があるのでしょうか?

何回も申し訳ありませんが、よろしくお願いいたします。


返信引用
oops
 oops
(@oops)
ゲスト
結合: 17年前
投稿: 28
 

ちょっとは調べてから質問しようや。

リストボックスのオーナードロー
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_LBowner.html


返信引用
ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

oops 様

申し訳ありません。さっきの質問は自分なりにプロパティを変更したり、LineToという
関数を使ったりして試してみたのですが、線が表示されなかったので、もう一度質問さ
せていただきました。

もう少し自分で調べてみます。


返信引用
おすねこ
 おすねこ
(@おすねこ)
ゲスト
結合: 17年前
投稿: 1
 

 ねこと交尾中


返信引用
FUKU
 FUKU
(@FUKU)
ゲスト
結合: 17年前
投稿: 73
 

オーナードロウを使う手も勿論ありますが、
>表みたいにしたい
例えば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);


返信引用
FUKU
 FUKU
(@FUKU)
ゲスト
結合: 17年前
投稿: 73
 

すいません、書き漏れ。
リストコントロールではなく、リストボックス限定なら
やはりオーナードロウで実現することになると思います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

調べる方法ですけれど、

手元にそういう内容を調べる事が出来る書籍が無いのであれば、
Web上でリストボックスのオーナードロウについて書いてある
ホームページを探してみるのが一番早いと思います。
oopsさんが書いているのも多分そういう意味です。
ただし、VC++6.0向けに書いている物があるかどうかはわかりませんので
ある程度は読み替えが必要になるかもしれません。
この手の技術情報はその物ずばりの物が見つかるとは限りませんから
ある程度、内容を読み解く必要もあります。
その為にはWindowsの基本的な仕組みに関する知識がある程度は必要に
なります。プログラミングをする上では必要な知識になると思いますよ。


返信引用
ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

FUKU 様、 PATIO 様

色々教えて頂き本当にありがとうございます。Web上で調べて、オーナードロウでリスト
ボックスを作成することがで来ました。

>セルの枠線ではなく、リスト文字列の下線を期待しているのであれば、
フォントのスタイルを変更するという手もありますね。
説明不足で申し訳ありません、今回私が実現したかった機能はリスト文字列に下線を引
くという事でした。

リスト文字列に下線を引く方法は、
CPen* oldp=pDC->SelectObject(&m_pPen);  // ペンを作成
pDC->MoveTo(x, y);           // ペン先を描画位置に移動
pDC->LineTo(i, n); // 現在の位置から指定した所まで線を引

というやり方で実現できました。

失礼な点もたくさんあり、本当に申し訳ありませんでした。
みなさま、本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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