• ベストアンサー

コンソールアプリケーションからWindowsプログラムへの道順

私は現在Visual C++ .NET 2003のスタンダードを使用して、Win32コンソールアプリケーションでプログラムを作成しています。まだまだ経験が浅いのでエラーの連続ですが、ポインタの使用や構造体の使用、クラスの使用や低水準ファイル入出力を利用して、テキストファイルの読み込み・整形・書き込みをするプログラムを作成しています。 そろそろSDKやMFCなどを学びたいと考えているのですが、書籍などでSDKを覚えてからMFCを学んだほうが良いみたいなことが書かれていました。でも、別の書籍ではいきなりMFCでも問題ないみたいなことも書いてありました。現在コンソールアプリケーションを作る私がSDKやMFCを学ぶために道順が良く分からなくなっています。 そこで現在Windowsプログラミングをされている方にお聞きしたいことがあります。質問は次のとおりです。 1、MFCを学ぶなら先にSDKを覚えてからのほうが良いですか? 2、Visual C++ .NET 2003を使用してSDKまたはMFCを学ぶのに、お勧めの書籍があったら教えてください。 3、絶版になっていない書籍を探すとVisual C++ .NET 2005を使用しているものが目立つように思えるのですが、私の所有しているバージョンを2005にしてから書籍を考えたほうが良いと思いますか? お時間がありましたら皆さんのご経験をお聞かせください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★アドバイス >テキストファイルの読み込み・整形・書き込みをするプログラムを作成しています。  ↑  それなりにプログラム経験があるとの事であれば MSDN サイトのAPI関数を1つずつ  動作を確認するサンプルをいっぱい作ります。この学習方法で使い方、使えるなどを  学びます。マニュアルだけでは理解不十分なので書籍を読みあさります。 >そろそろSDKやMFCなどを学びたいと考えているのですが、書籍などでSDKを覚えてからMFCを >学んだほうが良いみたいなことが書かれていました。  ↑  API 関数のすべてが MFC で利用できるわけではないからです。  SDK の知識があれば MFC でサポートされていない機能をAPI関数を使って独自クラスを  作成して利用できるようになります。また、きめ細かい設定(制御)を行いたい場合にも  MFCを使わずに API 関数を直接使うことで実現できることもあります。 ・よって MFC を使う前にある程度の API 関数の学習を行います。  順序としては次のような感じになります。  (1)GUIコントロールの基本操作を大量のサンプルで学ぶ。  (2)MSDNサイトでマニュアルを見ながらAPI関数の使い方を学ぶ。  (3)Vectorさんに登録されているフリーソフトを参考に同じものを実際に作成して学ぶ。  実際にGUIアプリケーションを作成することでデータなどの管理法や知識漏れが発見できるので  サンプル作りはほどほどにしましょう。 >1、MFCを学ぶなら先にSDKを覚えてからのほうが良いですか?  ↑  SDK=API関数の使い方を知っておいて損はない。 >2、Visual C++ .NET 2003を使用してSDKまたはMFCを学ぶのに、お勧めの書籍があったら教えてください。  ↑  http://www.amazon.co.jp/dp/4797341920/→『Visual C++ 2005 実用サンプルプログラム WindowsプログラミングTips108』  http://www.amazon.co.jp/dp/479733956X/→『明快入門 Visual C++ 2005 シニア編 (林晴比古実用マスターシリーズ)』 >3、絶版になっていない書籍を探すとVisual C++ .NET 2005を使用しているものが目立つように思えるのですが、  ↑  基本を学ぶのにVCのバージョンはあまり関係ないと思います。  ただし、2003と2005ではTCHAR型のオプションがマルチバイトからUnicodeに変わっています。  ここに注意しないと2003ではコンパイルできたのに2005ではコンパイルできずソースの大半を  地道に修正するハメになります。2005対応の本ならいいのですが2003やそれ以前の場合は  文字列定数の記述に TEXT() マクロなどを使って記述するように気をつけて下さい。  ついでに VC2008 がありますが知っていますか?  どうせ用意するなら VC2008 が良いようです。  2005 はバグがあったり 2003 より良くない噂を聞いています。私は未確認ですけどね。  とりあえずは VC2003 でも十分だと思います。 参考URL: http://www.expertmg.co.jp/html/cti/vctips/→『VC++によるWin32プログラミングTips』 http://zhshijie.hp.infoseek.co.jp/api_jp/→『Win32 のサンプル集です』 http://www.geocities.jp/ky_webid/win32c/index.html→『Win32API(C言語)編』 http://homepage2.nifty.com/DSS/pt.htm→『Programming Tips』 http://www.dinop.com/vc/→『VC++ TIPS』 本の紹介: http://wisdom.sakura.ne.jp/products/books/wingame.html→『Windowsゲームプログラミング』 ※2008年2月26日に第2版が発売予定となっています。 ※『あらゆるジャンルの土台となるエッセンスを詳細解説!』と宣伝しています。→http://wisdom.sakura.ne.jp/ その他: ・『VC tips』キーワードでネット検索するといろいろと小技集のページが見つかります。 ・以上。

