トップページ⇒tech
1001コメント284KB

★初心者にVisual C++を教えるスレ★ Part4

■ このスレッドは過去ログ倉庫に格納されています
0001よろ♪NGNG
タイトルのとおり、初心者専用です。

前スレ
★初心者にVisual C++を教えるスレ★ Part3
http://pc2.2ch.net/test/read.cgi/tech/1038160750/l50

★初心者にVisual C++を教えるスレ★
http://pc3.2ch.net/test/read.cgi/tech/1023530449/l50

関連スレ
■ VisualC++(MFC限定)相談室 5■
http://pc3.2ch.net/test/read.cgi/tech/1028553308/l50

Win32API 質問箱 Build7
http://pc3.2ch.net/test/read.cgi/tech/1036654893/l50
0002デフォルトの名無しさんNGNG
990 名前:デフォルトの名無しさん 投稿日:03/02/02 23:17
めちゃ初歩的な質問です。

ダイアログベースで作成しているのですが、
OKボタン、CANCELボタンを無効にして新しいボタンを2つ作成し、
そのボタンにOK、CANCELボタンの役割を持たせるように
プログラムしました。
その後、エディットボックスを追加したのですが、
IDCが追加されず、2つのボタンだけのIDCだけが表示されます。
どうやったらエディットボックスのIDCを追加することができますか?

0003前スレ990NGNG
>>994
無理ってことですか?
どうやってメンバ変数を作成できますか?
0004よろ♪NGNG
>>1
おつ
0005デフォルトの名無しさんNGNG
>>2
リソースエディタでエディットボックスを追加したら、
クラスウイザードでもIDC_EDIT1が選択できるように
なりましたが、そちらではなりませんか?

0006デフォルトの名無しさんNGNG
>>5
なりません。
0007前スレ990NGNG
>>5
すみません、リソースエディタとはどこのことを指しておりますか?
よくわからなくて申し訳ないです。
ソースに直接書いているのですか?
0008デフォルトの名無しさんNGNG
>>6
ありえないとは思いますが、
クラスウイザードではC***Dlg というダイアログクラスの
派生クラスを選択してますよね?
0009デフォルトの名無しさんNGNG
>>7
左側のリソースビュー
--> Dialog
--> IDD_TEST_DIALOG
をダブルクリックすると表示されるエディタです。

これ使ってないんですか?

0010前スレ990NGNG
>>8
その通りです。
デフォルトで作成されたものです。
クラスは一切追加しておりません。
0011前スレ990NGNG
>>9
ダブルクリックをしても何も動作しないのですが、
なにか設定がいりますか?
0012デフォルトの名無しさんNGNG
いいかげんあきらめれ。
0013デフォルトの名無しさんNGNG
>>11
どうやってボタン追加したんですか?
CButtonクラスでも使って手作業で追加したの?

0014547NGNG
yakyu.c
d:\tomoki\c言語\新しいフォルダ (3)\yakyu.c(96) : warning C4700: 値が割り当てられていないローカルな変数 'anserA1' に対して参照が行われました。
d:\tomoki\c言語\新しいフォルダ (3)\yakyu.c(102) : warning C4700: 値が割り当てられていないローカルな変数 'anserA2' に対して参照が行われました。
リンク中...
LIBCD.lib(crt0dat.obj) : error LNK2005: _exit はすでに yakyu.obj で定義されています
Debug/yakyu.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました
link.exe の実行エラー
0015デフォルトの名無しさんNGNG
>>11
プロジェクトは MFC AppWizard (exe) ですよね?
0016前スレ990NGNG
>>13
コントロールから追加しました。
手順としては、新規作成から、ダイアログベースを選択して作成。
OK、キャンセルボタンを一旦削除して、ボタンを2つコントロールから追加。
その後、エディットボックスを追加です。
エディットボックスのプロパティでは、IDC_EDIT1は表示されますが、
クラスウィザードでは、表示されないのです。
0017前スレ990NGNG
>>15
その通りです。
0018デフォルトの名無しさんNGNG
>>7
http://ebiuma.parfait.ne.jp/upuroda/img-box/img20030202235439.jpg
のことだと・・・
0019デフォルトの名無しさんNGNG
>>16
IDC_BUTTON1 はクラスウイザードで
選択できたの?
0020前スレ990NGNG
>>19
できました。
>>18
すみません。
OSは2000でVC++6.0ですが、同じですか?
0021547NGNG
こちらからきました。こたえてね。よろしく。
http://pc2.2ch.net/test/read.cgi/tech/1042640474/547-
0022デフォルトの名無しさんNGNG
>>16
それとおなじことやリマシタが、表示されました。
つわけで、やりなおせ。
0023デフォルトの名無しさんNGNG
>>20
一旦削除して再度追加しても変わらない?
0024前スレ990NGNG
>>22
>>23
一から作成し直しましたら
無事できました。

