いつもはウェブプログラミングのコツを中心に書いていますが、今日はちょっと趣向を変えて、普通の 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 言語を覚えたての人でも真似しやすいですし、見た目に面白くなるので是非試してみてください。
