GUIでcui的な入力をしたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

GUIでcui的な入力をしたい

#1

投稿記事 by » 15年前

 今、CUIのプログラムをGUIに移植したいと思い
四苦八苦しているところです。とりあえず、その最初の段階として
入力をどうやって受け付けるかが問題になりました。

 CUIのほうではキーボードから値を読み取ってそれをもとに
また何かやるようにしてあります。で、それをGUIで実行させるとき
それをどうやって実装したらよいかわかりません。

 一応、CreateWindowを"EDIT"で作って、それに出力と入力を
使用と考えたのですが、それだと、ユーザーが勝手に出力した文まで消せて、
さらに、どうやれば入力したのを受け取れるかが分かりませんでした。
(EDIT内の全部の文字列を読み込み、出力した文字列と比較して変化のあった
部分だけ取り出そうかとも思いましたが、それだと、文字を消去されたときに
動作がうまくいかなそうなので詰まりました。)

 上の文ではわかりづらいと思うのですが、
要は、GUIにおいてCUI的な入力と出力をしたいのです。

 Cのレベルは文字列操作とポインタがつたないですが、
一応入門書は終えてGUIでオセロを作れるくらいのレベルです。

win32APIの使用でお願いします。DxLibは無しです。
WindowsXP VB2008++

 朝で急いで質問しているので、不足等あるかもしれませんが
よろしくおねがいします。

たかぎ

Re:GUIでcui的な入力をしたい

#2

投稿記事 by たかぎ » 15年前

手っ取り早いのは、AllocConsoleでコンソールを作って、SetStdHandleなり、freopenなりで標準入出力を設定してください。

シエル

Re:GUIでcui的な入力をしたい

#3

投稿記事 by シエル » 15年前

あまり言ってる意味がわかりません。

入力されたテキストはGetWindowTextで取得できると思います。
あとはそのテキストをsprintfなどでくっつけるなりして、利用するだけです。

その文字数もGetWindowTextLengthで取得できます。

バグ

Re:GUIでcui的な入力をしたい

#4

投稿記事 by バグ » 15年前

ようするに、改行した行は編集させたくないって事?

へろりくしょん

Re:GUIでcui的な入力をしたい

#5

投稿記事 by へろりくしょん » 15年前

入力用のエディットコントロールと、出力用のエディットコントロールに切り分けるのは無しですか?

Re:GUIでcui的な入力をしたい

#6

投稿記事 by » 15年前

>たかぎさん
 すみません、書いていませんでしたが、プロンプトは出せる環境ではありません。

>シエルさん
 そうですよね、意味がわかりませんよね。自分で読み直してみてもそう思います。申し訳ありません。
GetWindowText等を使うと確かにEDITからの文字列の取得はできるのですが、それだと、EDIT内の文字列が消去されることを防げそうになく、断念しました。

>バグさん
 えぇと、それが最も近いです。プログラム側で表示させたものは一切消せないようにして、ユーザーが入力する値だけはEnterを押すまでは自由にユーザー自身が書きなおしできるようにしたいです。

>へろりさん
 おおぅ、それは全く考えてもいませんでした。確かに2分割するならば、かなり簡単にうまくいきそうです。出力用のコントロールだけなら、書き換えを不可にするのもできそうです。ただ、現在でもwindowを二分割してしまっているので、さらに分割すると見づらくなりそうなのが怖いです。(NetBook?ぐらいの画面サイズで使うことを前提として組んでいるので)

 説明が明らかに悪かったため、せめて、例だけでも書いてみます。

---------window(コントロール?)------------------
数値を入力してください? =

------------------------------------------------
というようにプログラム側で表示させた後=の後ろにプレイヤーが値を入力できるようにしたいということです。これをEDITコントロールで実行しようとすると、"数値を入力してください?="の部分までバックスペースで消せてしまうので、困っています。これを消せないようにしたいです。

CUIだとprintfで一回表示させたものはユーザー側には消せないようになりますよね?で、そのあとにscanfで値を入力させても、その時には、もうprintfで表示させたものはユーザーは消せないけど、scanfに渡すべき値はエンターを推す前は何度でも修正ができるようになっています。これと同じことをしたいです。

 本当に分かりづらい文章しか書けず、申し訳ありません。が、どうか見捨てることなくお助けください。

シエル

Re:GUIでcui的な入力をしたい

#7

投稿記事 by シエル » 15年前

エディットコントロール内に入力を促す文章を書くのではなく、
ちょっと上のウィンドウ部分に書けば済む話ではないでしょうか?

Re:GUIでcui的な入力をしたい

#8

投稿記事 by » 15年前

>シエルさん
 確かに、そう言われると、そうですね。他によさそうな案がなければ
そんな感じで行ってみることも考えてみます。

ただ、一応出力→入力→出力→入力→出力というように
何回も繰り返し、表示して、出力もある程度の量は出すので、
一つのコントロールにまとめれられた方が、使う側にとっても
楽かなと、それに見た目的にもスマートかと^^;

バグ

Re:GUIでcui的な入力をしたい

#9

投稿記事 by バグ » 15年前

そういうことならば…

1:数値入力を促すメッセージを表示するだけのラベル

2:数値入力用のエディットボックス

3:入力ログ表示用のリストボックス

ってな感じで3つに分割すれば楽かと思いますよ。

シエル

Re:GUIでcui的な入力をしたい

#10

投稿記事 by シエル » 15年前

入力したものはずっと表示させておきたいってことですか?
それでは入力用と出力用のエディットコントロールにわければどうですか?

lbfuvab

Re:GUIでcui的な入力をしたい

#11

投稿記事 by lbfuvab » 15年前

ダイアログベースにしてチャットみたいにすれば実装は楽だと思いますよ。

バグ

Re:GUIでcui的な入力をしたい

#12

投稿記事 by バグ » 15年前

こんな感じ?
WINAPIだと時間掛かるのでC#.NETでささっと書いてみました。
TextBoxに文字を入力してEnterを押すとListBoxに転送されるだけのものです。

へろりくしょん

Re:GUIでcui的な入力をしたい

#13

投稿記事 by へろりくしょん » 15年前

>現在でもwindowを二分割してしまっているので、さらに分割すると見づらくなりそうなのが怖いです。

出力用のエディットコントロールの子ウィンドウで、入力用のエディットコントロールを貼り付ければいいんじゃ無いでしょうか。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃出力用エディットコントロール                ┃
┃                              ┃
┃適当に出力       ┌─────────┐       ┃
┃このあたりで入力を促す>│入力用エディット │       ┃
┃            └─────────┘       ┃
┃                              ┃
┃                              ┃
┃                              ┃
┃                              ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
こんな感じで。

後は入力用エディットコントロールを動かしたり隠したりすればいいのでは。

Re:GUIでcui的な入力をしたい

#14

投稿記事 by » 15年前

 考えもしなかった方法ばかりで、驚きました。
特に、へろりさんのおっしゃる方法は、完全に
盲点を突かれたように感じました。

 たくさんのアドバイスがいただけ、どうにか
形にできそうな感じがしてきました。
本当にありがとうございました。

 また、質問することがあると思うので、その時も
ご協力いただければ幸いです。

閉鎖

“C言語何でも質問掲示板” へ戻る