表の作成

[戻る]
藻吉 2007/07/19(木) 00:17:47
いつもお世話になっております。

Win32のアプリケーションで、HTMLのTABLEのような表を作成するにはどのようなコント
ロールを使えばいいのでしょうか?

実現したい用件としては、とある大量データを表形式で出力したいとうものです。
大量といっても多くて5000行×8列程度です。

一応読み取り専用のエディットボックスを動的に作成(CreateWindow)し縦、横に並べて
みたのですが、作成に時間がかかりすぎて使い物になりませんでした。

ちなみにWin32プラットフォームSDKです。
よろしくお願いいたします。

RAPT [HomePage] 2007/07/19(木) 00:23:57
リストビューのレポート形式が一番楽だと思います。
(要するにエクスプローラの詳細表示)

藻吉 2007/07/19(木) 23:27:56
ありがとうございます。
リストビューで表を作成することができました。

一応これで解決といえば解決なのですが(欲している最低限の機能は備えた
デザイン・機能の面で少し不満があるためもう少し質問を継続させてください。

■質問1:背景色、枠線の指定は可能か?
自分で調べたところ背景色やテキストは可能なようでした。
さらに枠線のデザインがHTMLのように柔軟に変えられたらいいな・・・・と

■質問2:テキストの柔軟な選択
セル内のテキストの一部を選択、複数セル内にまたがってテキストを選択
、を行いクリップボードにコピーCTRL+C
リストビューだとそもそもセル単位でしか選択できない?

■質問3:若干話ははずれますが
そもそもHTMLで出力しているテキストにカーソルを置くと、カーソルが矢印から縦線に
変わりテキストが選択できるようになりますが、その機能は自前で実装可能なのでしょ
うか?(コントロールを使わないという意味)
TextOut等のAPIを屈指してできないだろうか?

以上、複数の質問ですみませんがよろしくお願いいたします。

2007/07/20(金) 00:13:32
■質問1
程度によりますが、オーナードローなどで変更できます。
ただし、オーナードローの場合は描画の殆どを自前で行う必要があります。
オーナードロー無しの場合、簡単な色変えしか出来なかったと思います。
■質問2
リストボックスを元にした場合、相当手間が掛かります。
エディットボックスをカスタムするか、自前でコントロールを作成するかしないと難し
いと思います。
注:1つのコントロールに全要素を入れて、枠線などを自前で描画する、というこ
とです
■質問3
カーソルの変更は簡単に可能です。(SetCursor)
テキストの選択は、エディットボックスのほうが良いと思います。

RAPT [HomePage] 2007/07/20(金) 06:38:24
麩さん>
>リストボックスを元にした場合
リストボックスではなく、リストビューです。両者のコントロールは別物です。

藻吉さん>
いずれにしても、容易ではないのは一緒です。
そこまでHTMLにこだわるなら、いっそHTMLビューでも使ったらいかが?

2007/07/20(金) 23:17:10
RAPTさん>リストボックスではなく、リストビューです。両者のコントロールは別物
です。
すいません。書き間違えました。
致命的に違う間違いで申し訳ありません。
どちらもこういう用途に向いていないのは同じなので意識していませんでした…。

藻吉 2007/07/21(土) 22:47:42
麩さん
RAPTさん

いろいろご意見ありがとうございます。
とりあえずリストビューでいろいろ実験してみようかと思います。

あと、
ちょっと思いついたんですが、Excell風のGUIならHTMLのテーブルより簡単に自前で作れ
るかも・・・
WM_LBUTTONDOWNとか屈指して。

まあ、そこまでする気力はないですが・・・・

Ban 2007/07/22(日) 01:47:38
> Excell風のGUIならHTMLのテーブルより簡単に自前で作れるかも・・・

どこまで再現するかにもよりますが、「Excel風」に似せるってのもかなり難易度高いですよ。

「Excelでできてるじゃないか」とか気楽に要求してくるお客さんとかありますが、
MicrosoftがExcelの開発にどれだけの予算と期間をかけてきたのかと…。

とりあえずListViewで事足りるならそれでいいのではないかと思いますが、

Excel風でフルスクラッチやListViewでテーブル作成を頑張るくらいなら、
MSFlexGridで事足りるか検討した方がいいかも。
もしくは、既にあるようにIEコンポーネントでブラウザにしてしまうか。

藻吉 2007/07/22(日) 02:09:18
> どこまで再現するかにもよりますが、「Excel風」に似せるってのもかなり難易度高い
ですよ。

すいません。
「簡単に」は言い過ぎました。

とりあえずリストビューでがんばってみます。

標準のコンポーネントは使いやすいんですが、たまに痒い所に手が届かないときがある
んですよね。
もうちょっと+アルファでこんな機能があればいいのに・・・っていう


ちなみに、「MSFlexGrid」この単語は初めて聞いたのですが・・・・
Windows標準のコンポーネントでしょうか・・・・
ちょっと、ぐぐってみます。

藻吉 2007/07/22(日) 04:48:03
一応以下の方法で完結しそうです。
使用コントロール:リストビュー

デザイン:オーナードロー
機能:セル内のテキスト編集

セル内のテキスト編集は、
WM_LBUTTONDOWNを検出⇒クリックしたセルを特定⇒テキスト編集

実際のテキスト編集方法は以下の二つのどちらかを考えています。

・リストビュー標準のテキスト編集(エクスプローラだとF2で名前変更できる奴)

・動的にセルと同じ大きさのエディットコントロールを生成、編集が終わった時点
(TAB or ENTER or フォーカスを失った)でセルに編集後テキストを適用しエディット
コントロールを破棄。

藻吉 2007/07/22(日) 10:49:47
[[解決]]
とりあえず解決にチェックしときます。

古いスレッドには追加発言できません。