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

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

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

前スレ・関連スレは、>>2 ぐらい。
0239237NGNG
>>238
それが、WinMainで
char *p = new char[ 100 ];
を実行して、そのままdeleteせずに
終了しても何も表示されません。

ひょっとして、何かincludeしなければ
いけないとかいうことなのでしょうか?
0240デフォルトの名無しさんNGNG
>>239
単にデバッグ版を実行してるだけじゃなくて?
0241デフォルトの名無しさんNGNG
>>239
非MFC環境の場合であれば

#include <crtdbg.h>
_CrtSetDbgFlag()

これらに関連する関数等を調べていけば、
何かわかってくるかと。
0242デフォルトの名無しさんNGNG
俺の場合はAfxBiginThreadで起動したスレッドの先頭でCString msg;として
その中でmsg.Format云々を使ったりするとメモリリークになるんですが。
0243237NGNG
>>241
その関数を実行することで
リークが表示されるようになりました。
ありがとうございます。
0244222NGNG
>>223-224 できました。ありがとうございました。
0245デフォルトの名無しさんNGNG
>>242
TerminateThread使ってない?
0246デフォルトの名無しさんNGNG
ハンドルをグローバル変数にするのはだめですか?1回1回引数で渡すより
早いような気がして。後々問題とか出てきそうですけど。
0247かおりん祭りNGNG
http://www.saitama.gasuki.com/kaorin/

  〜oノノハヽo〜
     ( ^▽^)/⌒\                       , −-
     ((ニ[二=(  こんなのがございま−−==≡≡す♪  ))
   /∧=:||  \_/                       `ー‐‐'
     じ/___/
0248デフォルトの名無しさんNGNG
>>246
別に駄目って事は無いぞ。
0249デフォルトの名無しさんNGNG
Java厨じゃないんだから
グローバル=悪なんて固定観念
持つ必要はない
ライフタイムがプロセスと同一とか
終始アクセスが発生するとか
必要なら使えばいい
0250デフォルトの名無しさんNGNG
>>249
Javaだと駄目なのか?使ったこと無いから知らん。
0251デフォルトの名無しさんNGNG
分かりました。ありがとうございました。
0252超初心者NGNG
visualc++で、ボタンを押すと新しいフォルダを作成するようにさせるには
どうしたらいいですか??
0253デフォルトの名無しさんNGNG
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
のどこから
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
を呼び出しているのですか?うまく質問できないのですが、教えてください。
0254デフォルトの名無しさんNGNG
DispatchMessage(&msg);
0255デフォルトの名無しさんNGNG
>>253
CALLBACKの付いた関数はソースからではなく、
ウインドウズ(OS)から呼び出されるんですよ。
0256デフォルトの名無しさんNGNG
>>252
何か1冊初心者向けの本を読んだほうが良いと思われ。
フォルダの作成と、ボタンに反応する関数の作り方では
アドバイスが異なります。

0257253NGNG
>>254-255 分かりました。ありがとうございました。
0258デフォルトの名無しさんNGNG
>>245
使ってないっす(´Д`;)
そのスレッドの中でWaitForSingleObjectでループしてるんですが
そのループ内で宣言してあげたら何故かメモリリークが取れました。
・・・なぜ・・・?
0259デフォルトの名無しさんNGNG
// formatting (using wsprintf style formatting)
void AFX_CDECL CString::Format(LPCTSTR lpszFormat, ...)
{
ASSERT(AfxIsValidString(lpszFormat));

va_list argList;
va_start(argList, lpszFormat);
FormatV(lpszFormat, argList);
va_end(argList);
}

void AFX_CDECL CString::Format(UINT nFormatID, ...)
{
CString strFormat;
VERIFY(strFormat.LoadString(nFormatID) != 0);

va_list argList;
va_start(argList, nFormatID);
FormatV(strFormat, argList);
va_end(argList);
}
0260デフォルトの名無しさんNGNG
>>258
シングルスレッド用のライブラリになってない?
0261デフォルトの名無しさんNGNG
ウインアプリで、何もイベント(キーが押された、マウスが動いた等)が起こって
いないのに、表示したりできますか?できるなら教えてください。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(void)
{
for(;!kbhit();)printf("%8d",rand());
return 0;
}
コンソールで書くと、こんな感じです。
0262デフォルトの名無しさんNGNG
乱数を使ってタイマーを設定すればよろしいかと。
0263デフォルトの名無しさんNGNG
もまいらのおすすめの文献をおしえr・・・教えて下さい!
始めたばかりの初心者にぴったりな文献を、どうか、お願いしまつ。

Windowsプログラムより先に、MS-DOSのプログラムを先に
勉強した方がいいんでつか?

初心者的質問スマソ(´Д⊂
0264デフォルトの名無しさんNGNG
推薦図書/必読書のためのスレッド PART 9
http://pc2.2ch.net/test/read.cgi/tech/1046937366/
0265261NGNG
>>262 できました。ありがとうございました。
0266デフォルトの名無しさんNGNG
マイクロソフトのC++でソフトを作りたいのですが
販売しているパッケージがいろいろあってどれを使えば買えばいいのか
分かりません、以下の用途の場合どのパッケージを買ったらいいのでしょうか?

・C/C++はまったくの初心者で使いながら学習していきたい
・画像ビューアを作りたい、GV,Susie,IrfanViewのようなもの
0267デフォルトの名無しさんNGNG
>>266
standard で十分と思ふ。
お金に余裕があるなら Professional を
購入してもいいと思うけど。

Win98なら、VC++6.0しか選択肢なし。
Win2000/XPなら、VC++.NETも使える。

.NETは良く分からんので、他の人に聞いとくれ。

0268デフォルトの名無しさんNGNG
>>266
一番高いのを買っておけば間違いはないよ
0269デフォルトの名無しさんNGNG
VC++を買うなら最低Pro。Standard買うぐらいならbccなりgcc(Migw/Dev-C++)で充分。
もっとも.netの場合VC++.netはstandard版しかないので自動的にVisual Studioになるが。

ちなみにアカデミック版VS.netはVS 2003への無償アップグレードの対象外らしいので注意。
0270デフォルトの名無しさんNGNG

VC++ Pro と Std の違いは
Standard -> MFC のみ
Professional -> MFC + ATL
だと思ったのですが、ATLってのはそんなに便利なんですかね?

自分はVC++6.0 Pro持ってるんですが、ATLは使ったこと無いので、
MFC + Platform SDK で十分かなぁと思ったもので。

0271デフォルトの名無しさんNGNG
わざわざ金払って最適化もできないコンパイラが欲しいなら止めないが。
0272デフォルトの名無しさんNGNG
つーか舞糞よ
いいかげんVisualC++.net Pro出せ
Stdなんか買うがボケが
0273学生NGNG
>>272
はげどう。
でも漏れは2003赤出身苦を待つけどなー。
0274デフォルトの名無しさんNGNG
>>270
>ATLってのはそんなに便利なんですかね?
人による。俺はATL+WTLの組み合わせが大好きだがね。
いずれにせよStdにもATLは付いているとは思うが。
0275266NGNG
おすすめは Pro のようですね
単品でのProはやっぱりないのですね、Standardしかないからおかしいと
思ってました・・・

ついでといってはなんですが、でた話で聞きたいことが
今購入すると2003への無償アップグレードが可能なのですか?
2003はいつごろ発売予定なのでしょうか?

ちょっとスレと離れてきてすいません
0276デフォルトの名無しさんNGNG
すいません。
ソース打ち込んでるときに"cout"(もちろんこの他も)と打ち込みビルドすると、
Unicode識別子はサポートされていません となり、エラーが起こってしまいます。
どうしたらよいでしょうか?
0277デフォルトの名無しさんNGNG
>>276
全角で打ち込んでないか?
スペースとか。
0278159NGNG
あれからこの板に来てなくて今見にきたらレスがあったので
返答を…古い書き込みに対してのレスですいません。

>>172
大当たりでした!!まさにそのとおりです。
おかげさまでワークスペースを開くをボタンイメージにして、
開くの横に設定できました。こんなチェックボックス今までいじったこと
ないのになぜだったんだろう…?
でも、治って(思い通り)嬉しいです、ありがとうございました。
そして私の書き込みに対して返答してくれた方もありがとうございました。
0279デフォルトの名無しさんNGNG
質問です。
DLL内で自分で発行したWM_TIMERを受け取るには
ウィンドウ作るしかないんでしょうか。
0280デフォルトの名無しさんNGNG
スタティックコントロールって MOUSEMOVE イベントは受信できないんですか?
追加する方法ってあるんですか?
0281デフォルトの名無しさんNGNG
cout << "ゲームオーバー" << end;

↑を打ち込んでビルドしたら、
error C2297:'<<':無効な右オペレントです。 と言われますた。
どうすればいいんですか?
0282デフォルトの名無しさんNGNG
>>281
endじゃなくてendl
エルがつくの。
0283281NGNG
>>282
そうなんですかw
ありがとうございます。

ぶっちゃけ、end1;と打ってました(w
すいませんでした。
0284281NGNG
cout << "ゲームオーバー" << endl;

上を打ち込んでビルドしても、
error C2297:'<<':無効な右オペレントです。 と言われますた。。。
どうしたらいいでしょう。。
0285デフォルトの名無しさんNGNG
>>284
#include <iostream>
using namespace std;は?
0286281NGNG
こんな感じです。>>285
#include <iostream>
#include <time.h>
#include <math.h>
#include <stdlib.h>

void main()
{
//変数宣言
int ans, myans, score;
bool bContinue = true;
char res;

//ゲームのループ
while(bContinue){
cout << "***** 数当てゲーム *****" << end1
<< "こちらが考えている0-99の範囲の数を当ててください" << endl;

score = 0;
srand((unsigned)time(NULL));
ans = rand() % 100;

0287281NGNG
//プレイ中のループ
while(1){
cout <<"数値を入力してください" << endl;
cin >> myAns;

// 正否判定
if(myAns == ans)
break;

//程度判定
if(abs(myAns - ans) > 30){
cout << "かなり";
}else{
cout << "少々";
}

// 大小判定
if(myAns > ans){
cout << "大きいです。" << endl;
}else{
cout << "小さいです。"<< endl;
}


score++;
}

//プレイ終了処理
cout <<"正解です!"<< end1
<<"あなたは、"<< score <<"で正解しました!"<< endl;
0288281NGNG
cout << "リプレイしますか?(y/n)";
cin >> res;
if( res != 'y' && res !='y')
bContinue = false;
}

//ゲーム終了処理
cout << "ゲームオーバー" << endl;
}
0289mainはintにしろよNGNG
>>286
main()の上にでもusing namespace std;と書くか、coutやendlにstd::をつける。
0290281NGNG
>>289
using namespace std;と入れたところ、エラーが激減しました。
ありがとうございます。

あと、エラーふたつあるんですが、

//プレイ中のループ
while(1){
cout << "数値を入力してください" << endl;
cin >> myAns;
の三行目に対し、
error C2065:'myAns':定義されていない識別子です。
error C2593:'operator >>'があいまいです。

となってしまいました。
0291デフォルトの名無しさんNGNG
>>290
C++では識別子は大文字と小文字を区別する。
0292デフォルトの名無しさんNGNG
>cout << "***** 数当てゲーム *****" << end1
・・・
0293281NGNG
>>291
A→aにしたところ、識別子エラーがなくなりました。
>>292
全角スペースを半角にしました。

お二方ありがとうございます。

また、エラーが発生しました。
error: LNK2019:未解決外部シンボル_WinMain@16関数_WinMainCRTStartupで参照されました。
fatal error:LNK1120:外部参照1が未解決です。

と表示されますた。
0294デフォルトの名無しさんNGNG
>>293
Win32 Console Applicationでプロジェクト作り直してみて。
0295281NGNG
>>294
出来ました!
ありがとうございます。

いろいろご教授してもらい、皆様、誠にありがとうございました。。
0296デフォルトの名無しさんNGNG
>>280
スタティックコントロールの背景のウインドウ(親ウインドウ)
にMOUSEMOVEイベント送られて来てないですか?

ペゾルトによるとスタティックコントロール上でマウスの移動や
クリックがあると、コントロールが親ウインドウに WM_NCHITTEST
を送って、DefWindowsProc がこれをクライアント領域の
マウスメッセージに変換するそうです。
クライアント領域で自分でマウスの位置を計算するか、コントロールを
サブクラス化するしかないんじゃないでしょうか。


0297デフォルトの名無しさんNGNG

ところで HTTRANSPARENT ってなんですっけ?
どこかで見た記憶があるんですが、関数なのか
パラメータ値なのか、メッセージなのか忘れてしまった。

0298デフォルトの名無しさんNGNG
WM_NCHITTESTの返り値。
In a window currently covered by another window in the same thread
(the message will be sent to underlying windows in the same thread
until one of them returns a code that is not HTTRANSPARENT)
だそうだ。
0299デフォルトの名無しさんNGNG
>>297
検索の仕方も忘れたか
0300デフォルトの名無しさんNGNG
VC++.NETで
http://members.tripod.co.jp/aiton21/a.jpg
こんな感じの、リストの上をクリックしてソートできる物を作りたいのですが
http://members.tripod.co.jp/aiton21/b.jpg
ここからどうやればよいのか分かりません。。。
とりあえずリストボックスを書いてみたんですが
ほかにそれらしき物は見当たらず・・・。
0301デフォルトの名無しさんNGNG
>>298
あー 発見しました。
WM_NCHITTESTの返り値でしたか。

>>299
MSDNのキーワードで検索してますた。^^;
0302デフォルトの名無しさんNGNG
>>300
リストビューのレポート形式
0303デフォルトの名無しさんNGNG
音楽再生機能を持たせたいのだが参考になるものないかなぁ・?
0304デフォルトの名無しさんNGNG
VC++でボタンなどにビジュアルスタイルを対応させるためのソースコード教えて下さい。
0305デフォルトの名無しさんNGNG
インスタンスハンドルからウインドウハンドルを取得したいのですが、
何かいい方法はありますか?
0306デフォルトの名無しさんNGNG
>>305
残念でしたまたどうぞ
0307デフォルトの名無しさんNGNG
>>303
Google
0308デフォルトの名無しさんNGNG
>>306
氏ね
0309300NGNG
>302
どもです!ちょっと試してみます。
0310デフォルトの名無しさんNGNG
>306
どもです!ちょっと試してみます。
0311300NGNG
C++難しいっすね・・・。かなり疲れました。
無事リストを描けたんですがリストにアイテムを追加
するにはどうすればよいんですか?コントロールの変数しか
追加できないんですが・・・。
0312デフォルトの名無しさんNGNG
コンソールアプリ+外字エディタの将棋をウインアプリに作り直したいと
思っているのですが、CONの思考中(再起呼び出し中)落ちたりしませんか?
0313デフォルトの名無しさんNGNG
>>312
あんたがヘタレだから落ちます。絶対に。
0314デフォルトの名無しさんNGNG
>>312
落ちるかどうかはどうプログラムを組むかによるだろ。
313に同意。

>>311
MSDN見ろ
0315214NGNG
いや見たんですけど分からなくて。。。
もっかい見てみます。
0316300NGNG
↑300の間違いです
0317デフォルトの名無しさんNGNG
MSDNのDirectXのヘルプはわかりやすかったが、
VisualC++関係のヘルプの日本語が理解できないです。
助けてください。
0318312NGNG
>>313-314 強さは激指1三段の2枚落ちと互角です。そこそこだと思うのですが。
コンソールアプリだと永久ループでキー入力を待っています。CONの思考中の時は
再起呼び出し中から抜けるボタンを用意しています。ただウインアプリはイベント
トリブン方式(始めから永久ループが用意されている)なのでどうかなと。
思考中に小分けにWinMainの永久ループに戻すみたいなことをすればいいの
ですかね。

永久ループ→CONの手番→CONの思考
↑           ↓
←    ←    ← 抜けるボタン(中断など)を押した∨思考終了
0319デフォルトの名無しさんNGNG
>>318
いやアンタのアルゴリズムが強いか弱いかじゃなくて……

スレッドつくってそっちに任せたほうがいいんじゃないか。
0320デフォルトの名無しさんNGNG
>>307
みつからないんですぅ〜
0321デフォルトの名無しさんNGNG
>>305
ウインドウハンドルからインスタンスハンドルはできますけど、
逆はできるんですかねぇ。俺も知りたいところですが。
0322デフォルトの名無しさんNGNG
>>321
出来たとしても使ってるウインド全部引き連れてくるんじゃないの。
0323デフォルトの名無しさんNGNG
当方の使ってるソフトがvisual C++.net で、
参考書(古い奴)通りにやると、古いとか何とかがでるんだけど(ビルド時じゃなくて)、
新しい参考書買ったほうがいいのかな?
0324デフォルトの名無しさんNGNG
>>323
説明不足で回答不能。
0325デフォルトの名無しさんNGNG
>323
CやC++の本の勉強をVCでやろうとしてる?
0326デフォルトの名無しさんNGNG
>>323
どうせANSI以前の本でも借りてきたんだろ
大人しくVC++.NETの本を買っとけ
どうせANSI準拠の本買ってもコンパイラ通るか怪しいんだから
0327323NGNG
>>324
すいません。。
>>325
その通りです。
>>326
うぃ。
0328デフォルトの名無しさんNGNG
>>327
ソースとエラーメッセージをうざく無い、程度に書きこんでみるのが吉。
誰か親切な方が、それなりに答えてくれますよ。
0329デフォルトの名無しさんNGNG
>>322
そうですね。
やっぱりできないのかな。複数のウインドウハンドルが
返って来ても、どれが欲しいハンドルなのか判別できないような
気がする。
0330デフォルトの名無しさんNGNG
>>329
結局何がやりたいのか相談したら?
別のもっといい方法があると思うが。。。
0331デフォルトの名無しさんNGNG
>>329ですが。

>>330
漏れは質問者ぢゃないので。^^;

0332デフォルトの名無しさんNGNG
クラスのメンバ関数を呼び出すのはオブジェクトを定義しないとむりですか?
0333デフォルトの名無しさんNGNG
>>332
static関数にすれば呼べるが、クラス設計に注意汁。
0334デフォルトの名無しさんNGNG
仮想関数だから無理だボケ!って言われました。。。
もうちっと勉強してきます
0335335NGNG
■ VisualC++(MFC限定)相談室 MFC7.dll■から誘導されてきました。
質問なんですが
あるcppファイルから他のヘッダを取り込んで
他のヘッダにあるクラスでオブジェクトを宣言しようとすると、
コンストラクタ関数を呼び出したことになってしまいます。
オブジェクトを新たに宣言できないんですがどうすればいいですか?
0336デフォルトの名無しさんNGNG
>>335
イマイチ言ってる意味がわからんのだが。
あるクラスのインスタンスを宣言したらコンストラクタは必ず呼び出される。

プログラム開始時に呼びたくないのであればポインタで宣言して好きなときにnewしる
0337デフォルトの名無しさんNGNG
>>335
クラスの構成がこんな感じになってたりするとか?

--A.h--
#include "B.h"
class A{ ... B testB; };
------
--B.h--
#include "C.h"
class B{... C testC };
------
--C.h--
#include "A.h"
class C{... A testA };
------
0338デフォルトの名無しさんNGNG
>>335
MFCスレをみてきたけど……
正直、もう少しC++について調べる必要があると思われ。
知識なさすぎ。

……人に聞くのは「調べる」って言わないからね。念のため。
■ このスレッドは過去ログ倉庫に格納されています