いつもはウェブプログラミングのコツを中心に書いていますが、今日はちょっと趣向を変えて、普通の C 言語のプログラミングです。


いや、「普通の」 C 言語とちょっと違いますね。



Windows 上の C 言語です



「は?C 言語に Windows 上も何もあるのか?C は C だろ。」



う~~ん。。。C 言語は C 言語なのですけど、Win32 として覚えなくてはいけないお作法がたくさんあるんですよね。学校や自習書で、「はじめての C 言語」 というような本を買ってきて真面目に勉強しても、それだけでは Windows で動かすプログラムができない。ウィンドウ、イベント、Unicode など、Windows に溶け込むための知識、Win32 の知識が必要なんです。というか、実際のところ Win32 上では基本が当然ながら Win32 で、標準の C 言語を動かすために Win32 の上に C のランタイムを乗っけて動かしていると考えます。



まー、ともかく、C 言語を覚えたら次のステップとして、ペゾルト本なんかで勉強しないといけないんです。

(← 懐かしい響きですね!)



ちなみに、私はこんな感じの MS Press の本は、ほとんど原著で読んで、全部自分でコードを書いて理解を深めました。


Advanced Windows 改訂第4版
プログラミングWindows第5版〈下〉Win32 APIを扱う開発者のための決定版! (Microsoft Programming Series)
あと、アメブロで検索しても出てきませんでしたが、Inside COM/COM+, Windows Server-Side Programming などがお奨めなのですが・・・

と、、、思わず、ごちゃごちゃ語ってしまいました。。。



では、いってみましょう!



今日のお題は 「コンソールに書く文字の色を変える」 です。



出来上がりをみてください。






Hello! という文字が緑色で出力されています。



これのやり方は以下の通り。


SetConsoleTextAttribute という API を使って色を指定してあげるだけで OK です。




#define _WIN32_WINNT 0x0501

#include <windows.h>
#include <stdio.h>

int main(int argc, char* argv[]) {

	HANDLE hStdOut = (HANDLE) GetStdHandle( STD_OUTPUT_HANDLE );
	CONSOLE_SCREEN_BUFFER_INFO csbi;

	::ZeroMemory( &csbi, sizeof(CONSOLE_SCREEN_BUFFER_INFO) );

	if( !GetConsoleScreenBufferInfo ( hStdOut, &csbi) ) {
		return 1;
	}
		
	SetConsoleTextAttribute ( 
hStdOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY ); printf("Hello!\n"); SetConsoleTextAttribute ( hStdOut, csbi.wAttributes ); return 0; }


これなら、C 言語を覚えたての人でも真似しやすいですし、見た目に面白くなるので是非試してみてください。