MFCてどこからはじまるですか? – プログラミング – Home

MFCてどこからはじまるですか?
 
通知
すべてクリア

[解決済] MFCてどこからはじまるですか?


けじゅ
 けじゅ
(@けじゅ)
ゲスト
結合: 21年前
投稿: 26
Topic starter  

久しぶりに質問させていただきます。
SDKの勉強をするとWinMan()関数からメインになっているとわかりますが。
MDIやSDIのスケルトンをみてもどこがメインになっているかわからならないので、どう
いうプログラム構成かわかりません、どうしたらわかるのでしょうか?


引用未解決
トピックタグ
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

CxxAppクラスのInitInstance()からではいかがですか?


返信引用
おっちゃん
 おっちゃん
(@おっちゃん)
ゲスト
結合: 21年前
投稿: 11
 

F11を押す。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

最近のMFCによるプログラミングの入門書を言うのを読んだことがないので
もしかしたら書いている本が無いのかもしれませんが、
この辺の一連の流れって入門書に書いていないのですか?

少なくとも一般的にプログラマが記述する必要がある部分で
アプリ起動時に何処が最初に動くかと言う話くらいは書いてあってもおかしくない
と思うんですけれど。

この辺の処理の流れがMSDNのどこかに書いてあったような気がしますが、
位置までは覚えてないです。


返信引用
けじゅ
 けじゅ
(@けじゅ)
ゲスト
結合: 21年前
投稿: 26
Topic starter  

F11を押しました。デバックだと思いますが、内容が理解できないです。
MFCは余分なプログラムが多すぎでないでしょうか


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

SDK プログラムの WinMain さえ、厳密には一番最初ではありません。
SDK プログラムの本当の一番最初は WinMainCRTStartup という関数です。
が、そんなことはどうでもよいことです。
WinMainCRTStartup から WinMain に至るまでのコードにプログラマが手を入れる必要は
なく、むしろ下手にいじると良くないことが起きます。
WinMain が一番最初と覚えておいた方が良いと思います。

MFC の一番最初は CWinApp 派生クラスの InitInstance です。
これも厳密には一番最初ではなく、その前にいろんな処理があります。
F11 を押したときに見られるのは、そのいろんな処理の開始地点、MFC プログラムの本
当の一番最初です。
しかし、そこから InitInstance に至るまでに何をしているかを知る必要はありませ
ん。

SDK の一番最初は WinMain、MFC の一番最初は InitInstance です。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 22年前
投稿: 830
 

そう思うなら MFC 使わなきゃいいだけです。
っていうか、MFC は起動時処理等をカプセル化してくれていて、
我々末端のプログラマはそーいう瑣末なところを(あまり)気にしなくていい
というのが MFC の売りなのだと思うのですが違うのでしょうか?

int main() から入門した我々の世代的には、MFC プログラムって
どこで何をしてるかわかりにくいという点にめっちゃ同意。
コンソールアプリの時は、「システムの関数を自分が呼び出す」のに対して、
MFC などは「自分が作った関数が、システムから呼び出される」という点で
設計概念のパラダイム転換が必要です。ただ、これに対応できたら、
そのときにはああなるほどと納得すると思う。

けじゅさんは、今は MFC の良い入門書を読むべきレベルにあるのでしょう。
「メッセージハンドラが呼び出される」プログラム構造に納得できたら、あとは
どんなメッセージがあって、いつ呼ばれるか、を探せばよいだけです。


返信引用
おっちゃん
 おっちゃん
(@おっちゃん)
ゲスト
結合: 21年前
投稿: 11
 

>デバックだと思いますが、内容が理解できないです。
内容が理解できるように勉強するのです。

http://www.kumei.ne.jp/c_lang/indexmfc.html
一応ここを紹介しておきます。血眼に読みましょう。何か掴めるかもしれません。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

「MFCは余分なプログラムが多すぎでないでしょうか」

この台詞が出てきてしまう時点でC++言語の知識が足りないのではと感じてしまいます。
C++言語においてクラス内の処理をカプセル化し、外部が意識無くても使えるようにする
のは、割と基本的な部分です。
プログラマは、クラス内に隠蔽されている部分を意識せずにオーバーライドすることで
機能の追加を行うことができ、なおかつ、いずれのアプリケーションでも同じ処理で済む
部分はMFCに任せることが出来ます。
MFCを使うと言うことはMFCが提供しているフレームワークを理解し、うまくこれを利用
すると言うことです。

SDKによってアプリケーションを構築していて気が付いたと思いますが、
実際のところWindowsのアプリケーションには決まりきった定型の部分があります。
この定型の部分をうまく隠蔽しているのがMFCだと考えてよいと思います。
SDKとMFCでは、そもそもアプローチ方法が違うわけですから、使う方もそれにあわせて
考え方を変える必要があります。
但し、これはC++言語の知識がきちんと土台にあることが前提です。
C++言語の知識が怪しいのであれば、今一度、C++言語を勉強されることをお勧めします。


返信引用
SUnPac
 SUnPac
(@SUnPac)
ゲスト
結合: 22年前
投稿: 105
 

> MFCは余分なプログラムが多すぎでないでしょうか

MFCというよりAppWizardが、って気がしますよ。
AppWizard使わなくてもMFCは使えるわけで、1から自分て作ったらSDKの物とも対比しやす
いですしね。
私も、最初はMFC+AppWizardから入りましたがチンプンカンプンでしたよ。
SDKからAppWizard未使用でMFCに入ったら結構わかりやすかった。
でも、正直いって、MFCってあまりすきじゃないんですけどね。
引数付きマクロばっかだし・・・

結局、MFCって使わなくてもいいわけで、AppWizardに関しては仕組みを理解するという
意味では使わない方がいいと思います。
あ、別にMFCが便利じゃない、と言っているわけでないですよ。


返信引用
サスライの旅人
 サスライの旅人
(@サスライの旅人)
ゲスト
結合: 21年前
投稿: 21
 

そうです。確かに私は知識が乏しいです。MFCに関しては・・・ゴチャゴチャして理解しがたい
です。ですからウインドウズ用プログラムを組む時はWinAPIを使います。でも逆に言えば、
Visual C++ でも Borland C++ 系でも コンパイルできるソースを書くことができますので、
MFCは使う気にはなれません。って、みなさん(私も含めて)主題から話がずれてますね。これ
くらいにしときましょうね。
>MFCてどこからはじまるですか?
CxxAppクラスのオブジェクトが最初に定義されているところからプログラムが始まります。

CxxApp theApp;

ってところからです。ですから、
CxxApp::CxxApp()
{
//TODO~
//~
}
が、開始位置と考えていいでしょうね。コンストラクタ(初期化)ってことです。ちなみに確
か、これはWinMain関数が実行される前に実行されます。WinMain関数はMFCの中に定義されて
いるので見えないだけなんですね。


返信引用
けじゅ
 けじゅ
(@けじゅ)
ゲスト
結合: 21年前
投稿: 26
Topic starter  

みなさまたくさんの意見ありがとうございます。
とっても参考になりました。
C++をきちんとマスターしSDKをきちんとやり、MFCに挑戦したいとおもいます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました