MSFlexGridの表示速度 なぜ違う? – プログラミング – Home

MSFlexGridの表示速度 なぜ違...
 
通知
すべてクリア

[解決済] MSFlexGridの表示速度 なぜ違う?


DirtRunner
 DirtRunner
(@DirtRunner)
ゲスト
結合: 17年前
投稿: 7
Topic starter  

こんにちは。
お暇なときに回答いただけるとありがたいです。

VC++2005 WinXP MFC CFormViewでのウインドウ作成です。

MSFlexGrid6.0(ActiveX)をフォームに追加し、セル幅x高さが100x100くらい(画面上で数
mmくらい)で、
セル数が500x500セルくらいの表?を作成しました。
セルには文字を入れるのではなく、セル背景色を変更する形で、
いわばセル背景色でドット絵を描くようなイメージです。

FlexGridのコントロールの大きさは700x700pixelくらいです。
ここで、

m_flexgrid1.put_Col(x);
m_flexgrid1.put_Row(y);
m_flexgrid1.put_CellBackColor(RGB(255,0,0));

x,yに任意の座標を入れつつ上記をループすると、仮に2000チップを塗ろうとすると
えらく時間がかかってしまいました。
塗った後の再描画は十分に早く、コントロールからはみ出た分がスクロールしますが、
そのスクロールもスムースに動きます。

ところが、
this->m_flexgrid1.MoveWindow(grid_x,grid_y,50,50,1);

のように、FlexGridのコントロールの大きさを小さくしてからセル背景色の変更ループを
実行し、

this->m_flexgrid1.MoveWindow(grid_x,grid_y,700,700,1);
として大きさを戻してやると、1秒以内で描画することができました。

とりあえず目的は達成したのですが、なぜそうなるのかがわかりません。
また、描画した後も一部のセル背景色をいろんなイベントのときに
変更することがあります。
そのたびにも、一度FlexGridを小さくしてセル背景色を塗ったほうが早いようです。

なぜいちいちコントロールを小さくする方が早いのでしょうか?
小さくするたびに画面がちらつくので、なにか別の方法があればなお助かるのです
が・・・

よろしくお願いします。


引用未解決
トピックタグ
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

おそらく背景色を変えるたびにコントロールの再描画が発生するのでしょう。
コントロールを小さくすると描画する範囲が狭いのでオーバーヘッドが小さいわけです。
MSFlexGridにはRedrawというプロパティがあるようなので調べてみるとよいでしょう。


返信引用
DirtRunner
 DirtRunner
(@DirtRunner)
ゲスト
結合: 17年前
投稿: 7
Topic starter  

subaruさん>
Redrawプロパティを描画中のみfalseにしたら、
表示領域を変更しなくても高速で再描画できるように
なりました。

this->m_flexgrid1.put_Redraw(false);

//ここで描画ルーチン

this->m_flexgrid1.put_Redraw(true);

ありがとうございます。


返信引用
DirtRunner
 DirtRunner
(@DirtRunner)
ゲスト
結合: 17年前
投稿: 7
Topic starter  

解決チェック忘れました・・・


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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