たまにはVC++

『Helloウィンドウを作る』
2002.Jun.29

Cゲンガーに俺はなる!

VBではラクラクデザインできたウィンドウ。
何も考えなくても「ほほ〜い」っと誰でも作る事が出来ましたね。
しかし実はVC++だと、とてもx3難しいのです。
なんと、この「ウィンドウ作り」がネックとなってプログラムを止めた人もいるそうです。




なんつって。
いきなり脅かしましたが、慣れればそんなに難しくはありませんよ。
なんたってこの俺が出来てるくらいですから。(ぐはっ)
でも確かに難しくはないですが、それなりに面倒くさいものでもあります。
しかしそれはより細かいプログラムが組めることの裏返しに他なりません。
プログラム経験者の方なら、その意味の大きさが判ると思います。

VBからでは出来なかった事。
むしろVBという高級言語から、低級言語的要素を求める方がおかしいのかもしれせん。
しかしVC++では、そんな「VBからでは面倒くさかった」ことが楽々出来るものもたくさんあります。
C言語になれてしまうと「Cでしかやりたくないっ」なんて事になったりしてね。

ウィンドウを作る

では、ウインドウズプログラムの基本。ウィンドウの作り方です。
ちなみにインデックスの部分にも書いていますが、「月刊ソフト作り!」のような細かい説明はしません。
またC言語はもう出来ている人を対象に書きますので、知らない人にはちょっと難しいかもしれません。
判らない所は、質問をいただければ答えます。

ではまず今回のサンプルソースの全文です。
管理人の得意技(?)「ソース見せてから解説」

サンプルソース(HTML形式)

んーだか、ごちゃごちゃ書いてあります。
ソース本文よりも、コメント文の方が多そうですが、解説です。

まず処理の順序としては以下のような感じです。

ウィンドウクラス構造体に値をセット
    ↓
そのウィンドウクラスの登録
    ↓
ウィンドウを作る
    ↓
メッセージループ
    ↓
ウィンドウプロージャで、各々のメッセージの処理
    ↓
ウィンドウが閉じたらクラスを解除して終了。


こんな感じです。
この順序は、ほとんどのアプリケーションの「テンプレート」となりえる処理です。
あまりいじくる事はないでしょう。
実行結果



コントロールボックスも付いてます。サイズ変更も出来ます。
クリックすればASCII文字が順々に表示されていきます。
なぜなに?
「なぜなに?」という事ですが、まず、

ウィンドウクラスの登録ってやらなきゃダメなの?
ボタンとかラベルとか作る時にも必要なのか?
いいえ。
そこまで面倒臭くはありません。
ボタンやラベル(正確にはスタッティクウィンドウと呼ぶ)は、俗に言う「子ウィンドウ」と呼ばれるものです。
「親」を登録しておけば、子ウィンドウはそれに従属します。
親ウィンドウを作る場合にも、必ずしも必要というわけではありません。
んなもん、しなくてもCreateWindowを呼べば作れます。
でもウィンドウプロージャはどうやって指定するか?
背景とかは?
これらを考えると「しておくのが普通」という感じです。

メッセージって?
メッセージとは、VBでいう「イベント」のことです。
ユーザーが引き起こした時、OSが何かしらを「あなたに」通知したい時。
全てこのメッセージが飛んできます。
メッセージの数はとても膨大です。
正直全部覚えられません。
でもウィンドウプロージャでは、必要な時だけ必要なものをキャッチすれば良いのです。

メッセージループがよく判らねーよ・・・
筆者もよく判りません。(おいおい)
メッセージの事は上で説明しましたね。
このメッセージはウィンドウに直接は飛んできません。
ではどうやってウィンドウに通知するのか?
そこで登場するのが GetMessage関数さんです。
こいつでメッセージを受け取ります。
TranslateMessage関数は、仮想キーコードを文字コードに翻訳する関数です。
仮想キーコードとは、キーボードの認識コードとでもいいましょうか。
そのコードを文字コードに直すだけです。(実はこのサンプルでは必要ありません)
次の DispatchMessage関数さんで、やっとこさメッセージをウィンドウに送りつけます
んでまたメッセージを取得して・・・。
といったループ文です。
つまりこのループがなければ、ウィンドウの操作はおろか、表示すらしません。
終わり
本当に全然説明しませんでした。
「月刊ソフト作り!」もこれくらい楽なら更新頻度高そうですが(ちょっとアータ)

ウィンドウ作り。如何でしたでしょう。
え?難しすぎる?
それは貴方が「ウィンドウの作り方」しか知らないからなんですよ。
これから、いろんなことをやっていく内に楽々覚えていきます。
筆者だって、ついちょっと前まで、貴方と同じ事を思って、同じような疑問を抱いていたんですから。

次回からは、ある意味「チップス」みたいなサンプル紹介になります。
何度も言いますが、このページは「初心者向け」ではありませんので。あしからず。

今回のサンプルソース
c01.lzh(1.84KB)



[先頭ページへ] [次のページへ]

リンクフリー  Copyright (C) K_Yaguchi