VisualC++駆け出しの者です。
何とか入門書(林晴比古氏著 ビギナー編&シニア編)に一通り目を通し、これから自分でWINアプリを作成しようという所なんですが。
入門書レベルではほとんど何も出来ず、MFCやらAPIの勉強が必要だということに気づきました.
そこで質問なんですが、MFCとAPIどちらから覚えるのが良いのでしょう。
効率良い学習法をご教授して頂けませんでしょうか?
また、初級者にも分かりやすいMFC&APIについての関連サイトやお勧め書籍等ありましたら、ぜひ紹介お願いしたいです。
当面の目標は小規模の個人用ツール等を1人で作る程度ですが、将来的には覚えた技術を生かす仕事につきたいと考えております。

”そもそも考え方自体間違っているよ。”等の指摘がありましたら、容赦なく突っ込んでください。

補足
C言語(++ではない)は仕事で2年ほどやっております。VB含めその他の言語はほとんど未経験です。

長くなりましたが、どうかよろしくお願いいたします。

A 回答 (2件)

こんにちは。

itohhといいます。

一通り入門本に目を通されたと言うことなので。
例えば、入門本の中にある教材をまずは、改良してみては如何ですか?
自分なりに使いやすくすると言うことは、結構勉強になると思いますよ。

基本的にMFCを憶えてしまえば、Win32API関連はそんなに
急いで憶えなくても良いと思います。
MFCには、一通りのクラス、マクロが用意されていますからね。

物足りなくなったら(どうしてもMFCで実現できそうもなければ)
Win32API関連を勉強されては如何ですか?

MFC&Win32APIの勉強ガンバってください。

最後に参考URLを記載していきますね。

参考URL:http://www.nt.sakura.ne.jp/~miwaki/
    • good
    • 0
この回答へのお礼

すばやい回答ありがとうございます。お礼が遅れて申し訳ありませんでした。
アドバイスの通りWin32APIよりまずMFCを習得することにします。
マスターできるのはまだまだ先の事と思いますが、地道にやっていこうと思います。
参考URLは早速お気に入りに追加しました。

お礼日時:2001/06/29 21:03

初級者用サイトでは、ここかな



参考URL:http://www.kumei.ne.jp/c_lang/index.html
    • good
    • 0
この回答へのお礼

ありがとうございました。
早速お気に入りに登録させて頂きました。

お礼日時:2001/06/29 21:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q新版 明解C++ 入門編  について

新版 明解C++ 入門編  について

私は、柴田望洋さんの『新版 明解 C++ 入門編』という本を購入して、勉強し始めました。
根本的な質問なんですが、ソースプログラムをメモ帳に書き込んだ後、どうしたらコンパイルできるか分かりません。教えてください。

Aベストアンサー

コンパイラはインストールしましたか?
インストールできているなら、コンパイラのマニュアルに従ってコンパイルしてください。
たとえば Visual C++ であれば コマンドプロンプトから

cl -EHsc 打ち込んだファイル.cpp

で(たいていの場合)OK。 打ち込んだファイル.exe ができあがります。
# コンパイル・エラーがなければ、ね。

Q柴田望洋氏著「新版 明解C++ 入門編」をテキストにして、BCBでコン

柴田望洋氏著「新版 明解C++ 入門編」をテキストにして、BCBでコンソールアプリを作成しながら勉強しています。
「List8C-1」での質問ですが、テキストでは、下記に示す「プログラム」を実行して入力すると、下記「実行結果一例」が得られるとなっていますが、実際は「実際の表示結果」の様に、arg[0]のみ表示されます。
これはどんな理由によるものでしょうか?ご教授願います。

//プログラム
#include <iostream>
using namespace std;
int main(int argc,char** argv){
for(int i=0;i<argc;i++)
cout << "argv[" << i << "]=" << argv[i] << "\n";
getchar();
}

//実行結果一例
「argtest1 Sort BinTree」でエンターすると

argv[0]=argtest1
argv[1]=Sort
argv[2]=BinTree

//実際の表示結果
arg[0]=パス\実行ファイル名

柴田望洋氏著「新版 明解C++ 入門編」をテキストにして、BCBでコンソールアプリを作成しながら勉強しています。
「List8C-1」での質問ですが、テキストでは、下記に示す「プログラム」を実行して入力すると、下記「実行結果一例」が得られるとなっていますが、実際は「実際の表示結果」の様に、arg[0]のみ表示されます。
これはどんな理由によるものでしょうか?ご教授願います。

