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

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

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

前スレ・関連スレは、>>2 ぐらい。
0207デフォルトの名無しさんNGNG
>>202は、CSVファイルをちゃんとParse出来ているんだろうな。。。?
まさか、一行一フィールドとして処理してないだろうな。。。
0208ひよこ名無しさんNGNG
最近 Visual C++ に手を出した元 Visual Basic ユーザーです。

そこで質問なんですが、
Visual C++ のコントロール(フォームベースのやつ)と VB のコントロールって
つまりは何が違うんですか。扱う上で。

お絵かきソフトっぽくしようとしてピクチャ貼り付けたらどうも上手くいかない・・・。
VB だったらピクチャーコントロール貼り付けて MOUSEMOVE にコード書けば
OKなんですが。。。

うーん。なんかよくわかりません。
0209デフォルトの名無しさんNGNG
VBライクに組みたいなら、Builderの方がいいかもね。
0210208NGNG
あのう、VCで VBのピクチャコントロールに相当するものって
ピクチャってやつですよね?

あそこに MouseMove の処理を書きたいときってどうすればいいんですか?
0211デフォルトの名無しさんNGNG
VBで〜したのをVCではどうすれば良いって聞くよりは、VCで〜をしたいと書いた方がいいと思うが。
0212デフォルトの名無しさんNGNG
うむ。ピクチャコントロールとか言われても何のことか
わからん。
0213デフォルトの名無しさんNGNG
俺はピクチャと言われてもピンとこん。
0214デフォルトの名無しさんNGNG
VBのピクチャコントロールとは
PictureBox のことと見た。
0215デフォルトの名無しさんNGNG

BMP画像を貼りつけて、その上にマウスカーソルが
あるかどうかを感知したいんですかね?

0216デフォルトの名無しさんNGNG
>>215
単純にグラフィックしたいだけかも知れんぞ。
それなら、そのままFormに描けばいい。
あと、Messageについて勉強することだな。
0217デフォルトの名無しさんNGNG
>>184-189
まだ読んでるかな?
VC++のウィザードってのは、あれはたんっっっっなる
ソースコード生成ツールだからその点よろしく。
でもMFCを使うならウィザードが作るコードを骨組みに
するのがお勧め。
0218デフォルトの名無しさんNGNG
>>184
3はギャグだよな?
0219208NGNG
>>216
そうです。その通りです。

Form に描画の処理書く方法もあるんですが、ピクチャボックスっぽい外観を
付けたい場合はどうすればいいんでしょう?
(左半分に描画域、右半分にボタン類を付けたい)

CView クラスをそのまま継承すれば描画処理は簡単に作れると思いますけど、
どうしてもフォームベースで作ってみたいんです。
0220デフォルトの名無しさんNGNG
スレ違いのような気もするのですが…教えてください。
VC++でフリーソフト作って公開するに当たって、
中には「動作環境」を記載しているサイトもありますが
あれはロウスペックのPCに入れて動くか動かないかを
徐々に試していくしか方法はないのでしょうか?

それともPCの動作を制限し、その上でexeファイルを動かせるような
ソフトがあるのでしょうか?
0221デフォルトの名無しさんNGNG
>>219
Staticか、使ったこと無いけどPictureコントロールを貼り付けて
右クリックでプロパティー出してスタイル変更。
設定できないスタイルや背景色はは、別途プログラムで変更できる。
ttp://www.kumei.ne.jp/c_lang/ も参考にするべし。
0222デフォルトの名無しさんNGNG
ウインアプリでウインドウを作る時に
myProg.hbrBackground=GetStockObject(WHITE_BRUSH);//背景
の所に
error C2440: '=' : 'void *' から 'struct HBRUSH__ *' に変換することはできません。
と言うエラーが出るのですが、解決方法を教えてください。
0223デフォルトの名無しさんNGNG
myProg.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);//背景
0224デフォルトの名無しさんNGNG
>>222
これは良く出るエラーだな。型をしっかり指定すればOK!
0225デフォルトの名無しさんNGNG
>>220
「CPU:最低400MHz」とかいうの?
ゲームとかでヨッポドタイムクリティカルなものでもなければ、意外と適当と思われ。
自分のPCで、クロックダウンして動かしてみるとか(w
0226デフォルトの名無しさんNGNG
今まで、ボーランドのフリーの使ってましたが、ここを読んで、勢いあまってVC++.NET購入したんですけど、使い方が全然分からないです。
とりあえずプログラム動かしたいんですけど、どうすればいいんすか?
誰か丁寧に教えてくだしい。
0227aaaNGNG
http://www5b.biglobe.ne.jp/~ryo-kyo/osu.html

http://my.vector.co.jp/servlet/System.FileDownload/download/ftp/0/279026/pack/win95/game/table/pachinko/sikisai.lzh
0228デフォルトの名無しさんNGNG
>>226
「Windowsプログラミングの基礎知識」 柏原 (ascii)
おすすめ。
0229デフォルトの名無しさんNGNG
>>225
クロックダウン…なるほど…
危険そうな言葉ですが頭には入れておきます。
どうもありがとう!
0230デフォルトの名無しさんNGNG
COM コンポーネント作ってみたんですけど、全体的に作り直したいんで、
全部削除して最初からやり直したいんです。

COM って作った時点でレジストリに登録されますよね?
ですから、作業フォルダだけ消したら問題が生じると思うんですが。。。
レジストリから削除するにはどうすればいいんですか?
0231デフォルトの名無しさんNGNG
regeditで削除すりゃいいじゃん。
0232デフォルトの名無しさんNGNG
Windows2000で、通常使用するプリンタを任意に
切り替えるプログラムを作成したいのですが…。
SetPrinterが失敗してしまって、切り替えることができません。
なにか方法はありますでしょうか?
0233デフォルトの名無しさんNGNG
>>220=229
最低限のクロック周波数なんてみんな結構いい加減だよ。
「責任逃れ」な値を書いておけば大丈夫(笑)

それよりもプラットフォーム(98/Me/NT4.0 等)の心配したほうがよろし。
0234bloomNGNG
http://www2.leverage.jp/start/
0235デフォルトの名無しさんNGNG
>>233
あれって、手持ちにあるPCの中でも低スペックのもので動作させて、
満足行くような処理が出来たらそれが最低環境っていう風に決めてんじゃないの?
0236デフォルトの名無しさんNGNG
超初心者は何やったらいいんだろう・・・
とりあえず箱を抱いて寝ています。
0237デフォルトの名無しさんNGNG
デバッグ実行後メモリリーク(解放忘れ)があった場合、
そのことがアウトプットに表示されるようにするには
どうすればいいのでしょうか?
知人が表示させているのを見たことがあるのですが、
どこで設定すればそうなるのかわかりません。
0238デフォルトの名無しさんNGNG
>>237
デバッグ環境だと普通に表示されると思うが。。。
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
■ このスレッドは過去ログ倉庫に格納されています