原因不明ですが、とりあえず解決しましたのでこのまま続けていきます。

皆様ありがとうございました。
0025デフォルトの名無しさんNGNG
>>20
vc++.netなんで・・・
netだと、ダイヤログベースでプロジェクトで立ち上げると
まず、リソースエディタの画面になるので、VC6は知りません。
VC6でも、リソースヴューのとこでdailogフォルダに対して
dialogの挿入すればリソースエディタ画面になるのじゃないんですか?
0026デフォルトの名無しさんNGNG
>>21
前スレミロ
0027デフォルトの名無しさんNGNG
なんだよ
解決かよ・・・
なら、質問
XPでVC++.NETでコーディングしてると
たまに、落ちやがる
ビルドとかの最中じゃなくて、単にコードを手打ちしてるときに・・・
回避策教えてくれ・・・
0028デフォルトの名無しさんNGNG
>>27
OSクリーンインストール+VC++.NET再インストール
0029デフォルトの名無しさんNGNG
>>28
やだ!!
XP再インスト→MSに電話
VC再インスト→地獄のように時間かかる
できるかそんなこと
0030デフォルトの名無しさんNGNG

 VC++はもう卒業しようよ。 十分苦しんだだろ?
 .NetがいやならDelphiでいいじゃないか。
0031デフォルトの名無しさんNGNG
>>29
>MSに電話
確かにそれやだな。
やっぱ2000にした方がいいんでないか?
0032デフォルトの名無しさんNGNG
>>25
VC++6.0でも同じでっせ。
ダイアログベースプロジェクトなら最初に
リソースエディタがでますよ。

0033デフォルトの名無しさんNGNG
すいません質問です。複数枚のビットマップファイルを連続して読みこむ方法ってありませんでしょうか?

CBitmap newBitmap;
newBitmap.LoadBitmap(IDB_IMG);

をこんな感じにしたいのです。

for(count=0; count<10; count++)
{
 char filename[256];
 CBitmap newBitmap[10];
 ssprintf(filename,"%s%d.%s","temp",count,"bmp"); // "temp0~10.bmp"にしたい
 newBitmap.LoadBitmap(filename);
}

何かいい方法はないでしょうか?
003433NGNG
すいません もう一つビットマップ関連の質問で…
質問内容はビットマップの情報を2次元配列にうまく格納できないことです。

やったのは、320×240のビットマップを読みこみ、GetPixcelで1ピクセルごとにRGBを取得。
それらをint型の配列gazou[320][240]に
for(i=0; i<240; i++){
for(j=0; j<320; j++){
if(r==255 && g==0 && b==0){ gazou[i][j]=1; continue; }
else if(r==0 && g==255 && b==0){ gazou[i][j]=2; continue; }
else if(r==0 && g==0 && b==255){ gazou[i][j]=3; continue; }
}
}

