delta-keeperの日記: MFC 6
日記 by
delta-keeper
最近仕事でMFCを使い始めて苦戦中。
まぁ、全くの初めてではなくてマイコンとUSB通信するプログラムを書いたことがあるので素人という訳ではないんだが。
(当時はC++もMFCもよく知らなかった)
Windowsプログラミングって一番身近だけど、一番難しいって思う。
パッと考えるだけで難しいと思うところが思いつく。
・C++の文法をマスターしてないとMFCを使うことがままらなない。
⇒ C++とMFCを同時に学習するのはかなり難しいと思った。
Cしかやったことない人にとってはオブジェクト指向が(ry
・メッセージドリブンのWinProcの存在
⇒ 組み込みでいう状態遷移プログラミングの考え方に近いので違和感なく
とにかくGUIを手に入れようと思うと、いっきにハードルが高くなる。
コンソールアプリは言語仕様の範疇 + システムコールの範疇で理解できるけど、MFCはなんだろう・・・全く違うモノ?
ドキュメント/ビューとか (スコア:2)
Windowsの場合、ドキュメント/ビュー(+コントローラ)の作法とイベントの使い方に慣れる事が必要ですね。
MFCはWindows APIをカプセル化していて内部ではハンドルも使っているというのも意識した方が良いかも。
コンソールアプリとは全くの別物と思った方が良いです。
あっちこっちのソースに少しづつ処理を入れないといけないので面倒ですね。
Re:ドキュメント/ビューとか (スコア:1)
今回の開発ではCWndを継承したクラスを使っていたのですが、CWndのポインタとHWNDをごっちゃに捉えてしまっていてWMが送れなくて困っていました。
( GetSafeHWND()を使うことは先輩から教わった )
イベントを処理するWinProcなんかについても先輩から伝授してもらいました。
お作法 (スコア:1)
各種APIやツールキットを使おうとする際、各々の作法を理解する・慣れるのは大変ですよね。しかも、往々にして他の知識からの類推が利かなかったりするので。
私も最近OpenCVやAndroidアプリ(実装言語はJava)に触れる機会がありましたが、まずどういう概念でAPIが設計されているのかを理解するのが大変でしたし。
Re:お作法 (スコア:1)
確かにお作法とか、面等ですね。
最近、C# とか使いだして、C++ に戻りたくなくなっています。正確には、C++/CLIですが、、、 (こっちは、変な方向に進化したんじゃないかと思う。 MFCとは別世界)
MFCだと、ドキュメント/ビューモデルに慣れる必要があるのですが、結構、ごっちゃにしても何とかなると思った。(あまり、いい加減だと、メンテナンスで苦労する)
→ 画面表示担当と、内部処理担当を分けるイメージで書いていた。多分、それで良いのでは?
ただ、Cと同様にポインタ使いまくりでもなんとかなるので、Cの延長でもなんとかなるのでは? と勝手に言ってみます。
Re:お作法 (スコア:1)
社会人2年目で初めてMFCを使ってGUIを作った時、見よう見まねでメンバ変数を追加したりDDX変数を追加してみたりとC言語の範疇でツール作ってました(オイ
今回はGUIアプリの開発案件だったのでコードは詳しい人に見てもらいながら作りましたが、GUIのコントロールはそれなりにステップ数が掛かるというのは痛感しました。
# 次回、コンソールアプリ相当の見積もり持ってきたら、袋だたきにする所存ですw
Re:お作法 (スコア:1)
作法(考え方とも言う?)はドキュメントに書いてない場合が多いですし、そもそもドキュメントはAPIの仕様しか書いてなくてコーリングシーケンスなんて分からないことが多々あります。
使ったことのある人に聞くのが早いのと、休日に遊んでみるのも手ですね。