mikanagi
質問者

お礼

大変ご丁寧なご回答ありがとうございます。 ちょっと分からないところもありましたので、改めてご質問させてください。 >MSDN サイトのAPI関数 MSDNサイトを見てみましたが、具体的にどこからどのように進んだ場所にあるのか分かりませんでした。 色々探していたらいつの間にか画面に英語ばかりが表示されてしまって焦ってしまいました。 >(2)MSDNサイトでマニュアルを見ながらAPI関数の使い方を学ぶ。 MSDNサイトのマニュアルを見るにはMSDNサイトのトップからどこをどう辿って行けば良いのかわかりませんでした。 あと、個人的なことですが・・・英語は全くダメなのでVC++のHELPとかも、かなり困ってます。 >ついでに VC2008 がありますが知っていますか? 会社ではVC2008の無料版を使ってコンソールアプリケーションをやってます。 知ってはいたのですが、VC2008を使う書籍が見当たらなかったので2005と書きました。 TCHAR型についてですが、VC2003を使って練習に使ったソースをVC2008でビルドしたときエラー出て焦りました。 ヘルプを見て試行錯誤した結果、何とか動くまでに至りましたが、知識不足もあって少し違ったことをすると、再びエラーが出て悩まされました。 だからVC2003またはVC2005+書籍でもっと勉強してから、行く行くはVC2008にしようかと思ってました。 >参考URL: 3番目の『Win32API(C言語)編』がとても良かったです。 ちょっと目が痛くなりそうな色でしたが…。 私はまだまだ初心者なので最初から手順を追って説明してくれているのは大変嬉しいです。 後々必要になるかもしれませんので、5つともブックマークしておきました。 ありがとうございます。 >いろいろと小技集のページが見つかります まだ小技を使う機会が無いので、『VC tips』という語句だけ覚えておきます。 頑張ってみます。 ご丁寧なご回答ありがとうございます。

その他の回答 (4)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

MSDNの検索には少々コツが必要です 『ファイルの移動』でしたら『ファイル』『移動』とスペースで区切って検索してみる 思わしくなければ 『ファイル and 移動』 または『ファイル near 移動』といった具合で 2つの単語がどのようにページ内に含まれるかを指定してみる MSDNの ヘルプ > ヘルプに関するヘルプ > 『情報の検索』リンク > ページ下部の『ヘルプ キーワードの索引の使用に関するヒント』とこのページの下部にある『検索構文のガイドライン』 あたりを参照してみてください

mikanagi
質問者

お礼

ご回答ありがとうございます。 やってみたら『File.Move』というものを見つけることができました。 サンプルがあったのでテストしてみます。 ありがとうございます。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

『猫シリーズ』の書籍の内容はHPとさほど変わらなかったと思いますよ やりたいことから関数などを探すのであれば『逆引き』系の書籍を探したほうがいいかもしれません しかしそれらの書籍も全てを網羅しているわけではないので … 何をしたいのかによって おおよそどのようなグループを探せばよいのかは分かると思います 補足の例ならファイルI/O関連ですよね 私は まず VC付属のMSDNで探しますよ

mikanagi
質問者

お礼

ご回答ありがとうございます。 やはり逆引き書籍もあった方が良さそうですね。 VC付属のMSDNを見てみました。 ファイルの移動を調べてみようと思い、キーワードで『ファイルの移動』として、あとフィルタ条件を『Visual C++ドキュメント』としてみたら、『ファイルの移動』という項目が見つかりました。 その項目の内容を見たのですが、なぜか[VBScript]と[JScript]と書かれたサンプルしかありませんでした。 使い方が間違っているのでしょうか?

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

初めてVC++6を買ってMFCでプログラムしたとき流れがわからずにとまどった覚えがあります。 main(WinMain)関数はないしOn~関数がどこからどうやって呼び出されてるのかわからないしで。 SDKでWindowsのメッセージシステムを理解したらMFCの手軽さがわかりました 今は2005の無料バージョンを使っていてMFC使えないので結局SDKで書いてますが。