//プログラム
#include <iostream>
using namespace std;
int main(int argc,char** argv){
for(int i=0;i<argc;i++)
...続きを読む

Aベストアンサー

実行時引数が渡されていないのだと思います。
通常、コンソールから
> argtest1 Sort BinTree
として実行するものですが、BCBの実行ボタンをクリックして実行する場合には
BCBのメニューの[実行]-[実行時引数]を開いて
[実行時の引数]に Sort BinTree を設定すれば良いです。

※私が使ってるのはBCB5なのでメニューの名称が違っているかもしれません。

QC++ API 全般 APIの概要は

独学にてプログラミングを勉強しているのですが、いきづまってしまったので質問お願いします。

※Visual Studio 2008 Express Editionsを使用しています。

まだプログラミングに関しての勉強を始めて1ヶ月程度で、最初はVB.NETから始めて、最近C++に乗り換えました。
趣味の範囲でのゲームを作ろうと思っていて、C++とDirectXでの開発を予定しています。(しかし、最終的にはゲームに限らずプログラミングの技術と知識を習得することを目標にしています。)(DirectXに関してはまだ手をつけていません。)
まったく1からのスタートで、現在win32コンソールアプリケーションにてコードの勉強をしているところです。

勉強に使っている参考文献は
・VisualC++.NET逆引き大全500の極意
・ゲームプログラマになる前に覚えて起きたい技術(これを買うには早すぎたようです…。第一章も半分くらいしか理解できません…。)

サイトは
・主に「0からのゲームプログラミング」というサイトです。
http://www.plustarnet.com/aspil/Programming/



本題の質問ですが、APIというものがいまいち理解できません。
(1)上記のような目的で使用するAPIは、標準 Windows APIというものでいいのでしょうか?

(2)win32コンソールアプリケーションでは実行できるのに、win32プロジェクトでは実行できないのはなぜでしょうか?
#include<windows.h>

int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
PSTR lpCmdLine ,
int nCmdShow ) {
MessageBox(NULL , TEXT("Hello Wold!") ,
TEXT("メッセージボックス") , MB_OK);
return 0;
}

(3)http://www.plustarnet.com/aspil/Programming/CConsole.htm
このURLのコンソールAPIというのは、一般的に使われているものでしょうか?それともこのサイトのオリジナルのものでしょうか?win32コンソールアプリケーションでAPIを使うには、このURLのCConsoleクラスとうものをインクルードしないといけないのでしょうか?#include<windows.h>と宣言することによって気軽に使いたいものを使うことはできないのでしょうか?

(4)#include<windows.h>
とした場合、作るものが「win32コンソールアプリケーション」だったり「win32プロジェクト」だったり「windowsフォームアプリケーション」だったりで、使用方法などがまったく別になってしまうのでしょうか?

(5)そもそも、上記の目的の場合APIを勉強する必要はあるでしょうか?

(6)勉強をしたほうが後々に役立つ場合、どのAPIを勉強するのがいいのでしょうか?(APIといっても様々なものがあるんだなと思い質問しました。もし勘違いでAPIというものは一つしかないとしたらすみません。)


なぜAPIに関してかというと、単純に上記のサイトで言語編の一番上から順に見ていったからです。
初心者すぎて質問が的外れかもしれませんがよろしくお願いします。

独学にてプログラミングを勉強しているのですが、いきづまってしまったので質問お願いします。

※Visual Studio 2008 Express Editionsを使用しています。

まだプログラミングに関しての勉強を始めて1ヶ月程度で、最初はVB.NETから始めて、最近C++に乗り換えました。
趣味の範囲でのゲームを作ろうと思っていて、C++とDirectXでの開発を予定しています。(しかし、最終的にはゲームに限らずプログラミングの技術と知識を習得することを目標にしています。)(DirectXに関してはまだ手をつけていません。)
...続きを読む

Aベストアンサー

まず"API"というものそのものについてわかっておられないようです。

現在のプログラミングは非常に複雑化してきました。
また、(特にプロフェッショナルな場合)納期も短期化してきています。

そんなわけで、プログラミングも一から全て作るのは非現実的な状態です。
誰かの作ってくれたものを利用する場面が非常に多くなりつつあります。
(並行して開発する場合も多くあります)

その際、
どのような物(関数でも良いし、クラスとかでも良い)をどうやって
(パラメータとか呼び出し順序とか)
使うか
を定めておかないと、利用しようにも利用できませんよね。
この定めた規約のことをAPIと呼びます。

Windowsには
・ファイルを操作する関数
・画面にグラフィックを描画する関数
等々様々なものが提供されています。

たとえば、ファイルを操作するには
CreateFileで開き、ReadFileで読み込み、WriteFileで書き込み
CloseHandleで閉じる
という手順が定められています。
この規約は”Win32API”と呼ばれます。
CreateFileなどWin32で定められた個々の関数は
Win32API関数
と呼ばれます。

Windows上で動くプログラムは基本的には
Win32APIを利用します。

