CListBoxを派生させて
オーナードローをしたのですが、(違うような気がするのですが)
AddStringしても項目が追加できず
選択できるセルがありません。
ただ、描画がされているだけのようです。
また、AddStringの文字はどうやって表示するのでしょうか?
最終的には、以下のようなことがしたいと思っています。
左にアイコンがあり、ディレクトリごとに
段があるリストボックスです。
もうひとつ、
セルを透過させて背景にBitmapの表示。
こちらのほうで、オーナー描画が必要かなと思い
今に至ります。
ただ、オーナー描画のこととかよくわかっていません。
よろしくお願いします。
------------------------------------------------
void CzListDlg::OnBnClickedButton1()
{
static int Cnt=6587;
char Str[128];
itoa(Cnt,Str,10);
List.AddString(Str);
Cnt++;
}
BOOL CzListDlg::OnInitDialog()
{
***
List.Create(LBS_OWNERDRAWFIXED|LBS_HASSTRINGS|WS_VISIBLE,CRect(0,0,120,200),this,5000);
***
}
------------------------------------------------
void mList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
pDC->TextOut(0,0,"Hello World");//←本当は、AddStringした文字がほしい
pDC->TextOut(0,0,(char *)lpDrawItemStruct->itemData);
}
void mList::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
lpMeasureItemStruct->itemHeight=30;
lpMeasureItemStruct->itemWidth=120;
// TODO : ここにメッセージ ハンドラ コードを追加します。
}
No.1ベストアンサー
- 回答日時:
MSDNライブラリに載っている例はご覧になりましたか?
http://www.microsoft.com/japan/msdn/library/defa …
描画の仕方は何となくこれでイメージがつかめると思います。
どういうものを描画したいのか、
文章だけでは読み取るのが難しいですが、
多分オーナードローでいいと思います。
おそらく誤解されている点に限って申しますと、
選択に関しては、選択されている部位の色が変わったりとか、
フォーカスの枠線が表示されたりという部分も、
オーナードローの場合、自分でコーディングすることになります。
ですので、リストボックスのアイテム上でクリックなどをしても、
描画していない以上は、画面上ではわかりません。
描画するべきアイテムがあるときにDrawItemが呼ばれるわけですが、
DRAWITEMSTRUCT構造体のメンバであるitemActionやitemStateの値で条件分岐し、
描画するべきアイテムがどういう状態にあるかによって、
塗りつぶす色などを場合分けしなくてはなりません。
この辺は、MSDNの例を見るなり、
実際にこのコードをコンパイルして動きを見れば意味がわかると思います。
また、描画する範囲ですが、
DRAWITEMSTRUCT構造体のメンバであるRECT構造体rcItemに入っています。
この座標を文字や背景、選択の枠などを描画する位置を決めるのに使います。
AddStringで追加した文字列を参照するには、
lpDrawItemStruct->itemDataで合っています。
私も特に詳しいわけではないので、こんな説明しかできません。
回答ありがとうございました。
回答を参考にして
理解を深めることが出来ました。
感謝しています。
難しいですね。
慣れるしかないのでしょうけど。
OnDrawItem DrawItem と複数の関数があったりして、
最初は、???状態です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
MFC ダイアログ上のID取得について
C言語・C++・C#
-
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
-
4
ボタンのオーナードローについて
C言語・C++・C#
-
5
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
6
リストボックスのオーナードローでInsertStringした文字列の取得
C言語・C++・C#
-
7
リストビューで選択行の背景を変える
C言語・C++・C#
-
8
リストビューの選択状態を取得するメッセージはありますか?
C言語・C++・C#
-
9
ダイアログのボタンが押せない
C言語・C++・C#
-
10
エディットボックスの入力制限について
C言語・C++・C#
-
11
コンボボックスの高さを変更したい。
C言語・C++・C#
-
12
MFCでOnPaintのタイミング
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
word
-
TextBoxに文字を書いても表示さ...
-
VB6,リストボックスの特定行の...
-
移動する線を描画したい(何と...
-
タブコントロール上のピクチャ...
-
OnDrawが呼び出されません
-
[VB.net] DataGridViewの列ヘッ...
-
エクセルでガンチャートを作成...
-
C++にて、塗りつぶされた円を描...
-
ASP.NETのパフォーマンス要因
-
C# ラバーバンドの描画を快適に...
-
MFCでOnPaintのタイミング
-
画面リサイズ時のちらつきをな...
-
FPS処理について
-
MFCタブコントロールのグラデー...
-
DirectX9.0での四角形の描画に...
-
CStaticコントロールの静的イメ...
-
WM_SIZEとWM_SIZINGの違い (Win...
-
フォームにビットマップを表示
-
MFC XPでのTextOutのボヤケにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PCで「使用可能な場合はグラフ...
-
[VB.net] DataGridViewの列ヘッ...
-
UpdateData( FALSE); による文...
-
NVIDIAのシェーダーキャッシュ
-
VB6,リストボックスの特定行の...
-
TextBoxに文字を書いても表示さ...
-
word
-
MFCでOnPaintのタイミング
-
エクセルでガンチャートを作成...
-
MFCのタイマーのつかい方を教え...
-
InvalidateRectの使い方について
-
VC++プログラムをつかったBMP画...
-
CScrollViewの使用方法について
-
VB.netでのライン描画方法がわ...
-
CStaticコントロールの静的イメ...
-
Labelの文字をスクロールする際...
-
Form1 Load で実行されない。
-
VBAにGDI+を参照させる方法
-
C++にて、塗りつぶされた円を描...
-
GetGlyphOutline() ご利用経験...
おすすめ情報