として格納したのですが、これらの配列にちゃんと値が入っているかを確認するために、テストプログラムを組んだのですが
x=y=0;
for(i=0; i<240; i++){
for(j=0; j<320; j++){
if(gazou[i][j]==1){ pDC->SetPixcel(x+j,y+i,RGB(255,0,0)); continue; }
else if(gazou[i][j]==2){ pDC->SetPixcel(x+j,y+i,RGB(0,255,0)); continue; }
else if(gazou[i][j]==3){ pDC->SetPixcel(x+j,y+i,RGB(0,0,255)); continue; }
}
}
としたのに、表示された画像は元の画像と同じように表示されないのです。何故か画像の右半分が表示されず、その部分には左半分のが繰り返し表示されてます…
すいませんが、この問題についても解決策をお願いします…
003533NGNG
すいません!!
gazou[320][240]でなくgazou[240][320]でした…
0036名無し@沢村NGNG
>>33
LoadImage()だ。
0037 NGNG
めっちゃくちゃ初心者な質問なんですが・・・

DirectX SDKを導入して、一応組めるようにはなったんですけど
DirectXの関数若しくは、構造体等を書いた時に表示される
入力補助機能(というのでしょうか?)を出すようにするには
どうすれば良いのでしょうか?
003833NGNG
>>36
 サンクスです!

ところで2次元配列でgazou[1000][1000]って書くのってメモリ的にやばい気がするんだけど、みなさんはどう思われますか
また大量の配列を確保するとき、どうすればいいのか教えてもらえませんか?
0039デフォルトの名無しさんNGNG
学校の授業で配列とか関数とか基本みたいなのはある程度学んだんですよ。
でもっといろんな事勉強したいのですが何をしたらいいのか解かりません。

助けてください。
あとオススメの参考書かなんかあったら教えてください。
0040デフォルトの名無しさんNGNG
>>39
クラスとかやったの?
0041デフォルトの名無しさんNGNG
>>39
基本をやってればプログラム組めるだろ!
0042デフォルトの名無しさんNGNG
>>41
でも、初めてMFCとかやると面食らう
SDKでも面食らう
WINアプリ設計の面倒さを割り切れるようにならないと
何していいかわかんないというのはわかる気がする
004339NGNG
クラスはやってません。
これからやるのがよかですか?

>>41
いや、どんなプログラムを組んだらいいのかさっぱりなんです。
0044デフォルトの名無しさんNGNG
switch文の中で、宣言して代入ってできないんでしょうか?

// エラー
UINT j = DT_TABSTOP | 0x00002F00;
DrawText(hdc, str, -1, &rect, j);

d:\temp\winapitest001\winapitest001.cpp(92) : error C2360: 'j' の初期化が 'case' ラベルによって行われませんでした。
d:\temp\winapitest001\winapitest001.cpp(85) : 'j' の宣言を確認してください。

//これだとOK
UINT j;
j = DT_TABSTOP | 0x00002F00;
DrawText(hdc, str, -1, &rect, j);

どうして前者だとエラーになるのでしょう?
文法的には問題なさそうなんですが。

0045デフォルトの名無しさんNGNG
>>43
VCはMSが用意したクラスにつぎたして
コードを書いてく、代物なんで、クラスはVCの基本すぎる基本だと