mikanagi
質問者

お礼

早速のご回答ありがとうございます。 何となくモヤモヤしていたことが、分かったような気がします。 『手間がかかってもSDKでプログラミングすることで仕組みを覚えて、仕組みが分かったら少し手間を省けるMFCでプログラミングする』という事と言うことでしょうか。 Cを始めた当初、文字列を扱う際にcharを使って文字配列を使用していました。 その時は「strcpyとかstrcatとか手間がかかるなぁ」と感じていましたが、そのおかげで文字がどのようにメモリ内へ格納されているか理解できました。 今はstringを使って文字列を扱っているので、割と楽に文字列を扱えるようになっています。 ちょっと意味は違うかもしれませんが、これに似ているのかなぁと思いました。 ありがとうございます。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

MFCはWindowsのメッセージシステムを理解していたほうが応用が利くかと思います 時間が有るなら SDK > MFCの順で学習したほうがいいでしょう 書籍ですが『猫シリーズ』あたりでしょうか … http://www.kumei.ne.jp/c_lang/

mikanagi
質問者

お礼

ご回答ありがとうございます。 質問で少々言葉足らずの所がありましたので捕捉させていただきます。 SDKについてですが、『そろそろSDKや…』と書きましたが、正確に書けば『そろそろ本格的にSDKや…』が正しい表現でした。 申し訳ありません。 SDKについては私も努力はしてみました。 ご紹介にある『猫シリーズ』のホームページを見ながら、少しだけ触れてみたことがあります。 『何も見ずに…』は無理ですが、ホームページを見ながらであれば、プルダウンメニューを使ったり、文字を表示させたり、ボタンや文字フォームを使ったりするくらいなら何とかできます。 書籍ですが、ホームページの内容より詳しく書かれているのでしょうか? ホームページを見ながらやっているときに感じたのは『細かい説明は後で…という箇所が多くて、頭の中に「後で」「後で」という言葉がいっぱいになってしまい困ってしまった』という感覚がありました。 書籍のほうはどうなのでしょうか? あと、現在のコンソールアプリケーションを作っているときもそうですが、『○○がしたい』と思ったときにどんな関数を使えば良いのかが分からないことが多いです。 これは単に私の経験不足なのかもしれません。 例えば今現在『コンソールアプリケーションでファイルの移動・削除・複製をする関数』があるのか無いのか、私は分かりません。 逆引きの書籍みたいな物も1つくらいは持っていたほうが良いのでしょうか? …すみません、経験不足でまだまだ分からないことだらけです。 ともあれ、ご回答ありがとうございました。

