多くの変数 を スクロールバーつけてログ表示するには?

[戻る]
kazu_waka 2015/11/01(日) 13:47:10
久しぶりにWindowsアプリ作成し、困っています。
ご教授頂けると幸いです。質問から先に記載します。

◆質問
◆大まかな仕様、
◆試行錯誤
と記載しました。

◆質問
[1] TextOut関数を使っての
    下記◆大まかな仕様-[3][4] 実現は良い方法でしょうか?
[2] VC++ の出力ウィンドウ表示はどんな方法で
    実現しているのでしょうか?
[3] 他の実現方法があるでしょうか?
[4] コメントあればおねがいします。


◆大まかな仕様
[0]  マイコンに組込むソフト(micon_Swと命名:c言語で作成)の
     デバッグソフトをWin32アプリとして作成する。
     (※micon_Swのハードウェア非依存部の動作をデバッグしたい)

[1]  micon_Sw の main() を スレッドで一定周期で走らせて、
     micon_Sw内で定義された変数を表示。
[2]  変数1, 変数2, 変数3 など表示したい変数は事前登録,  
     表示変数は最大100,200程度に。
[3]  一定周期毎に、変数を表示させるので、
     以下の表のような感じで表示が追加される。
     || は スクロールバーの意味。

        変数1    変数2    変数3  ||
0.1秒    10        2       12    ||
0.2秒    12        3       13    ||
0.3秒    15        7       17    ||
0.4秒    25        4       14    ||
***秒    ##       $$       #%    ||
!!!秒    %%       $#       #!    ||
 ↓      ↓       ↓       ↓    ||

などと下に追加表示されていく。

[4]  スクロールバーをつけて、過去の表示内容にさかのぼりたい。
[5]  変数1, 2 は、ドラッグドロップで列を交換などできると良い
     (大まかな仕様[3],[4]実現後の次ハードル)。 

◆ 試行錯誤
上記、◆大まかな仕様-[3][4] を実現するために、試行錯誤しています。
[1] TextOut関数をつかって、描画として実施。 描画なので、
    ・変数1,2,3,・・・・ の過去のデータを保持する必要あり。
    ・スクロールバーで連動して過去データにさかのぼる必要あり。
[2] 変数1,2,3 毎 に 縦長のEditコントロールでは
    スクロールバーが各列毎に横につくので良くないと思う。
[3] VC++ の 出力ウィンドウ表示のような感じがよいが、
    上記表のような感じではない。
[4] 変数1,2,3 毎 に 子ウィンドウを生成して、
    1つのスクロールバーでスクロールする
    (◆大まかな仕様[5]:ドラッグドロップはやりやすいか)

以上、よろしくお願いします。

瀬戸っぷ [E-Mail] 2015/11/02(月) 14:30:18
いまいちよく判りませんが……

>[2]  変数1, 変数2, 変数3 など表示したい変数は事前登録,  
>     表示変数は最大100,200程度に。
>[3]  一定周期毎に、変数を表示させるので、
>     以下の表のような感じで表示が追加される。
>[4]  スクロールバーをつけて、過去の表示内容にさかのぼりたい。

上記ならListViewのレポートスタイルで処理できませんか?
都度都度アイテム追加していく感じで。

レポートスタイルで
>[5]  変数1, 2 は、ドラッグドロップで列を交換などできると良い
が可能かは…ちょっと忘却ですが。
# 確か可能だった…はず。

kazu_waka 2015/11/03(火) 10:50:36
アドバイスありがとうございます。

ListView という手段があるのですね。
私は、[Gridコントロール?]がないか?と検索し、

http://www.codeproject.com/Articles/38168/Win-SDK-Data-Grid-View-Made-Easy

が使えるかとサンプル動作させました。

列交換ができるかは未調査です。
まずは回答しました。
ありがとうございます。

仲澤@失業者 2015/11/04(水) 16:18:45
>[2] VC++ の出力ウィンドウ表示はどんな方法で
>    実現しているのでしょうか?

原理でなくて、利用方法ならば、Win32APIのOutputDebugString()
関数に渡した文字列が、出力ペインに表示されます。
文末に改行を入れるのをお忘れなく。

