はじめまして。どうぞよろしくお願いいたします。
超々初心者的な質問で申し訳ないのですが、VisualC++6.0で、メインのプログラムをどこに書
いて良いのかがわからないのです。
私はCの基本だけは理解しておりますので、上から下に流れるような、Win32 Console
Applicationは作製出来るのですが、WindowsベースのMFC AppWizardでスケルトンを作った
後、たとえばゲームのプログラミングをするときに、メインの処理をするプログラムをどこに書
けばよいのか解らないのです。
一応、さまざまな本を読んでいるのですが、マウスをクリックや、イベントが起きてメッセージ
を受け取った場合に線画するというようなプログラムは解るのですが、それらをコントロールす
るメインのプログラムをどこに書けばよいのかが解りません。
どうぞ、初心者の中の初心者にヒントをください。よろしくお願いいたします。 m(_ _)m
もるもる
>>んさんのではわかりにくすぎるのでないですか行った先の地図も多少つけてくださいよ!
参考文献いろいろ持っているようなので
まずドキュメントクラス(XXXDOC.CPP)についてどんなこと出来るか
分かっていますか?
次にビュークラス(XXXVIEW.CPP)はなにをすることが出来るか分かっていますか?
つぎにMFCの関数名命名規約がどうなっているか分かりますか?
たとえばWM_CTRL(確かこうだったかな・・・?)がOnCtrlにつながっているとか?
こんなの勉強してみてください
んさま、masaさま、早速のご返信、本当にどうもありがとうございます。
んさま、
早速、「猫でもわかるプログラミング」をよく見てみます。
ありがとうございました m(_ _)m
masaさま、
ドキュメントクラスに関しましてはアプリケーションであつかうデータを記載する場所、ビュー
クラスに関しましては表示関連のプログラムを記載する場所というふうに理解しております。
(あくまで全体的な流れでという意味ですが・・・)
たとえば、ビュークラスに関しては、なんらかのイベント等が発生し、それに対応するプログラ
ムを、たとえばOnDraw関数内に書いておけば、その条件通りに表示がされるということは理解
し、実行出来ています。
ただ、関数名命名規約に関する事と、WM_CTRLがOnCtrlにつながっているということは
分かりませんでした。勉強してみます。
>>それらをコントロールするメインのプログラムをどこに書けばよいのかが解りませ
ん。
とは、SDKなどのWinMainをオーバーライトしメッセージループを処理したい
と言うことでしょうか
MFCの場合WinMainは隠されているので、イベントメッセージに対応する関数
を記述すればそれなりの動作をしてくれますがカプセル化されたものすべての制御すべ
てを知りたいのであればSDKプログラミングしたほうがよいのではないでしょうか
SDKでは、恥ずかしながら作業したことがないのでこれ以上のことかけません
ごめんなさい
woodさま、親切にお答えいただき本当にありがとうございます m(_ _)m
はい。実は最初の内は古いCの考え方が頭にあったため、ついmain関数を書くつもりで、メイ
ンのプログラムをどこに書けば良いのか分からなかった訳です(^^;
しかし、インターネットなどを駆使して調べれば調べていくほど、winmain関数はあるがそこに
書くという訳ではなく、制御する(ウインドウズからくるメッセージに対応する)関数を、それ
ぞれの場所に追加していくという形でプログラミングしていく・・・という理解に進んでいます
が、それでよろしいのでしょうか?
私の頭の中には、woodさまがおっしゃられたようなプログラミングの流れがあった訳ですが、
どちらかというと、それは特殊であったり、あまり一般的ではないということなのですか?
皆さまは、先ほどのような関数を追加していく方法で、ウインドウズのアプリケーションをプロ
グラミングされているのでしょうか?
私は最初SDKから入ったため、MFCを始める時は苦労しました。
theAppというインスタンスから全てが始まっているということに気づくまで、
かなりの時間がかかりました。
プログラムは、どこから始まるのか!?
かなり悩みました。
> 皆さまは、先ほどのような関数を追加していく方法で、ウインドウズのアプリケーションを
> プログラミングされているのでしょうか?
>
基本的にはそうやっていることになるんだと思います。
私は、大型汎用機のCOBOL言語出身です
仕事が身の回りで少なくなったころにVC1.0を使いマイクロソフトに
無償で聞ける30日間でC言語のことを聞いて誰にも教えてもらえず
C++の機能を使わずDOSアプリ(ソースファイル名だけCPPでしたけど)を作っ
ていました
ここまではメイン処理のなかでプログラム制御をすることしか頭にありませんでした
WINDOWS用のDOSアプリをと思って今でも学習中ですが
取り合えづ「INSIDE Visual C++ 4.0」を意味もわからず
3~4回完読した上でMFCはじめました
多分ですけど、win3.1くらいから始めていてVC2.0くらいから知っている人
やボーランドなどのコンパイラを知っている人はSDKの方が詳しいのではないかと思
われます
私のように、実際に動くものになったのがVC4.0以降のものしか
使えない人はMFC以外よくわからない人が多いと思います
イベントについては、汎用機のオンライン業務にある程度重ね合わせて学習できそうな
ので何とか、やってますけど、技術的には全体の数百万分の1しかわかっていないのだ
と思います
お互いがんばりましょう
おはようございます、woodさま
凄いですねー。COBOLですか。では、実際の英語も得意なのではないですか?
高校時代のクラブの教師が、「COBOLが英文だ! COBOLをプログラミング出来る人間
は間違いなく英語が得意だ」と言っていたのを思い出します(^-^)
私の場合、PC8001mk2、FM-NEW7のBasicから始まり、Cになり(古い頃のCです)、そしてず
ーっと期間が開いていたという感じです。その次がいきなりVisual C++6.0ですから、本当に
sugarさまのおっしゃった通り、どこから始まるのかが、さっぱり分からなかったのです(今も
よく分かってはおりませんが(笑))
あのVisual C++6.0のスケルトンを作ってくれる機能は慣れると本当に本当に便利なのでしょう
が、つい、すべてを作ってすべてを制御するという頭から見てしまっていたために、分からなか
った感じがします。
6冊ばかりVisual C++6.0に関する本を買い込みましたが、実際のソースがどこから始まってど
ういうふうに流れているとか、頭の中にこれをしたいという構想があるのにそれをどうやって記
載してよいのか分からないという所で苦労しておりました。
ただ、不思議な事ですが、ここ最近インターネットや本やらで勉強していくうちに、昨晩が分か
らなかった事でも、次の朝にはこういう事だったのかな? という具合にパズルがはまっていく
ような感じで、ホンの少しづつですが、理解が進んでいっているような感じがしています(あく
までホンの少しなんですが・・・)
皆様がとても親切にお答えくださるので、本当に本当にありがたいです。ありがとうございま
す m(_ _)m
どうも、クリリンです。
内容がそれるかも知れませんが、追加質問です。
sugar さんがおっしゃっていた
「theAppというインスタンスから全てが始まっているということ」とありますが、
「theApp」とは何ですか?「CxxxApp」内であれば、基本クラス内のメンバ変数や、メンバ関数
が使用できるのがわかるのですが、別のクラスから「theApp」を使用するとコンパイルをかけ
た時、「定義されていない識別子です。」となります。
どうやって、この変数を別のクラスで使用できるのでしょうか?
また、同じ内容かもしれませんが、グローバル変数はどうしたら使用できるのでしょうか?
>「theApp」とは何ですか?「CxxxApp」内であれば、基本クラス内のメンバ変数や、
> メンバ関数が使用できるのがわかるのですが、別のクラスから「theApp」を使用すると
> コンパイルをかけた時、「定義されていない識別子です。」となります。
プロジェクト名が hoge の場合
Choge.cppに
ChogeApp theApp と記述があるはずです。
(ChogeApp*)pApp = (ChogeApp*)AfxGetApp();
で theApp(アプリのインスタンス)のアドレスが取得できます。
(必要なファイルはインクルードすること)
#別の質問は別スレッドで。
>(ChogeApp*)pApp = (ChogeApp*)AfxGetApp();
ChogeApp* pApp = (ChogeApp*)AfxGetApp(); かな。
試してませんので。m(__)m
Bun さん、回答ありがとうございます。
>#別の質問は別スレッドで。
「プログラムを書く場所がわかりません・・・」の関連したものだと思ったもので・・・
すいませんm(__)m
>(ChogeApp*)pApp = (ChogeApp*)AfxGetApp();
と記述した場合は、別のクラスで「pApp->****」で使用したほうが効率がいいので、
[theApp]の利用目的が無いように思われるのですが・・・
>>(ChogeApp*)pApp = (ChogeApp*)AfxGetApp();
>と記述した場合は、別のクラスで「pApp->****」で使用したほうが効率がいいので、
>[theApp]の利用目的が無いように思われるのですが・・・
効率の善し悪しの話ではなく
theAppが存在するからpAppが非NULLになるのでしょう。
先にも述べましたが
pAppは アプリケーションの実体である theApp のアドレスを指しているということ。
あまりにも初心者なもので、Bun さんのおっしゃっている、
「pAppは アプリケーションの実体である theApp のアドレスを指しているということ。」の
意味は理解しているつもりなのですが、使い方がよくわからないのです。
ってここで、記述するより、別のスレッドに記述します。