しかし、Win32APIには色々不便な点も多く、
それを補うものが作られてきました。
DirectXもその一例です。
もちろん、DirectXも(ごみではなく)"利用される"ために作られたものですので
Win32API同様、利用するための規格(API)があります。
Direct X APIと呼ばれたりします。

ですから
(1)はWin32APIです
(2)は明らかに逆です。
   Win32プロジェクトとは通常のEXEの他にDLL(EXEのための部品です。単独では動きません)など様々な開発を行えます。コンソール専用ではないので、
コンソール用の設定がされていません。したがって、コンソールのソースを持ってきただけでは動作するようになりません。
(自分でプロジェクトの設定を行えばコンソールアプリになります)

(3)についてはそのサイト専用です
ピンク色の部分をコピーしてConsole.hという名称で保存してください。
そして#include "Consol.h"
すれば自動的にWindows.hも取り込まれます。
別途Windows.hを取り込む必要はありませんし
Windows.hで定義されているものは自由に使えます

(4)win32コンソールアプリケーションとWindoiws プロジェクトの違いについては
先に述べましたので省略します。
"Windows フォームアプリケーション"とは
".NET (ドット ネット)"という新しい技術に基づくものです。
今までのWin32APIとは別物です。
当然APIも異なります。
原則的にはWin32APIは利用できません。
(C++/CLIという方法で利用できますが、それなりの設定が必要です)

(5) 目的に合ったAPIを勉強する必要があります。
先ほどものべましたが".NET"を使うには
Win32APIとは別の知識が必要です。
逆に、".NET"の知識しかない場合、Win32コンソールアプリは作れませんので
Win32APIを勉強しなくてはなりません。
もっとも、これは厳密な言い方ではありません。
Cの標準関数で収まる範囲であれば、Win32APIの知識は不要です。

(6)
既に述べています。
APIはたくさんあります。
あなたも、たとえばWin32プロジェクトでDLLを作成する場合、
どのように利用するかを考えてAPIを定める必要があります。

まず"API"というものそのものについてわかっておられないようです。

現在のプログラミングは非常に複雑化してきました。
また、(特にプロフェッショナルな場合)納期も短期化してきています。

そんなわけで、プログラミングも一から全て作るのは非現実的な状態です。
誰かの作ってくれたものを利用する場面が非常に多くなりつつあります。
(並行して開発する場合も多くあります)

その際、
どのような物(関数でも良いし、クラスとかでも良い)をどうやって
(パラメータとか呼び出し順序とか)
使...続きを読む

Q新版 明解 C++ 入門編 について

新版 明解 C++ 入門編 について

Visual C++を使って、P4のlist1-1のプログラムを書き込んで、ビルドをしたら、こんなエラーがあらわれました。何がいけないのでしょうか?

