VisualStudioCommunity2017【C言語】で16色の背景色と文字色をコンソール画面に出力に成功!

 

前回に引き続き背景色がどうしても諦められず・・・

色コードで色々試した結果、

下のような16色の背景色を出力するのに成功しました!

この色は0x0001 などのコードを入力して出力された色から逆にhtmlの色コードのcolor名に当てはめたものです。実際にこの色コードが存在するものかどうかは?です。

 

ソースの中のコメントに記述している【#000080】などのコード色はhtmlの色コードなのでC言語には関係ありませんが、色々コードを使って試している時にわからなくなりそうだったもので記述しました^^;

とりあえず、使いたい時にだけincludeできればいいので、

ヘッダファイルに保存することにしました。

念のため下のソースを試してみると・・・

 

 

無事動作確認!!

次回は、本題のメニュー画面作成に入りたいと思います。
にほんブログ村 IT技術ブログへ

C言語で業務系のシステムを作ってみよう!メニュー画面の文字に色を付ける

前回に引き続き、文字に色を付けてみたいと思います。

前回できたのは、下の画面なんですが、これでは白と黒だけでDOS画面そのものの表示でつまらないので、今回はこれに色を付けたいと思います。

文字に色を付ける

VisualStudioでは、色のエスケープシーケンスはサポートされていないようで四苦八苦^^;

WindowsのDOSのみ有効な手段みたいなので、こちらのサイトを参考に追記させてもらいました。

 

まず、通常の色で試すと下の画像のようにシアンも赤も暗めでくっきりとならなかったので

FOREGROUND_INTENSITY“を使って強調したのは下のソースです。

すると、こんなにくっきりと文字が明るくなりました。

 

文字の色の作り方

 

RBGカラー光の三原色を混ぜて表示してみました。

 

 

 

SetScreenTextAtrribute関数を使うと背景色に色が付けられるとのことで調べてみた結果

コンソール プロセスを生成して標準ハンドルをリダイレクトする方法

Microsoftのサポートにありました。

HANDLE hStdInput = GetStdHandle(STD_INPUT_HANDLE);//子プロセスの標準入力ハンドル HANDLE hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);//子プロセスの標準出力ハンドル HANDLE hStdError = GetStdHandle(STD_ERROR_HANDLE);//子プロセスの標準エラー ハンドル

 

注意:printf() や fprintf() などの C ランタイム関数を使用する子プロセスでは、リダイレクトを行うと処理速度が低下する場合があるそうです。

 

文字の背景色を設定する時の書き方

おそらくこれでいいはずなんだけど・・・

背景色がなかなか設定できない^^;

マイツールみたいにスマートに記途ができれば・・・

そう言えば、マイツールは沢山のDLLファイルがありそのDLL名がマイツール独自の関数(命令)でしようしていた関数名COM.DLLのようなファイル名が沢山あることから、推測にしか過ぎないがDLLファイル名にはマイツールで使っていた独自の関数をDLLに保存し、ユーザーが通常使用する画面にダイレクトに関数を入力することによりプログラムが動くしくみになっていたのでは・・・と勝手に推測しています。

VisualStudioでDLLの作成できそうなので、唯今模索中ですφ(..)

 
にほんブログ村 IT技術ブログへ

・・は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません

VisualStudio 2017 Community で 新規ファイルを作って

ソースコードを書きデバッグすると、

「Project1\Debug\Project1.exeは内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません」と表示が・・・

 

 

一旦、ソフトに何か不具合でもあったのか?と思いアンインスールしてもう一度インストールし直して、みれど同じ現象が・・・

もう一度、初歩から・・・と思い

おまじないの何もしないソースを書いてみることに・

今度は、一気にソースを書かずに初歩的な何も実行しないプログラムのソースを記入してデバックなしで開始をクリックすると「このプロジェクトは最新でありません。ビルドしますか?」となるので、「はい」をクリックすると

 

今度は、大成功!!

ちなみに成功しなかった方と成功した方のフォルダを比べると・・・Project1の中身に変わりはなかったのですが・・・

 

 

Debugフォルダの中身が・・・^^;

 

これでは、エラーがでて当たり前ですね・・・