お願いします…
こんな感じで作りたいのですが…
1.空き状況の確認
2.チケットの購入.予約
3.取り消し
4.その他
このような感じで表示され、なおかつ色もつけろと言われました。
どなたか、教えてくださる方いましたらご教授願います
2.チケットの購入.予約
3.取り消し
4.その他
このような感じで表示され、なおかつ色もつけろと言われました。
どなたか、教えてくださる方いましたらご教授願います
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: お願いします…
出力がどういったものかを明示してください。
フォーラムルールに則った質問をお願いします。
サンプルというとこんな感じでしょうか・・・(ライブラリって標準ライブラリかな・・・)
[hr][追記]
おっと、重複してしまいましたね。出力に関してはわかりました。
フォーラムルールに則った質問をお願いします。
サンプルというとこんな感じでしょうか・・・(ライブラリって標準ライブラリかな・・・)
#include <stdio.h>
void main()
{
printf("1.読み込み ");
printf("2.書き込み ");
printf("3.出力 ");
printf(">>");
}
おっと、重複してしまいましたね。出力に関してはわかりました。
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: お願いします…
えっと、色ということですが、それはどういったような色でしょうか??
フォントに標準色以外の色がついてるのか?
それとも、背景に標準色以外の色がついてるのか?
また、出力される文字列ごとにその色は違うのか?
それと、色だけでなく、どの色かも明示してください。
フォントに標準色以外の色がついてるのか?
それとも、背景に標準色以外の色がついてるのか?
また、出力される文字列ごとにその色は違うのか?
それと、色だけでなく、どの色かも明示してください。
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: お願いします…
取りあえず、ConsoleAPIを使ったプログラムを書いてみました。
#include <windows.h>
void main()
{
HANDLE hCout = GetStdHandle(STD_OUTPUT_HANDLE); // 標準出力のハンドルを取得する。
CONSOLE_SCREEN_BUFFER_INFO csbi; // コンソール画面の情報
GetConsoleScreenBufferInfo(hCout, &csbi); // 画面の情報を取得する
SetConsoleTextAttribute(hCout, FOREGROUND_RED); // 前面(文字)を赤に変更
printf("赤\n");
SetConsoleTextAttribute(hCout, FOREGROUND_BLUE); // 青
printf("青\n");
SetConsoleTextAttribute(hCout, FOREGROUND_GREEN); // 緑
printf("緑\n");
SetConsoleTextAttribute(hCout, FOREGROUND_RED | FOREGROUND_GREEN); // or演算で黄色に変更
printf("黄色\n");
SetConsoleTextAttribute(hCout, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY); // FOREGROUND_INTENSITYを指定することで協調表示
printf("強調\n");
SetConsoleTextAttribute(hCout, BACKGROUND_BLUE | BACKGROUND_INTENSITY |
FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN); // 背景を青に変更して強調表示に、文字列は白に
printf("背景強調 ");
SetConsoleTextAttribute(hCout, csbi.wAttributes); // 最初に取得した画面情報の色に戻して終了する(これがないとプログラムが終わっても色が変わったままになってしまう。)
}
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: 皆様
library.c .hを担任からもらったんですよね??red____ さんが書きました:ライブラリは…、よくわかりませんが標準かと思います…
library.c .hは担任からもらい、それを使えと言われました。main.cもサンプルはもらったのですが自分で作れと言われ…
であれば、それは標準ではないですね。(あくまで担任からもらったライブラリがですが・・・)
また、そのライブラリにどういった関数があるのかわからないのでその二つのコードをここに載せていただけますでしょうか??
その際は、codeタグで囲っていただきますようにお願いします。
文字に色をつけるのですね?わかりました。red____ さんが書きました:まずは、どす窓に先程の項目の表示かつ、字に色をつけろというのが指示です…
ではその色の指定はありますでしょうか??
また、平行して普通に表示するプログラムも作ってみてください。
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: お願いします…
[code=c] <== これを、コードの先頭に、(codeタグをつけると以下のように勝手に表示されてしまうので、codeタグの始点の=を全角にしていますが、正しくは半角です。)red____ さんが書きました:無知ですみません…codeタブで囲むとはどのようなことでしょうか…?
#include <stdio.h>
void main()
{
printf("aaa");
}
[/code] <==これをコードの末端に、付けます。
このようにすると、 といった風に表示されます。
了解しました。red____ さんが書きました: 色はアカです…
それでは、返信お待ちしております。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: お願いします…
フォーラムルールという赤い囲みの中に書かれていることをお読みください。red____ さんが書きました:無知ですみません…codeタブで囲むとはどのようなことでしょうか…?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: お願いします…
タグで囲みました。 by softya(ソフト屋)
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <tchar.h>
#pragma comment(lib, "winmm.lib") // mciSendCommand使用
#pragma warning( disable : 4996 )
/********** 休止する **********/
// 引数
// int ms : 休止するミリ秒
//
// 戻り値
// なし
void wait( int ms )
{
_sleep( ms );
}
/********** 乱数を初期化する **********/
// 引数
// なし
//
// 戻り値
// なし
void initrandom( void )
{
srand( (unsigned int)time( NULL ) );
rand();
}
/********** 乱数を得る **********/
// 引数
// int x : 乱数の範囲
//
// 戻り値
// int型:乱数
int random( int x )
{
return (int)((double)rand() / 32768.0 * (double)x);
}
/********** 画面の文字をすべて消す **********/
// 引数
// なし
//
// 戻り値
// なし
void cls( void )
{
COORD coset;
HANDLE hOut;
DWORD dwWritten;
WORD wAttribute;
CONSOLE_SCREEN_BUFFER_INFO cinf;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hOut, &cinf);
coset.X = 0;
coset.Y = 0;
wAttribute = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
if (FillConsoleOutputCharacter(hOut, ' ', cinf.dwSize.X * cinf.dwSize.Y, coset, &dwWritten) ==0)
return;
SetConsoleTextAttribute(hOut, wAttribute);
if (FillConsoleOutputAttribute(hOut, wAttribute, cinf.dwSize.X * cinf.dwSize.Y, coset, &dwWritten) == 0)
return;
return;
}
/********** 文字の色を設定する **********/
// 引数
// int color : 文字の色
//
// 戻り値
// なし
void color( int color )
{
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute( hOut, (WORD)color );
}
/********** 文字描画位置を設定する **********/
// 引数
// int x : Y座標 列 0~79の80行
// int y : x座標 行 0~24の25行
//
// 戻り値
// なし
void locate( int x, int y )
{
HANDLE hOut;
COORD co;
co.X = x;
co.Y = y;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, co);
}
/********** キー入力を得る **********/
// 引数
// なし
//
// 戻り値
// int型:0:上 1:右 2:下 3:左 4:スペース 5:Enter
int getkey( void )
{
int input;
int ret = -1;
/*** キー入力を得る ***/
input = getch();
/*** キーを調べる ***/
/* シフトキーが押されたとき */
if( input == 0 ){
getch();
}
else{
/* カーソルキーが押されたとき */
if( input == 224 ){
input = getch();
switch( input ){
case 72: // 上
ret = 0;
break;
case 77: // 右
ret = 1;
break;
case 80: // 下
ret = 2;
break;
case 75: // 左
ret = 3;
break;
default: // エラー
break;
}
}
else{
/* 一般のキー */
switch( input ){
case ' ': // space
ret = 4;
break;
case 13: // enter
ret = 5;
break;
default:
break;
}
}
}
return ret;
}
/********** 押されているキーを得る(入力待ちなし) **********/
// 引数
// なし
//
// 戻り値
// int型:0:上 1:右 2:下 3:左 4:スペース 5:Enter
int pushkey( void )
{
int input;
int ret = -1;
/*** キー入力が無ければ戻る ***/
if( !kbhit() ){
return ret;
}
/*** キー入力を得る ***/
input = getch();
/*** キーを調べる ***/
/* シフトキーが押されたとき */
if( input == 0 ){
getch();
}
else{
/* カーソルキーが押されたとき */
if( input == 224 ){
input = getch();
switch( input ){
case 72: // 上
ret = 0;
break;
case 77: // 右
ret = 1;
break;
case 80: // 下
ret = 2;
break;
case 75: // 左
ret = 3;
break;
default: // エラー
break;
}
}
else{
/* 一般のキー */
switch( input ){
case ' ': // space
ret = 4;
break;
case 13: // enter
ret = 5;
break;
default:
break;
}
}
}
return ret;
}
/********** ドライブを開く **********/
// 引数
// なし
//
// 戻り値
// なし
void opentray( void )
{
mciSendString( _TEXT("set cdaudio door open"), NULL, 0, NULL );
}
Re: お願いします…
#ifndef __LIBRARY_H__
#define __LIBRARY_H__
#ifdef __cplusplus
extern "C"{
#endif
/*---------------------------------------------------------------------------*/
/* プロトタイプ宣言 */
/*-------------------------------------+-------------------------------------*/
/***** 乱数 *****/
void initrandom( void ); /* 乱数を初期化する */
int random( int x ); /* 乱数を得る */
/***** テキスト制御 *****/
void cls( void ); /* 画面の文字を全て消す */
void locate( int x, int y ); /* 文字描画位置を指定する x:半角幅 y:全角幅 */
void color( int color ); /* 文字の色を設定する(0~255) */
/***** キー入力 *****/
int getkey( void ); /* キー入力を得る(入力待ちあり) */
/* 0:上 1:右 2:下 3:左 4:スペース 5:Enter */
/* 上記以外のキーが押されたら -1 */
int pushkey( void ); /* 押されているキーを得る(入力待ちなし) */
/* 0:上 1:右 2:下 3:左 4:スペース 5:Enter */
/* 上記以外のキーが押されたら -1 */
/***** 他 *****/
void wait( int ms ); /* 休止する */
void opentray( void ); /* CDドライブを開く */
#ifdef __cplusplus
}
#endif
#endif //__LIBRARY_H__
liburary hです。
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: お願いします…
えっと、library.cの方がうまくcodeタグで囲めてないですね。。。
プレビュー機能を使って意図した表示になっているか確認してから投稿していただきますようにお願いします。
取りあえず、サンプルを書いてみました、
それから、このライブラリには、変更した色を元に戻す関数がありませんね。
[hr][追記]
softyaさん>>編集、ありがとうございます。
[修正]
main関数の戻り値をvoidにしていたので修正。
プレビュー機能を使って意図した表示になっているか確認してから投稿していただきますようにお願いします。
取りあえず、サンプルを書いてみました、
#include <stdio.h>
#include "library.h"
#define RED FOREGROUND_RED
int main()
{
color(RED);
printf("Hello World");
return 0;
}
[hr][追記]
softyaさん>>編集、ありがとうございます。
[修正]
main関数の戻り値をvoidにしていたので修正。
Re: お願いします…
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <tchar.h>
#pragma comment(lib, "winmm.lib") // mciSendCommand使用
#pragma warning( disable : 4996 )
/********** 休止する **********/
// 引数
// int ms : 休止するミリ秒
//
// 戻り値
// なし
void wait( int ms )
{
_sleep( ms );
}
/********** 乱数を初期化する **********/
// 引数
// なし
//
// 戻り値
// なし
void initrandom( void )
{
srand( (unsigned int)time( NULL ) );
rand();
}
/********** 乱数を得る **********/
// 引数
// int x : 乱数の範囲
//
// 戻り値
// int型:乱数
int random( int x )
{
return (int)((double)rand() / 32768.0 * (double)x);
}
/********** 画面の文字をすべて消す **********/
// 引数
// なし
//
// 戻り値
// なし
void cls( void )
{
COORD coset;
HANDLE hOut;
DWORD dwWritten;
WORD wAttribute;
CONSOLE_SCREEN_BUFFER_INFO cinf;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hOut, &cinf);
coset.X = 0;
coset.Y = 0;
wAttribute = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
if (FillConsoleOutputCharacter(hOut, ' ', cinf.dwSize.X * cinf.dwSize.Y, coset, &dwWritten) ==0)
return;
SetConsoleTextAttribute(hOut, wAttribute);
if (FillConsoleOutputAttribute(hOut, wAttribute, cinf.dwSize.X * cinf.dwSize.Y, coset, &dwWritten) == 0)
return;
return;
}
/********** 文字の色を設定する **********/
// 引数
// int color : 文字の色
//
// 戻り値
// なし
void color( int color )
{
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute( hOut, (WORD)color );
}
/********** 文字描画位置を設定する **********/
// 引数
// int x : Y座標 列 0~79の80行
// int y : x座標 行 0~24の25行
//
// 戻り値
// なし
void locate( int x, int y )
{
HANDLE hOut;
COORD co;
co.X = x;
co.Y = y;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, co);
}
/********** キー入力を得る **********/
// 引数
// なし
//
// 戻り値
// int型:0:上 1:右 2:下 3:左 4:スペース 5:Enter
int getkey( void )
{
int input;
int ret = -1;
/*** キー入力を得る ***/
input = getch();
/*** キーを調べる ***/
/* シフトキーが押されたとき */
if( input == 0 ){
getch();
}
else{
/* カーソルキーが押されたとき */
if( input == 224 ){
input = getch();
switch( input ){
case 72: // 上
ret = 0;
break;
case 77: // 右
ret = 1;
break;
case 80: // 下
ret = 2;
break;
case 75: // 左
ret = 3;
break;
default: // エラー
break;
}
}
else{
/* 一般のキー */
switch( input ){
case ' ': // space
ret = 4;
break;
case 13: // enter
ret = 5;
break;
default:
break;
}
}
}
return ret;
}
/********** 押されているキーを得る(入力待ちなし) **********/
// 引数
// なし
//
// 戻り値
// int型:0:上 1:右 2:下 3:左 4:スペース 5:Enter
int pushkey( void )
{
int input;
int ret = -1;
/*** キー入力が無ければ戻る ***/
if( !kbhit() ){
return ret;
}
/*** キー入力を得る ***/
input = getch();
/*** キーを調べる ***/
/* シフトキーが押されたとき */
if( input == 0 ){
getch();
}
else{
/* カーソルキーが押されたとき */
if( input == 224 ){
input = getch();
switch( input ){
case 72: // 上
ret = 0;
break;
case 77: // 右
ret = 1;
break;
case 80: // 下
ret = 2;
break;
case 75: // 左
ret = 3;
break;
default: // エラー
break;
}
}
else{
/* 一般のキー */
switch( input ){
case ' ': // space
ret = 4;
break;
case 13: // enter
ret = 5;
break;
default:
break;
}
}
}
return ret;
}
/********** ドライブを開く **********/
// 引数
// なし
//
// 戻り値
// なし
void opentray( void )
{
mciSendString( _TEXT("set cdaudio door open"), NULL, 0, NULL );
}
library.cです。
すごい初歩的な質問で申し訳ありませんが、プログラムを作る上でlibraryは使わないと実行できないのでしょうか?
何のために使ってるかがいまいち理解できなくて…
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: お願いします…
使わないと実行できないです。(libraryの中身を自前で用意したら別ですが・・・)red____ さんが書きました: すみませんでした。
library.cです。
すごい初歩的な質問で申し訳ありませんが、プログラムを作る上でlibraryは使わないと実行できないのでしょうか?
何のために使ってるかがいまいち理解できなくて…
何のためかというと、一度ライブラリの関数内を見て行ってみてください。
すると、中でやってることが難しい関数がいくつかありますね。(たとえばcls関数)
この関数を自力で書くとなると大変じゃないですか??
大変だから、他の人(今回は先生)がライブラリという形にまとめて、使いたい人は、中身を考えずにそのライブラリの関数を呼び出すだけで思いのことができてしまいます。
(つまりは、楽するためです。)
(他にも、ライブラリにする利点は、再利用が効く関数あったらそれを使うたびに中身まで書くのは時間の無駄ですよね??だからライブラリにして後は、呼び出すだけでいいようにするなどがあります。)
[hr][追記]
ん、「何のために使ってるかが今一理解できなくて」というのは、どの処理をするためにということなのかな・・・?
であるなら、color関数を使う(色を変える)ためにです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: お願いします…
コンソールで文字色を変えたりるには、WindowsOSのお世話にならないといけません。
ただ、そのWindowsOSとのインターフェイス関数(WindowsAPIあるいはWin32API)は色々とややこしいので、libraryと言う形で先生が難しいところを隠してくれているのです。
もちろんlibraryを使わずに、WindowsAPIを直接使うことも出来ますがlibrary内に書かれていることは理解できますでしょうか?
ただ、そのWindowsOSとのインターフェイス関数(WindowsAPIあるいはWin32API)は色々とややこしいので、libraryと言う形で先生が難しいところを隠してくれているのです。
もちろんlibraryを使わずに、WindowsAPIを直接使うことも出来ますがlibrary内に書かれていることは理解できますでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: お願いします…
#include <stdio.h>
#include "library.h"
int main( void )
{
int i, j;
int key = 0;
int gyou;
/*** 画面枠を表示 ***/
color(17);
for( i = 0; i < 80 - 1 ; i++ )
printf(" "); /* 半角スペース */
putchar('\n');
for( i = 0; i < 25 - 3; i++ ) {
color(17);
printf(" "); /* 半全角スペース */
color(2);
for( j = 0; j < 80 - 3; j++)
printf(" "); /* 半角スペース */
color(17);
printf(" "); /* 半角スペース */
putchar('\n');
}
color(17);
for( i = 0; i < 80 - 1; i++ )
printf(" "); /* 半角スペース */
putchar('\n');
/*** タイトル表示 ***/
color( 12 ); /* 白文字設定 */
gyou( 15, 3 ); /* [列, 行]で指定 */
printf("画面サンプルタイトル");
/*** サブメニュー表示 ***/
color( 11 );
gyou( 20, 6 ); /* [列, 行]で指定 */
printf("1.サブメニュー");
gyou( 20, 8 ); /* [列, 行]で指定 */
printf("2.サブメニュー");
gyou( 20, 10 ); /* [列, 行]で指定 */
printf("3.サブメニュー");
gyou( 20, 12 ); /* [列, 行]で指定 */
printf("4.サブメニュー");
gyou( 20, 14 ); /* [列, 行]で指定 */
printf("5.サブメニュー");
color( 15 );
gyou( 20, 17); /* [列, 行]で指定 */
printf("9.終了");
/*** 画面クリア ***/
color(7); /* 白文字設定 */
gyou( 20, 21 ); /* [列, 行]で指定 */
printf( "Hit any key (clear screen)" );
/* 入力待ちとして使う(値はどうでもいい) */
key = getkey();
/* 画面のクリア */
cls();
gyou( 0, 0 ); /* [列, 行]で指定 */
return 0;
}
Re: お願いします…
すいません。間違えました
こっちが正しいサンプルです
これに似た感じで良いので作りたいのですが…作り方がいまいちわかりません…ご教授お願いします
こっちが正しいサンプルです
#include <stdio.h>
#include "library.h"
int main( void )
{
int i, j;
int key = 0;
/*** 画面枠を表示 ***/
color(17);
for( i = 0; i < 80 - 1 ; i++ )
printf(" "); /* 半角スペース */
putchar('\n');
for( i = 0; i < 25 - 3; i++ ) {
color(17);
printf(" "); /* 半全角スペース */
color(2);
for( j = 0; j < 80 - 3; j++)
printf(" "); /* 半角スペース */
color(17);
printf(" "); /* 半角スペース */
putchar('\n');
}
color(17);
for( i = 0; i < 80 - 1; i++ )
printf(" "); /* 半角スペース */
putchar('\n');
/*** タイトル表示 ***/
color( 12 ); /* 白文字設定 */
locate( 15, 3 ); /* [列, 行]で指定 */
printf("画面サンプルタイトル");
/*** サブメニュー表示 ***/
color( 11 );
locate( 20, 6 ); /* [列, 行]で指定 */
printf("1.サブメニュー");
locate( 20, 8 ); /* [列, 行]で指定 */
printf("2.サブメニュー");
locate( 20, 10 ); /* [列, 行]で指定 */
printf("3.サブメニュー");
locate( 20, 12 ); /* [列, 行]で指定 */
printf("4.サブメニュー");
locate( 20, 14 ); /* [列, 行]で指定 */
printf("5.サブメニュー");
color( 15 );
locate( 20, 17); /* [列, 行]で指定 */
printf("9.終了");
/*** 画面クリア ***/
color(7); /* 白文字設定 */
locate( 20, 21 ); /* [列, 行]で指定 */
printf( "Hit any key (clear screen)" );
/* 入力待ちとして使う(値はどうでもいい) */
key = getkey();
/* 画面のクリア */
cls();
locate( 0, 0 ); /* [列, 行]で指定 */
return 0;
}
Re: お願いします…
一番はじめに
>簡単なもので良いので例などがあれば参考にしたいと思ってます。
>どなたか、サンプルを見せていただけないでしょうか…?
で始まって、上記に簡単どころかとても親切なコメント付きのサンプルがある訳ですが
少しでも理解しようと解読の努力をなさった結果、いまいちわからないのでしたら
サンプルのどこがいまいちわからないのかを具体的に書いて、教えを請いましょう。
「いまいち」だから、すべてがわからない、何を聞いてよいかもわからない訳ではないですよね?
>簡単なもので良いので例などがあれば参考にしたいと思ってます。
>どなたか、サンプルを見せていただけないでしょうか…?
で始まって、上記に簡単どころかとても親切なコメント付きのサンプルがある訳ですが
少しでも理解しようと解読の努力をなさった結果、いまいちわからないのでしたら
サンプルのどこがいまいちわからないのかを具体的に書いて、教えを請いましょう。
「いまいち」だから、すべてがわからない、何を聞いてよいかもわからない訳ではないですよね?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: お願いします…
libray.cにある関数をサンプルプログラム内に展開してみると少しは分かると思います。
ただ、長くなるのとWin32APIは初心者にはかなり難度が高いと思います。
libray.cのcolor関数なら次のような内容ですね。
「GetStdHandle 関数」
http://msdn.microsoft.com/ja-jp/library/cc429347.aspx
「SetConsoleTextAttribute 関数」
http://msdn.microsoft.com/ja-jp/library/cc429756.aspx
ただ、長くなるのとWin32APIは初心者にはかなり難度が高いと思います。
libray.cのcolor関数なら次のような内容ですね。
void color( int color )
{
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute( hOut, (WORD)color );
}
http://msdn.microsoft.com/ja-jp/library/cc429347.aspx
「SetConsoleTextAttribute 関数」
http://msdn.microsoft.com/ja-jp/library/cc429756.aspx
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: お願いします…
理解できてないとのことですが、それはどのあたりがでしょうか?red____ さんが書きました: library内は理解できていないのが現状です…どういう風に理解を深めて行くのがいいのでしょうか…?
理解を深めるためには一行一行にコメントを付けて行ってみてください。
(と言っても、ConsoleAPIを使ってるところがあるので、それ系の知識が必要なのですが・・・)
#include <stdio.h>
#include "library.h"
int main( void )
{
int i, j;
int key = 0;
/*** 画面枠を表示 ***/
/* 画面を用意する */
{
/* 画面の枠(上) */
{
color(17); // 背景色を青に
for( i = 0; i < 80 - 1 ; i++ ) // 79回スペースを出力する
printf(" "); // スペースで枠を表現
putchar('\n');
}
/* 画面の枠(真ん中) */
{
for( i = 0; i < 25 - 3; i++ ) {
color(17); // 背景色を青にして(文字色も一応青)
printf(" "); // スペースで枠を表現(先頭)
color(2); // 背景色を黒・文字色を緑にする(文字色を緑にする意図は不明)
for( j = 0; j < 80 - 3; j++)
printf(" "); //半角スペースで中の部分を表現
color(17); // 背景色を青にして(文字色も一応青)
printf(" "); // スペースで枠を表現(終末)
putchar('\n'); // 次の行へ
}
}
/* 画面の枠(下) */
{
color(17); // 背景色を青に
for( i = 0; i < 80 - 1; i++ ) // 79回スペースを出力する
printf(" "); // スペースで枠を表現
putchar('\n');
}
} // ここまでは画面の用意をしているので出力する内容とはさして関係がない
/* 出力 */
{
/*** タイトル表示 ***/
color( 12 ); /* 白文字設定 */ // ←赤文字(輝)
locate( 15, 3 ); // 左から15文字目、上から3行目の位置から
printf("画面サンプルタイトル"); // 出力
/*** サブメニュー表示 ***/
color( 11 ); // 文字色を水色(輝)に変更
locate( 20, 6 ); // 20, 6の位置に
printf("1.サブメニュー"); // 出力
// 以下略
locate( 20, 8 ); /* [列, 行]で指定 */
printf("2.サブメニュー");
locate( 20, 10 ); /* [列, 行]で指定 */
printf("3.サブメニュー");
locate( 20, 12 ); /* [列, 行]で指定 */
printf("4.サブメニュー");
locate( 20, 14 ); /* [列, 行]で指定 */
printf("5.サブメニュー");
color( 15 );
locate( 20, 17); /* [列, 行]で指定 */
printf("9.終了");
} // ここを変更することで、出力する内容をを変更できる
// 入力待ちにする
color(7); /* 白文字設定 */
locate( 20, 21 ); /* [列, 行]で指定 */
printf( "Hit any key (clear screen)" );
/* 入力待ちとして使う(値はどうでもいい) */
key = getchar();
// 以降は画面の後始末をしている。
/* 画面のクリア */
cls();
locate( 0, 0 ); /* [列, 行]で指定 */
return 0;
}
50行目~71行目を変更すると、出力する内容を変更することができます。