GUIでcui的な入力をしたい
GUIでcui的な入力をしたい
今、CUIのプログラムをGUIに移植したいと思い
四苦八苦しているところです。とりあえず、その最初の段階として
入力をどうやって受け付けるかが問題になりました。
CUIのほうではキーボードから値を読み取ってそれをもとに
また何かやるようにしてあります。で、それをGUIで実行させるとき
それをどうやって実装したらよいかわかりません。
一応、CreateWindowを"EDIT"で作って、それに出力と入力を
使用と考えたのですが、それだと、ユーザーが勝手に出力した文まで消せて、
さらに、どうやれば入力したのを受け取れるかが分かりませんでした。
(EDIT内の全部の文字列を読み込み、出力した文字列と比較して変化のあった
部分だけ取り出そうかとも思いましたが、それだと、文字を消去されたときに
動作がうまくいかなそうなので詰まりました。)
上の文ではわかりづらいと思うのですが、
要は、GUIにおいてCUI的な入力と出力をしたいのです。
Cのレベルは文字列操作とポインタがつたないですが、
一応入門書は終えてGUIでオセロを作れるくらいのレベルです。
win32APIの使用でお願いします。DxLibは無しです。
WindowsXP VB2008++
朝で急いで質問しているので、不足等あるかもしれませんが
よろしくおねがいします。
四苦八苦しているところです。とりあえず、その最初の段階として
入力をどうやって受け付けるかが問題になりました。
CUIのほうではキーボードから値を読み取ってそれをもとに
また何かやるようにしてあります。で、それをGUIで実行させるとき
それをどうやって実装したらよいかわかりません。
一応、CreateWindowを"EDIT"で作って、それに出力と入力を
使用と考えたのですが、それだと、ユーザーが勝手に出力した文まで消せて、
さらに、どうやれば入力したのを受け取れるかが分かりませんでした。
(EDIT内の全部の文字列を読み込み、出力した文字列と比較して変化のあった
部分だけ取り出そうかとも思いましたが、それだと、文字を消去されたときに
動作がうまくいかなそうなので詰まりました。)
上の文ではわかりづらいと思うのですが、
要は、GUIにおいてCUI的な入力と出力をしたいのです。
Cのレベルは文字列操作とポインタがつたないですが、
一応入門書は終えてGUIでオセロを作れるくらいのレベルです。
win32APIの使用でお願いします。DxLibは無しです。
WindowsXP VB2008++
朝で急いで質問しているので、不足等あるかもしれませんが
よろしくおねがいします。
Re:GUIでcui的な入力をしたい
手っ取り早いのは、AllocConsoleでコンソールを作って、SetStdHandleなり、freopenなりで標準入出力を設定してください。
Re:GUIでcui的な入力をしたい
あまり言ってる意味がわかりません。
入力されたテキストはGetWindowTextで取得できると思います。
あとはそのテキストをsprintfなどでくっつけるなりして、利用するだけです。
その文字数もGetWindowTextLengthで取得できます。
入力されたテキストはGetWindowTextで取得できると思います。
あとはそのテキストをsprintfなどでくっつけるなりして、利用するだけです。
その文字数もGetWindowTextLengthで取得できます。
Re:GUIでcui的な入力をしたい
>たかぎさん
すみません、書いていませんでしたが、プロンプトは出せる環境ではありません。
>シエルさん
そうですよね、意味がわかりませんよね。自分で読み直してみてもそう思います。申し訳ありません。
GetWindowText等を使うと確かにEDITからの文字列の取得はできるのですが、それだと、EDIT内の文字列が消去されることを防げそうになく、断念しました。
>バグさん
えぇと、それが最も近いです。プログラム側で表示させたものは一切消せないようにして、ユーザーが入力する値だけはEnterを押すまでは自由にユーザー自身が書きなおしできるようにしたいです。
>へろりさん
おおぅ、それは全く考えてもいませんでした。確かに2分割するならば、かなり簡単にうまくいきそうです。出力用のコントロールだけなら、書き換えを不可にするのもできそうです。ただ、現在でもwindowを二分割してしまっているので、さらに分割すると見づらくなりそうなのが怖いです。(NetBook?ぐらいの画面サイズで使うことを前提として組んでいるので)
説明が明らかに悪かったため、せめて、例だけでも書いてみます。
---------window(コントロール?)------------------
数値を入力してください? =
------------------------------------------------
というようにプログラム側で表示させた後=の後ろにプレイヤーが値を入力できるようにしたいということです。これをEDITコントロールで実行しようとすると、"数値を入力してください?="の部分までバックスペースで消せてしまうので、困っています。これを消せないようにしたいです。
CUIだとprintfで一回表示させたものはユーザー側には消せないようになりますよね?で、そのあとにscanfで値を入力させても、その時には、もうprintfで表示させたものはユーザーは消せないけど、scanfに渡すべき値はエンターを推す前は何度でも修正ができるようになっています。これと同じことをしたいです。
本当に分かりづらい文章しか書けず、申し訳ありません。が、どうか見捨てることなくお助けください。
すみません、書いていませんでしたが、プロンプトは出せる環境ではありません。
>シエルさん
そうですよね、意味がわかりませんよね。自分で読み直してみてもそう思います。申し訳ありません。
GetWindowText等を使うと確かにEDITからの文字列の取得はできるのですが、それだと、EDIT内の文字列が消去されることを防げそうになく、断念しました。
>バグさん
えぇと、それが最も近いです。プログラム側で表示させたものは一切消せないようにして、ユーザーが入力する値だけはEnterを押すまでは自由にユーザー自身が書きなおしできるようにしたいです。
>へろりさん
おおぅ、それは全く考えてもいませんでした。確かに2分割するならば、かなり簡単にうまくいきそうです。出力用のコントロールだけなら、書き換えを不可にするのもできそうです。ただ、現在でもwindowを二分割してしまっているので、さらに分割すると見づらくなりそうなのが怖いです。(NetBook?ぐらいの画面サイズで使うことを前提として組んでいるので)
説明が明らかに悪かったため、せめて、例だけでも書いてみます。
---------window(コントロール?)------------------
数値を入力してください? =
------------------------------------------------
というようにプログラム側で表示させた後=の後ろにプレイヤーが値を入力できるようにしたいということです。これをEDITコントロールで実行しようとすると、"数値を入力してください?="の部分までバックスペースで消せてしまうので、困っています。これを消せないようにしたいです。
CUIだとprintfで一回表示させたものはユーザー側には消せないようになりますよね?で、そのあとにscanfで値を入力させても、その時には、もうprintfで表示させたものはユーザーは消せないけど、scanfに渡すべき値はエンターを推す前は何度でも修正ができるようになっています。これと同じことをしたいです。
本当に分かりづらい文章しか書けず、申し訳ありません。が、どうか見捨てることなくお助けください。
Re:GUIでcui的な入力をしたい
>シエルさん
確かに、そう言われると、そうですね。他によさそうな案がなければ
そんな感じで行ってみることも考えてみます。
ただ、一応出力→入力→出力→入力→出力というように
何回も繰り返し、表示して、出力もある程度の量は出すので、
一つのコントロールにまとめれられた方が、使う側にとっても
楽かなと、それに見た目的にもスマートかと^^;
確かに、そう言われると、そうですね。他によさそうな案がなければ
そんな感じで行ってみることも考えてみます。
ただ、一応出力→入力→出力→入力→出力というように
何回も繰り返し、表示して、出力もある程度の量は出すので、
一つのコントロールにまとめれられた方が、使う側にとっても
楽かなと、それに見た目的にもスマートかと^^;
Re:GUIでcui的な入力をしたい
そういうことならば…
1:数値入力を促すメッセージを表示するだけのラベル
2:数値入力用のエディットボックス
3:入力ログ表示用のリストボックス
ってな感じで3つに分割すれば楽かと思いますよ。
1:数値入力を促すメッセージを表示するだけのラベル
2:数値入力用のエディットボックス
3:入力ログ表示用のリストボックス
ってな感じで3つに分割すれば楽かと思いますよ。
Re:GUIでcui的な入力をしたい
こんな感じ?
WINAPIだと時間掛かるのでC#.NETでささっと書いてみました。
TextBoxに文字を入力してEnterを押すとListBoxに転送されるだけのものです。
WINAPIだと時間掛かるのでC#.NETでささっと書いてみました。
TextBoxに文字を入力してEnterを押すとListBoxに転送されるだけのものです。
Re:GUIでcui的な入力をしたい
>現在でもwindowを二分割してしまっているので、さらに分割すると見づらくなりそうなのが怖いです。
出力用のエディットコントロールの子ウィンドウで、入力用のエディットコントロールを貼り付ければいいんじゃ無いでしょうか。
後は入力用エディットコントロールを動かしたり隠したりすればいいのでは。
出力用のエディットコントロールの子ウィンドウで、入力用のエディットコントロールを貼り付ければいいんじゃ無いでしょうか。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃出力用エディットコントロール ┃ ┃ ┃ ┃適当に出力 ┌─────────┐ ┃ ┃このあたりで入力を促す>│入力用エディット │ ┃ ┃ └─────────┘ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛こんな感じで。
後は入力用エディットコントロールを動かしたり隠したりすればいいのでは。
Re:GUIでcui的な入力をしたい
考えもしなかった方法ばかりで、驚きました。
特に、へろりさんのおっしゃる方法は、完全に
盲点を突かれたように感じました。
たくさんのアドバイスがいただけ、どうにか
形にできそうな感じがしてきました。
本当にありがとうございました。
また、質問することがあると思うので、その時も
ご協力いただければ幸いです。
特に、へろりさんのおっしゃる方法は、完全に
盲点を突かれたように感じました。
たくさんのアドバイスがいただけ、どうにか
形にできそうな感じがしてきました。
本当にありがとうございました。
また、質問することがあると思うので、その時も
ご協力いただければ幸いです。