この講座って何?
「MFCがなくてもWindowsアプリケーションは作れます」
この講座は「ええっそうだったのっっ!?」という皆さんのためのものです。
最初のWindowsは1985年に作られました。これはVisual C++やVisua Basicが存在するずっと前になります。
Visual C++がないころ、Windows用のアプリケーションはC言語で作製していました。C言語はプログラミング言語のひとつで、Visual C++が使用している「C++言語」の祖先にあたる言語です。
そのC言語のプログラムから、Windowsの機能を操作するための関数、API(Application Programing Interface)を呼び出すことで、ウィンドウの表示や操作を行っていました。
時代は移り、世の中にふたつの新しい開発環境が生まれました。ひとつはVisual Basic、もうひとつはVisual C++。
C言語によるプログラミングは難しく、初心者にはとっつきにくいものでした。それを克服するために作られたのがこのふたつの開発環境です。しかし、このふたつはまったく違うタイプの開発環境だったのです。
アプリケーションの作製を簡略化するため、Visual Basicは特殊な方法を用いました。Visual Basicを使用すると、プログラマーはパーツをつなぎ合わせることでアプリケーションを作製することができます。その手法は、それまでのAPIを使用したプログラムとは全く違います。Visual Basicは、APIやC言語といったものをVisual Basic自身の中に覆い隠してしまったのです。自由度を犠牲にして、手軽さを得たのです。
Visual C++は、それとはまったく違っていました。Visual C++はC++言語という、C言語の上位版を使用しています。C++言語なら、C言語の機能をすべて使うことができます。そこでVisual C++は、C++言語のクラスという機能を用いて、MFC(Microsoft Foundation Class ライブラリ)というクラスの集まりを作り、その中にC言語的な部分やAPIを使用する部分を覆い隠しました。この隠蔽方法は、Visual Basicのようなプログラマーが手の出せない方法ではなく、MFCの中身(ソースプログラム)を見れば分かるものです。つまり、Visual C++は自由度を犠牲にすることなく、手軽さを得たのでした。
時は経ち、Windows95が発売され、多くのソフトウェアが必要となりました。その結果、大量のプログラマーが生まれ、初期のC言語によるアプリケーション作製方法を知らないプログラマーが増えてしまいました。
特に問題だったのは、「簡単にWindowsアプリケーションが作れる」ということでした。
新しい開発環境のほとんどが、簡単にアプリケーションを作製できます。日本語で書かれたチュートリアルに従えば、それなりに完成されたアプリケーションができてしまいます。
ところが、そのチュートリアルの範疇を超えようとすると、APIを使う必要が出てきます。APIの日本語解説は少ないため、必然的に英語のドキュメントを読むことになります。当然「こんなもの読めるかー!!」ということになります。
特にVisual C++ユーザーには苦難がのしかかりました。Visual C++はその自由度にかまけてしまい、簡便さが他の開発環境に遅れを取る形となりました。そのため、Visual C++でさらに良質なアプリケーションを作るためにはAPIについての詳しい知識が不可欠となってしまい、さらにMFCがどのようにAPIを使用しているのか、その関係も知っておかなければならなくなったのです。
つまり、「MFCを使えればいい」という次元から脱出し、「MFCがどのように動いているか知り、必要ならMFCを使わずにAPIを使って機能を実現する」ことが必要となったのです。
この講座は、こういった壁にぶち当たり、プログラミングをあきらめかけている方々へのものです。特に、MFCとAPIの関係を中心に紹介し、「MFCでこうなっているものはAPIではどうなっているのか」ということを見ていきたいと思います。
この講座の目的
この講座の目的は次の3つです。
1. C言語形式のプログラミングに慣れる
MFCから入った場合、普段C++言語しか使わないため、C形式のプログラミングを知らない人も多いでしょう。そのための、簡単な説明をしたいと思います(あくまで簡単に)。
2. APIの仕組みを学ぶ
APIを通して「どうやってWindowsを操作しているのか」ということを説明します。特にハンドルやウィンドウ、デバイスコンテキストについて見ていきたいと思います。
3. MFCの中身を解説する
APIがMFCの中でどのように使われているのかを見ていきます。隠蔽された中身を暴くというのはオブジェクト指向プログラミングの考えとは外れてしまいますが、MFCを使うには不可欠だと諦めて中を見ていくことにしましょう。
この講座についての注意
この講座は、「MFCをまったく使わないプログラムを作る方法」を学ぶものではありません。あくまで、MFCがメインです。MFCがどのようにAPIを利用しているのか、ということを理解してもらうためのものです。「MFCをまったく使わないプログラムを作る方法」を学びたい方には某「猫でも~」をおすすめしておきます。
また、この講座はMFCをある程度使いこなせていると仮定して説明します。つまり、C++言語が使用でき、チュートリアルくらいは簡単にこなせる方々を対象としていますのでご了承下さい。
それと、MFCとAPIの関係については#pragma twiceでもかなり詳しく解説していますので、そちらも併せてご覧ください。