VCにしろ、なんにしろ、まずはHelloWorldを表示するのから
はじめては・・・
VCではウィンドウにHelloWorld表示するのもえらく難儀やけど・・・
なんとかハンドラがどうのこうのと
わけわかりません・・・
0046デフォルトの名無しさんNGNG
>>42
MFCではそんなに面食らわないだろ。
簡単なアプリなんとなく出来ちゃうじゃん。
0047デフォルトの名無しさんNGNG
>>46
MFCどこにコードを入れていけばいいのか
初心者にはサパーーーーーリ
です・・・・
0048デフォルトの名無しさんNGNG
でるふぁいとか言う奴のほうが敷居は低いのかねえ・・・よう知らんけど。
0049デフォルトの名無しさんNGNG
Cとかでプログラムの経験があると
逆にMFCは面食らうと思う
何も考えないでウイザードで
適当にプログラム作って遊ぶとよいよ
0050デフォルトの名無しさんNGNG
わしCでは7〜8万行くらいDOSプログラミングしますた。
MFCで面食らってまつ。
なんかおすすめの書籍とかないでつか?スレ違い?
0051デフォルトの名無しさんNGNG
>>50
推薦図書/必読書のためのスレッド PART 8
http://pc2.2ch.net/test/read.cgi/tech/1041595397/
0052デフォルトの名無しさんNGNG
>>50
C++の知識は一通りあるんですか?
0053デフォルトの名無しさんNGNG
>>50
「Windowsプログラミングの基礎知識」 柏原正三 アスキー

本当に基礎の基礎なんだけど、MSDNで自習できる
程度にはなります。

0054デフォルトの名無しさんNGNG
習うより慣れよということで
いろんなところでHello World
http://www-kobayashi.ctrl.titech.ac.jp/~mtanaka/vc/
005550NGNG
ネタと思われるかとオモタが、みなさんありがとう。
ちなみにC++の知識は、ほとんど無いに等しいです。
>>53
明日買います。
>>54
今から見てきます。
005650NGNG
>>51
こっちも見てきます。
0057デフォルトの名無しさんNGNG
>>55
ネタとわかっていてマジレスしてやったんだよ。
0058デフォルトの名無しさんNGNG
(1) C++の学習に。

A. 独習C++ 第3版
Herbert Schildt 著
神林靖 監修
翔泳社
http://www.shoeisha.com/book/Detail.asp?bid=1460

B. 標準C++の基礎知識
柏原正三 著
アスキー
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3121-2.html

C. 標準C++の基礎知識 実践編
柏原正三 著
アスキー
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3563-3.html

(2) Windows API (非MFC)の学習に。

D. Windowsプログラミング標準講座(Windows95/98/NT/2000対応)
Herbert Schildt 著
山本信雄 監修
山本信雄 訳
翔泳社
http://www.shoeisha.com/book/Detail.asp?bid=41
0059デフォルトの名無しさんNGNG

E. プログラミングWindows 第5版(上)(下)
Charls Petzold 著
株式会社ロングテール 長尾高弘 訳
アスキー
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3600-1.html
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3601-X.html

(3) MFCプログラミングの学習に。

F. Windowsプログラミングの基礎知識
柏原正三 著
アスキー
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3252-9.html

0060デフォルトの名無しさんNGNG
>>58-59
この辺が自分が学習に使った本で、この板でも
わりと評価の高い本です。

あ、

「憂鬱なプログラマのためのオブジェクト指向開発講座」
著者: Tucker!
出版社: 翔泳社
ISBN: 4-88135-619-4

C++をやるなら、これも1冊読んでおいたほうがいいと思います。
0061デフォルトの名無しさんNGNG

順番としては
A -> 「憂鬱」 -> B -> C -> D -> F -> E
が良いんじゃないかと個人的には思います。

これでも例外処理とかSTLプログラミングが弱いので、
漏れ自身はその辺をカバーしている本を読まなくちゃと
思っているのですが。(Exceptional C++を注文中)

006250NGNG
マジかい!ってくらいお金かかりそうでつね。
わしは、TURBO-Cデビューなんだが、昔は付属の立派なマニュアル
ユーザーズガイド671ページ
リファレンスガイド823ページ
と入門書3冊程度で、入門段階はクリア出来たような記憶があるよ。
脳みそ柔らかくするのがたいへんそうでつ。冬の夜。30歳。
0063デフォルトの名無しさんNGNG
おまえら書籍スレに誘導されてるだろうに・・・
0064デフォルトの名無しさんNGNG
>>62
Cの時代から考えると、Windows自体のファンクションコールの数も
然ることながら、オブジェクト指向、Genericプログラミングなどの
新しい概念が次々と出てきましたからねぇ。C++のライブラリやMFC
などは、これらの概念を元に作成されているんで、なかなか敷居が
高いですね。
0065デフォルトの名無しさんNGNG