https://msdn.microsoft.com/ja-jp/library/cc428973.aspx

TRACE()マクロも使えます。書式を指定できるので少し便利ですね。

https://msdn.microsoft.com/ja-jp/library/4wyz8787(v=vs.90).aspx

kazu_waka 2015/11/04(水) 20:35:50
コメントありがとうございます。

>>原理でなくて、利用方法ならば、Win32APIのOutputDebugString()
>>関数に渡した文字列が、出力ペインに表示されます。
>>TRACE()マクロも使えます。書式を指定できるので少し便利ですね。

ご教示の関数、マクロはデバッグ時に利用しています。
出力ウィンドウ実現の原理を知りたかったのです。
Editコントロールでは、出力文字数が65535までだったように思います。
もっと、出力ウィンドウは表示文字数は大きいので、

原理を利用して前記:[おおまかな仕様]を実現できるかと思いました。


現時点では下記の Gridコントロール + ListView で実現できると思っています。
http://www.codeproject.com/Articles/38168/Win-SDK-Data-Grid-View-Made-Easy

ITO 2015/11/05(木) 09:34:40
>     表示変数は最大100,200程度に。
0.1S間隔でいいのなら一度ファイルに保存する時間もありますね。
ファイル保存と同時にnew等で確保した変数に保存しておく。
表示変数は100件程度、最大でも1000件程度に抑えておいた方が楽だと思います。
スクロール等のイベントでその都度更新する方がいいと思います。
テンプレートの知識があるのなら、vector等に確保して容量固定のlistに似た形式で
処理する方法もありますね。

ITO 2015/11/05(木) 09:39:47
追伸、
>表示変数は100件程度、最大でも1000件程度に抑えておいた方が楽だと思います。
これは、一列ぶんです。

仲澤@失業者 2015/11/05(木) 10:15:38
本件ではマイコン用のエンベッデッドアプリケーションの
デバッグが主眼であるとの認識です。
従って、Windowsシステムデバッガを作っても意味がないと考えられます。
しかも作るのは簡単ではありません。
が、原理を知るのは無駄にはならないでしょう。
以下のページなどが参考になるかもしれません。

http://codezine.jp/article/detail/426

kazu_waka 2015/11/06(金) 20:02:44
いろいろな情報ありがとうございます。

>>ITO さん
>>0.1S間隔でいいのなら一度ファイルに保存する時間もありますね。
>>ファイル保存と同時にnew等で確保した変数に保存しておく。
>>表示変数は100件程度、最大でも1000件程度に抑えておいた方が楽だと思います。
>>スクロール等のイベントでその都度更新する方がいいと思います。
>>テンプレートの知識があるのなら、vector等に確保して容量固定のlistに似た形式で
>>処理する方法もありますね。

おそらく、5ms〜50ms 程度で走らせることになるかと思います。
vector等に確保してやることを考えることになるかと思います。


>>仲澤@失業者さん
>>原理を知るのは無駄にはならないでしょう。
>>以下のページなどが参考になるかもしれません。
>> http://codezine.jp/article/detail/426

ありがとうございます。参考にさせて頂きます。

>> Windowsシステムデバッガを作っても意味がないと考えられます。

エンベデッドシステムなので、最終的には、
マイコン上でソフトを走らせることになります。
しかし、デバイスドライバより上位のアプリケーション層は
論理的な処理だけなので、Windowsシステムデバッガが役に立つことになります。
(マイコンからの信号や割込みは仮想的に入力されるようなていにします)

ITO 2015/11/07(土) 09:30:53
うーん、
>エンベデッドシステムなので、最終的には、
>マイコン上でソフトを走らせることになります。
 大まかなデータはそのままスタンドアロンで液晶表示する。
 USB等を繋げれば、全データパソコンで吸い上げることが出来る。
ってことでしょうかね。

>おそらく、5ms〜50ms 程度で走らせることになるかと思います。
まずは、0.2Sぐらいまで遅らせてPC上でチェックですね。
エンベデッドシステムなら本当に搭載するOSで作った方がいいですね。

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