1>------ ビルド開始: プロジェクト: hello, 構成: Debug Win32 ------
1>マニフェストを埋め込んでいます...
1>.\Debug\hello.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. U_U!$kLdK
1>~[
1>ビルドログは "file://c:\Documents and Settings\** **\デスクトップ\C++ ソース\hello\Debug\BuildLog.htm" に保存されました。
1>hello - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


ちなみにソースは、、、

//画面に出力するプログラム

#include <iostream>

using namespace std;

int main()
{
cout << "初めてのC++プログラム。\n";
cout << "画面に出力しています。\n";
}

新版 明解 C++ 入門編 について

Visual C++を使って、P4のlist1-1のプログラムを書き込んで、ビルドをしたら、こんなエラーがあらわれました。何がいけないのでしょうか?

1>------ ビルド開始: プロジェクト: hello, 構成: Debug Win32 ------
1>マニフェストを埋め込んでいます...
1>.\Debug\hello.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. U_U!$kLdK
1>~[
1>ビルドログは "file://c:\Documents and Settings\** **\デスクトップ\C++ ソ...続きを読む

Aベストアンサー

私の環境は2005ですが、同じプログラムを書いてうまくいきました。
一応手順を載っけておきます。

「新規プロジェクト」
→win32「コンソールアプリケーション」
→出てくるダイアログで「空のプロジェクト」にチェック
→「完了」

→メニューバー「プロジェクト」
→「新しい項目の追加」
→「.cpp」を選んで適当にファイル名をつけて「追加」
→ソースを打ち込む。

・・・とまあこんな感じです。
処理が終わるとコンソールがすぐ閉じちゃうので、
予防策として<stdlib.h>をインクルードして、プログラムの最後にsystem("PAUSE");という文を追加しましたが、あとは全く同じ内容です。

新規プロジェクトを立ち上げてやり直してみては。

Q明解C言語 入門編 P219 について

以下のプログラムの理解について、質問です。


入力した文字列に、0 ~ 9 の数字がそれぞれ何度含まれていたかをカウントするプログラムです。
(明解C言語 入門編 P219)

==========
プログラム
==========

#include <stdio.h>

void str_dcount(const char str[], int cnt[])
{
unsigned i = 0;
while(str[i]) { // str に '\0' が現れるまで繰り返し
if(str[i] >= '0' && str[i] <= '9')
cnt[str[i] - '0']++; // !!!! ココです !!!!
i++;
}
}

int main(void)
{
int i;
int dcnt[10] = {0};
char str[100];

printf("文字列を入力してください : " );
scanf("%s", str); // 文字列を str へ

str_dcount(str, dcnt); // 引数  str = 入力した文字列, dcnt = すべて '0'

puts("数字文字の出現回数 ");
for(i = 0; i < 10; i++)
printf("'%d' : %d\n", i, dcnt[i]);


return 0;
}


=========
実行結果
=========

文字列を入力してください : 3.14159
数字文字の出現回数
'0' : 0
'1' : 2
'2' : 0
'3' : 1
'4' : 1
'5' : 1
'6' : 0
'7' : 0
'8' : 0
'9' : 1

==========
質問内容
==========

関数 str_dcount 内の 『 cnt[str[i] - '0']++; 』 がどのような処理を行っているのか、理解ができません。
以下のように考えたのですが、それでは上手く動かないとの結論に至りました。

たとえば、i = 0 で、str[100] = 3.14159 であるとき、

/* ループ1回目 */
cnt[0] = str[0] - 0; /* 3 - 0 で cnt[0] には 3 が入る。 */
cnt[0++];

/* ループ2回目 */
cnt[1] = str[1] - 1; /* "." - 1 となる。 数字ではないので減算できずエラーになるのでは? */
cnt[1++];

/* ループ3回目 */
cnt[2] = str[2] - 2; /* 1 - 2 なので、なぜか負の数になってしまう。。 */
cnt[2++];


配列の添え字が、配列になっている cnt[str[i]] までは理解できますが、
以下の2点が解っていないために理解ができていないようです。

1) cnt[str[i] - '0']++ ;
の - '0' が何を行っているのか

配列には数字が入っており、そこから文字 '0' を減算しているのでしょうか?
数字から文字を減算できるのでしょうか?


2)  ++ 
はどの値を増加させているのでしょうか?



宜しくお願いします。

以下のプログラムの理解について、質問です。


入力した文字列に、0 ~ 9 の数字がそれぞれ何度含まれていたかをカウントするプログラムです。
(明解C言語 入門編 P219)

==========
プログラム
==========

#include <stdio.h>

void str_dcount(const char str[], int cnt[])
{
unsigned i = 0;
while(str[i]) { // str に '\0' が現れるまで繰り返し
if(str[i] >= '0' && str[i] <= '9')
cnt[str[i] - '0']++; // !!!! ココです !!!!
i++;
}
}

int main(void)
{
int i;
int dcnt[10] = {0};
char str[100]...続きを読む

Aベストアンサー

unsigned i = 0;
while(str[i]) { // str に '\0' が現れるまで繰り返し
if(str[i] >= '0' && str[i] <= '9')
cnt[str[i] - '0']++; // !!!! ココです !!!!
i++;

str[]に"3.14159"が入っていたとき、
str[0] == '3'であるから、if文の条件を満たします。
str[0] - '0'は、'3' - '0'ですから、3という数値です。
たいていの文字コードでは'0', '1, '2', ..., '9'の順に番号が振ってあるはずですから、
'0'を基準としていくつ離れているか('3' - '0'の式の部分)が、その数字に相当します。
cnt[3]++;は、配列の要素cnt[3]の値を1だけ増やします。
これで、"3.14159"の先頭文字である'3'の個数が1個増えたことになります。
i++;によって、次の文字'.'を対象とします。
これは、数字ではありませんので、if文をスルーします。
i++;によって、次の文字'1'を対象とします。
ここの処理は、先ほどの'3'の場合と同じです。cnt[1]を1増やします。
以下同様です。

unsigned i = 0;
while(str[i]) { // str に '\0' が現れるまで繰り返し
if(str[i] >= '0' && str[i] <= '9')
cnt[str[i] - '0']++; // !!!! ココです !!!!
i++;

str[]に"3.14159"が入っていたとき、
str[0] == '3'であるから、if文の条件を満たします。
str[0] - '0'は、'3' - '0'ですから、3という数値です。
たいていの文字コードでは'0', '1, '2', ..., '9'の順に番号が振ってあるはずですから、
'0'を基準としていくつ離れているか('3' - '0'の式の部分)が、その数字に相当します。
cnt[3]++;は、配列の要...続きを読む


人気Q&Aランキング

おすすめ情報