なんでMSDNはちょっと突っ込んだ記事を調べようとすると
英語ドキュメントしかないんだろう・・・。(-_-)

0066デフォルトの名無しさんNGNG
MSDNは使ってる内にサブタイがおかしくなるのはなぜだろう・・・。
0067デフォルトの名無しさんNGNG
俺はせめてリンク切れを無くして欲しい
0068デフォルトの名無しさんNGNG
リンク切れもイヤだけど、エンコードがおかしくなるページがあるんだけど、
どうやって直したらいいんでしょ?

0069デフォルトの名無しさんNGNG
エンコードはメニューにあるっしょ。つーかこれVCじゃなくてIEの使い方だな。
0070デフォルトの名無しさんNGNG
ダイアログでタブボタン押した時,移動する順番は変えられますか?
0071デフォルトの名無しさんNGNG
タブオーダーで変えられる。
0072デフォルトの名無しさんNGNG
ありがとうござい増した
0073super(novice)NGNG
ダイアログボックスの背景色を変更するにはどうすればいいのですか?
0074デフォルトの名無しさんNGNG
>>73
それくら検索しような。
ttp://www.google.com/search?q=%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9+%E8%83%8C%E6%99%AF%E8%89%B2+%E5%A4%89%E6%9B%B4
0075デフォルトの名無しさんNGNG
>>69
エンコードの切り替えがMSDNのメニューにないんですが。
0076デフォルトの名無しさんNGNG
>>75
すいません許してください
0077デフォルトの名無しさんNGNG
すみません。
前スレで質問させてもらったのですが、
流されてしまったのでもう一度書かせてください。

最近VisualStudio.Netを買って
VisualC++の勉強をはじめました。
シリアルポートを使った通信プログラムを作るのが目的です。
GUIの作り方とかファイルの入出力とかは参考書などによく載っているので、
それを読みながらなんとか進めているのですが、
シリアル通信については言及している本も見つからないし
ヘルプを見ても良く分からないしで困っております。
シリアル通信はどのように実現すればよいのでしょうか。
関数というかコマンドのようなものが用意されているのでしょうか。
0078デフォルトの名無しさんNGNG
>>77
MSDNの、

Platform SDK
-> Windows Base Service
-> Files and I/O
-> Communication

はどうですか?

hCom = CreateFile( "COM1",
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attributes
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);

サンプルにこんなのが載ってる。

日本語ドキュメント欲しいですねぇ。誰かPlatform SDKの全訳
プロジェクトやらんですか?

