久しぶりに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]:ドラッグドロップはやりやすいか)
以上、よろしくお願いします。
いまいちよく判りませんが……
>[2] 変数1, 変数2, 変数3 など表示したい変数は事前登録,
> 表示変数は最大100,200程度に。
>[3] 一定周期毎に、変数を表示させるので、
> 以下の表のような感じで表示が追加される。
>[4] スクロールバーをつけて、過去の表示内容にさかのぼりたい。
上記ならListViewのレポートスタイルで処理できませんか?
都度都度アイテム追加していく感じで。
レポートスタイルで
>[5] 変数1, 2 は、ドラッグドロップで列を交換などできると良い
が可能かは…ちょっと忘却ですが。
# 確か可能だった…はず。
アドバイスありがとうございます。
ListView という手段があるのですね。
私は、[Gridコントロール?]がないか?と検索し、
http://www.codeproject.com/Articles/38168/Win-SDK-Data-Grid-View-Made-Easy
が使えるかとサンプル動作させました。
列交換ができるかは未調査です。
まずは回答しました。
ありがとうございます。
>[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
コメントありがとうございます。
>>原理でなくて、利用方法ならば、Win32APIのOutputDebugString()
>>関数に渡した文字列が、出力ペインに表示されます。
>>TRACE()マクロも使えます。書式を指定できるので少し便利ですね。
ご教示の関数、マクロはデバッグ時に利用しています。
出力ウィンドウ実現の原理を知りたかったのです。
Editコントロールでは、出力文字数が65535までだったように思います。
もっと、出力ウィンドウは表示文字数は大きいので、
原理を利用して前記:[おおまかな仕様]を実現できるかと思いました。
現時点では下記の Gridコントロール + ListView で実現できると思っています。
http://www.codeproject.com/Articles/38168/Win-SDK-Data-Grid-View-Made-Easy
> 表示変数は最大100,200程度に。
0.1S間隔でいいのなら一度ファイルに保存する時間もありますね。
ファイル保存と同時にnew等で確保した変数に保存しておく。
表示変数は100件程度、最大でも1000件程度に抑えておいた方が楽だと思います。
スクロール等のイベントでその都度更新する方がいいと思います。
テンプレートの知識があるのなら、vector等に確保して容量固定のlistに似た形式で
処理する方法もありますね。
追伸、
>表示変数は100件程度、最大でも1000件程度に抑えておいた方が楽だと思います。
これは、一列ぶんです。
本件ではマイコン用のエンベッデッドアプリケーションの
デバッグが主眼であるとの認識です。
従って、Windowsシステムデバッガを作っても意味がないと考えられます。
しかも作るのは簡単ではありません。
が、原理を知るのは無駄にはならないでしょう。
以下のページなどが参考になるかもしれません。
http://codezine.jp/article/detail/426
いろいろな情報ありがとうございます。
>>ITO さん
>>0.1S間隔でいいのなら一度ファイルに保存する時間もありますね。
>>ファイル保存と同時にnew等で確保した変数に保存しておく。
>>表示変数は100件程度、最大でも1000件程度に抑えておいた方が楽だと思います。
>>スクロール等のイベントでその都度更新する方がいいと思います。
>>テンプレートの知識があるのなら、vector等に確保して容量固定のlistに似た形式で
>>処理する方法もありますね。
おそらく、5ms~50ms 程度で走らせることになるかと思います。
vector等に確保してやることを考えることになるかと思います。
>>仲澤@失業者さん
>>原理を知るのは無駄にはならないでしょう。
>>以下のページなどが参考になるかもしれません。
>> http://codezine.jp/article/detail/426
ありがとうございます。参考にさせて頂きます。
>> Windowsシステムデバッガを作っても意味がないと考えられます。
エンベデッドシステムなので、最終的には、
マイコン上でソフトを走らせることになります。
しかし、デバイスドライバより上位のアプリケーション層は
論理的な処理だけなので、Windowsシステムデバッガが役に立つことになります。
(マイコンからの信号や割込みは仮想的に入力されるようなていにします)
うーん、
>エンベデッドシステムなので、最終的には、
>マイコン上でソフトを走らせることになります。
大まかなデータはそのままスタンドアロンで液晶表示する。
USB等を繋げれば、全データパソコンで吸い上げることが出来る。
ってことでしょうかね。
>おそらく、5ms~50ms 程度で走らせることになるかと思います。
まずは、0.2Sぐらいまで遅らせてPC上でチェックですね。
エンベデッドシステムなら本当に搭載するOSで作った方がいいですね。