アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。Win32のリストコントロールについて質問です。

リストコントロールでアイコン表示で使用しています。
リストコントロールでアイコンをたくさん表示させると、縦幅に入る範囲で
アイコンが複数行表示され、入らないアイコンは横スクロールさせることで
表示できますが、これを縦スクロールベースにはできないものでしょうか ?

A 回答 (1件)

 こんばんは。

要するに、

 →
 [0][1]
 [2][3]
 [4][5]
 [6][7]

 ではなく、
 ↓
 [0][4]
 [1][5]
 [2][6]
 [3][7]

 の様にして追加していきたいと言う事なのでしょうか。
 もしかしたら、ダイアログエディタでリストコントロールの「配置」を「上端」に設定すれば望みどおりの効果が出るかもしれません。
 
 其れでも違うのであるのならば、アイコン表示ですと、カラムの効果が無効になるので、縦に向かって追加していくと言う事は出来ないです(レポートスタイルでないと効き目が無い)。
 http://wisdom.sakura.ne.jp/system/winapi/common/ …

 ただ、LVM_SETITEMPOSITIONを実行すると、任意の位置に並べ替えれるので、其れを利用して、縦に向かって並べて、次の列の真上に折り返す、と言った事は出来ます。

 以下のマクロを使った方が楽かもしれません。
 ListView_SetItemPosition(hList/*リストコントロールハンドル*/, itemPosition/*アイテム番号*/, xPixel/*x位置*/, yPixel/*y位置*/)

 以下は30個のアイテムを縦並べ、2列に配置しなおします。参考程度に。

//取りあえず30個アイテムを作る
LVITEM item = {LVIF_TEXT};
TCHAR buf[80];
TCHAR text[128];
for(item.iItem = 0; item.iItem < 30; ++item.iItem)
{
::wsprintf(buf, "%d", item.iItem);
::_tcscpy(text, TEXT("ITEM"));
::_tcscat(text, buf);
item.pszText = text;
ListView_InsertItem(hList, &item);
}

//並べなおし
const int ICONSIZE = 48;//アイコンのサイズ48x48とする
const int COLUMN = 2;//列
for(int y = 0, itemCount = 0; y < (item.iItem / COLUMN); ++y)
{
for(int x = 0; x < COLUMN; ++x)
{
ListView_SetItemPosition(hList, itemCount++, x * ICONSIZE, y * ICONSIZE);
}
}
//アイテムの個数によっては余って並べきれないので、此処でどうにかする
    • good
    • 0
この回答へのお礼

こんにちは。
ご返答ありがとうございます。

「配置」を「上端」に設定したところ希望通りの表示なりました。
多少カスタマイズも必要なときも提示していた出した ListView_SetItemPosition を利用すればできそうです。

ありがとうございました。
助かりました。

お礼日時:2009/06/05 11:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!