0079デフォルトの名無しさんNGNG
>>77
CreateFile()とかで"COM1"を開けば?
あとは SetCommState() WriteFile() ReadFile() あたりか。
0080デフォルトの名無しさんNGNG
被った(´Д`;
0081デフォルトの名無しさんNGNG
>>75
ページを右クリックして 「プロパティ」 出して、表示されたアドレスを
コピペで IE に貼り付けろ。
後は煮るなり焼くなり。
0082デフォルトの名無しさんNGNG
>>81
なるほど。今度遭遇したら、それでやってみまふ。

0083デフォルトの名無しさんNGNG
>>77
http://www.codeproject.com/system/#Hardware%20programming
0084デフォルトの名無しさんNGNG
>>77
> シリアル通信については言及している本も見つからないし

ピアソンの「Win32システムサービスプログラミング」
0085デフォルトの名無しさんNGNG
シリアル通信を介して Hello World
http://www-kobayashi.ctrl.titech.ac.jp/~mtanaka/vc/A/3-i.html
008677NGNG
みなさんありがとうございます。
本屋に行ったりネットで調べたりしても全然分からなかったのに
(ただ単に調べ方が悪いのですが)
あっという間にこんなに回答をいただけて
ちょっと驚いているというか感動しています。

>>78
>>79
ありがとうございます。
ヘルプの検索において「hcom」で検索したらそのサンプルを見られたのですが、
目次からだと「Platform SDK」がどこにあるのか分かりませんでした。
「MSDNライブラリ」の下にあるんですよね?
今後の参考のために教えてください。

>>83
早速メンバー登録してみました。
いくつかファイルも落としました。
参考にさせていただきます。
ありがとうございます。
008777NGNG
>>84
なるほど。
私は「シリアル通信」という言葉がタイトルに入った本を探してしまっていました。
考えてみればハードウェア的なことを抜きにしたら
シリアル通信だけで一冊の本にはならないですよね。
馬鹿でした。勉強させてもらいます。

>>85
ああ、唯一の日本語だ。
やはり、CreateFileやReadFileなんかを使って行うわけですね。
道筋が見えてきた気がします。

ちょっと何か調べようとすると
すぐ英語にぶち当たってしまうんですよね。
私は英語が苦手なんでそのたびにくじけそうになってしまいます。
でもそんなことも言っていられないですね。
0088デフォルトの名無しさんNGNG
質問です。コンパイルするとエラーが出ないのにプログラム実行すると
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/gagaga.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー
というエラーが出てしまいます。誰かアドバイスを。。。
0089デフォルトの名無しさんNGNG
すいません。sage進行みたいですね。ageてしまいました。
0090デフォルトの名無しさんNGNG
>>88
mainがない。
0091デフォルトの名無しさんNGNG
Windowsでも動くの?
0092デフォルトの名無しさんNGNG
(゚Д゚) ハァ?
0093デフォルトの名無しさんNGNG
>>91
そりゃ動くだろ!VC++だからな。
0094デフォルトの名無しさんNGNG
質問します。mfcのダイアログベースで、
2つのエディットボックスに数字を入力してボタンを押すと、
それらを計算(加減乗除)して出力するプログラムを作成していますが、
ボタンを押しても2つの数字が読み込めません。
今のところ以下のように書いています。
void CGUItestDlg::OnButton1()
{
double answer;
 answer=keisan.calc(m_num1,m_num2,0);
}
m_num1、m_num2はClassWizardのメンバ変数の追加で、
カテゴリは「値」、変数のタイプは「double」としました。
どのようにすればよいのか教えてください。
0095デフォルトの名無しさんNGNG
>>94
UpdateData(TRUE)
0096デフォルトの名無しさんNGNG
>>93
動くんですね! これで安心して買えます!
ありがとうございました!!
0097デフォルトの名無しさんNGNG
Win3.1だったりして……
0098デフォルトの名無しさんNGNG
>>94みたいな質問定期的に出てくるな。
どっかの宿題なのだろうか。
009994NGNG
>>95
できました。ありがとう。
0100デフォルトの名無しさんNGNG
ダイアログボックスベースでプログラムを組んでいます。
Staticコントロールを二つ付けていますが、どちらか一方だけの
色を白にしたいんですが、上手くいきません。
以下に示したものでは二つとも白になってしまいます。
何方かご教授お願いいたします。

HBRUSH CTESTDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// スタティック用のブラシを作成
CBrush myStatic;
myStatic.CreateSolidBrush(0xFFFFFF);
//文字の背景色を設定
pDC->SetBkColor(0xFFFFFF);

if(nCtlColor==CTLCOLOR_STATIC){ // スタティックコントロールの場合
return myStatic; // myStaticはあらかじめ作成されたCBrushオブジェクト
}

return hbr;
}
0101デフォルトの名無しさんNGNG
すいません、教えてくださいな。

ダイアログ上のEdit領域で文字入力中にTABキーを押すと、フォーカスが次のボタン等に移ってしまうのですが、フォーカスを移動させずにTABをEdit領域に入力することって出来るのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています