パスワードを忘れた? アカウント作成
13528943 journal
日記

delta-keeperの日記: MFC 6

日記 by delta-keeper

最近仕事でMFCを使い始めて苦戦中。

まぁ、全くの初めてではなくてマイコンとUSB通信するプログラムを書いたことがあるので素人という訳ではないんだが。
(当時はC++もMFCもよく知らなかった)

Windowsプログラミングって一番身近だけど、一番難しいって思う。
パッと考えるだけで難しいと思うところが思いつく。

・C++の文法をマスターしてないとMFCを使うことがままらなない。
 ⇒ C++とMFCを同時に学習するのはかなり難しいと思った。
   Cしかやったことない人にとってはオブジェクト指向が(ry
・メッセージドリブンのWinProcの存在
 ⇒ 組み込みでいう状態遷移プログラミングの考え方に近いので違和感なく

とにかくGUIを手に入れようと思うと、いっきにハードルが高くなる。
コンソールアプリは言語仕様の範疇 + システムコールの範疇で理解できるけど、MFCはなんだろう・・・全く違うモノ?

この議論は、delta-keeper (31927)によって テキ禁止として作成されたが、今となっては 新たにコメントを付けることはできません。
  • Windowsの場合、ドキュメント/ビュー(+コントローラ)の作法とイベントの使い方に慣れる事が必要ですね。
    MFCはWindows APIをカプセル化していて内部ではハンドルも使っているというのも意識した方が良いかも。
    コンソールアプリとは全くの別物と思った方が良いです。
    あっちこっちのソースに少しづつ処理を入れないといけないので面倒ですね。

    • ハンドルの概念は最初、本当に戸惑いました。

      今回の開発ではCWndを継承したクラスを使っていたのですが、CWndのポインタとHWNDをごっちゃに捉えてしまっていてWMが送れなくて困っていました。
      ( GetSafeHWND()を使うことは先輩から教わった )

      イベントを処理するWinProcなんかについても先輩から伝授してもらいました。
      親コメント
  • by kenketsu (37657) on 2018年02月17日 9時04分 (#3362974) 日記

    各種APIやツールキットを使おうとする際、各々の作法を理解する・慣れるのは大変ですよね。しかも、往々にして他の知識からの類推が利かなかったりするので。

    私も最近OpenCVやAndroidアプリ(実装言語はJava)に触れる機会がありましたが、まずどういう概念でAPIが設計されているのかを理解するのが大変でしたし。

    • by wood377 (46309) on 2018年02月17日 13時35分 (#3363069) 日記

      確かにお作法とか、面等ですね。
      最近、C# とか使いだして、C++ に戻りたくなくなっています。正確には、C++/CLIですが、、、 (こっちは、変な方向に進化したんじゃないかと思う。 MFCとは別世界)

      MFCだと、ドキュメント/ビューモデルに慣れる必要があるのですが、結構、ごっちゃにしても何とかなると思った。(あまり、いい加減だと、メンテナンスで苦労する)
      → 画面表示担当と、内部処理担当を分けるイメージで書いていた。多分、それで良いのでは?
      ただ、Cと同様にポインタ使いまくりでもなんとかなるので、Cの延長でもなんとかなるのでは? と勝手に言ってみます。

      親コメント
      • by delta-keeper (31927) on 2018年03月18日 1時12分 (#3377951) 日記
        CLIは一度も触ったことがないのでアレですけれど、VCを使う場合ならクラスウィザードを使っていけば何となくC++のルールが身につきますね。
        社会人2年目で初めてMFCを使ってGUIを作った時、見よう見まねでメンバ変数を追加したりDDX変数を追加してみたりとC言語の範疇でツール作ってました(オイ

        今回はGUIアプリの開発案件だったのでコードは詳しい人に見てもらいながら作りましたが、GUIのコントロールはそれなりにステップ数が掛かるというのは痛感しました。

        # 次回、コンソールアプリ相当の見積もり持ってきたら、袋だたきにする所存ですw
        親コメント
    • by delta-keeper (31927) on 2018年03月18日 1時06分 (#3377949) 日記
      作法の理解で躓くか否かは有識者が身の回りにいるかいないか、ここが非常に重要だと思います。
      作法(考え方とも言う?)はドキュメントに書いてない場合が多いですし、そもそもドキュメントはAPIの仕様しか書いてなくてコーリングシーケンスなんて分からないことが多々あります。
      使ったことのある人に聞くのが早いのと、休日に遊んでみるのも手ですね。
      親コメント
typodupeerror

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

読み込み中...