関連するQ&A

  • コンソールアプリケーションの利用について

    私は、現在ロボットアームのプログラムをvisual c++ 2005で作っています。 コンソールアプリケーションでロボットのマウス制御に挑戦していますが、コンソールアプリケーションでマウスの座標値などを取り出すことは可能でしょうか??

  • C# コンソールアプリケーション 追加

    visual studio 2013でC#のコンソールアプリケーションを作成したのですがコンソールアプリケーションにボタンを追加する方法はどうすれば良いのでしょうか?

  • コンソールアプリケーションの終了方法

    コンソールアプリケーションをC言語(Visual-C++6.0)にて開発予定です。このアプリケーションは画面を使わないのでコンソールアプリケーションにする予定です。このプログラムは常駐プロセスにし、コマンドで起動停止を行うようにする予定です。プログラムの起動はバッチファイルを作成し、そこから実行しようと考えていますが、プログラムを停止させるバッチファイルのイメージがわきません。unixの場合は、当該プロセスにSIGTERMを送信する等の方法が考えられるのですが、windowsで常駐のコンソールアプリケーションを停止させるには、どのような方法があるのでしょうか。ご存じの方ありましたら、教えてください。停止させる方法は、外部から常駐プロセスに停止である旨の何らかの事象を送り、それを常駐プロセスがキャッチし、自ら停止することを想定しています。(有無をいわさず殺すことは考えていません) 実行環境:windows2003を想定 開発言語:VC++6.0でC言語

  • プログラムの書き換えについて

    現在、visual c++6.0でロボットをマウスで制御するプログラムを作成しています。そこで聞きたいのですが、コンソールアプリケーションのプログラムをwindosアプリケーションのプログラムに書き換えることは可能でしょうか?? 参考URLや書き換えソフトなどありましたらお願いします

  • C++コンソールアプリケーションでの動画ファイルの取り扱いについて

    現在C++のコンソールアプリケーションにおいて 動画ファイルの生成を行おうと思っています。 各フレームの画像をビットマップ形式で保持しており、 これを映像として書き出したいのです。 少し調べたところ、 MFCなどを使うものに関する説明は少しあったのですが、 標準C++用のAVI生成ライブラリなどがありましたら 教えていただきたいです。 動画ファイル形式はAVIには限定しません。 一般的なものであればなんでもいいです。 コンソールではやめといたほうがいいというのであれば また他の方法を考えます。

  • MFCアプリケーションについて

    MFCアプリケーションを使用してプログラミングをしようと思うのですが、プロジェクト作成欄にMFCアプリケーションがありません。 使用している環境は OS : Windows XP C++ : Microsoft Visual C++ 2005 Express Edition です。 サポートされていないのでしょうか? MFCアプリケーションを使う方法を教えてください。

  • C言語でWindowsコンソールアプリケーション

    C#でしたら、新しいプロジェクト→コンソールアプリケーション→Windowsアプリケーションで黒いDOS画面が出ないただのバッチみたいなプログラムができるのですが。 C言語の場合はどうするのでしょうか。バイナリで「this program cannot be run in dos mode」があってもどうしても一瞬黒いDOS画面が表示されるのです。またこれを専門用語で何と言うのでしょうか。 目的はVBSみたいなファイル処理の単純なバッチファイルを作成するのだけです。

  • Visual Studio のコンソール出力

    Visual Studio 2015 を使ってC++のコンソールアプリケーションを作る練習をしています。 ソースプログラムは印刷できるのですが、プログラムを実行してコンソールに出力された結果を印刷するにはどうすればよいのかわかりません。どなたか教えて頂けるとありがたいです。

  • C++のコンソールアプリケーションと文字コード

    バッチファイルの処理を使って、様々な言語(中国語やキリル文字)や、あまりファイル名としては見られないような(^や%など)記号が含まれるファイルやフォルダについて 検索や、リネーム処理をするバッチファイルを作っていたのですが どうも上記のような、記号を含む文字や、キリル文字を含むフォルダ名ファイル名、また長すぎるパスが存在するとうまく動きません おそらくコマンドプロンプトがShift_JISしか扱えないのと、%に関しては変数の展開が関係していると思うのですが… そこで、この機会にC++のコマンドラインによる実行でそういう例外的な文字列の時も対応してファイル操作ができる プログラムを組みたいと思うのですが 何分無知で申し訳ないのですが C++もコマンドプロンプト上で動く以上、Shift_JISに起因する問題に対処できず、バッチファイルの処理と同じように特殊な文字で 動作が不安定になってしまったりするのでしょうか?教えて下さい Visual Express をインストールして、Windows アプリケーションについて多少調べて、その内部で特殊文字(Shift_JISに出ない文字や記号)の代入と出力 を試してみたところ、うまくいくようなので、もしコンソールアプリケーションで出来ないのであればWindowsアプリケーションの勉強をしようと思っています また、Visual ExpressでC++のプログラムを組む時 コンソールアプリケーションと Windowsアプリケーションを作る時文法が微妙に違うのはどうしてですか? たとえば文字型の変数の宣言に コンソールアプリケーションだと String ○○;ですがWindowsアプリケーションだと^を付けないといけなかったり 同じC++なら文法も同じような気がするのですが? 的外れな質問をしていたらごめんなさい ちなみに、バッチ処理で作ろうと思っていたプログラムは ”ドライブDから、画像ファイル(jpgと仮定)以外のファイル及びフォルダを含まないフォルダ(中に画像ファイルしか含んでいないフォルダ)”を探査して条件に一致する全てのフォルダ(イメージファイルしか入っていないフォルダ)を(D\picturefolder)へ移動、もちろんサブフォルダも含めて全フォルダに関して” というものです、特殊文字の問題以外はクリアできたのですが・・・

  • Win32 コンソールアプリケーション

    VisualC++ 2010 Express を利用して、C++を学んでいます。 Win32 コンソールアプリケーション でプロジェクトを作成しました。 最初に用意されたテンプレート(?)に、  printf("%s\n", "Hello World!"); を追加して、実行してみたのですが、「Hello World!」がどこにも表示されませんでした。 ソリューション(プロジェクト?)が保存されているフォルダへ移動して、 exe形式の実行ファイルがあったので、これを実行してみましたが、すぐに画面が消えてしまいます。 コマンドプロンプトを起動して、↑のexeを実行したところ、「Hello World!」が表示されました。 ★ いちいちこの手順を踏むのが非常に面倒なのですが、Visual C++ 内で完結できないでしょうか? 以上、よろしくお願いします。