★初心者にVisual C++を教えるスレ★ Part29
at TECH
1:Part28の1000
08/02/15 01:45:56
Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。
■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。
質問の仕方については次のページが大変参考になります。
URLリンク(www.hyuki.com)
URLリンク(myu.daa.jp)
■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
(MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。
過去スレ、関連スレなどは>>2-5辺り。
2:デフォルトの名無しさん
08/02/15 03:00:12
Part28 スレリンク(tech板)
Part27 スレリンク(tech板)
Part26 スレリンク(tech板)
Part25 スレリンク(tech板)
Part24 スレリンク(tech板)
Part23 スレリンク(tech板)
Part22 スレリンク(tech板)
Part21 スレリンク(tech板)
Part20 スレリンク(tech板)
Part19 スレリンク(tech板)
Part18 スレリンク(tech板)
Part17 スレリンク(tech板)
Part16 スレリンク(tech板)
Part15 スレリンク(tech板)
Part14 スレリンク(tech板)
Part13 スレリンク(tech板)
Part12 スレリンク(tech板)
Part11 スレリンク(tech板)
3:デフォルトの名無しさん
08/02/15 03:00:34
Part10 スレリンク(tech板) ※
Part09 スレリンク(tech板) ※
Part08 URLリンク(pc5.2ch.net)
Part07 URLリンク(pc5.2ch.net)
Part06 URLリンク(pc5.2ch.net)
Part05 URLリンク(pc5.2ch.net)
Part04 URLリンク(pc5.2ch.net)
Part03 URLリンク(pc5.2ch.net)
Part02 URLリンク(pc3.2ch.net)
Part01 URLリンク(pc3.2ch.net)
4:デフォルトの名無しさん
08/02/15 03:01:00
【関連スレ】
■MFC相談室 mfc18d.dll■
スレリンク(tech板)l50
Win32API質問箱 Build57
スレリンク(tech板)l50
【C++】 DirectX初心者質問スレ Part14 【C】
スレリンク(tech板)l50
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
スレリンク(tech板)l50
C++相談室 part56
スレリンク(tech板)l50
C/C++の宿題を片付けます 95代目
スレリンク(tech板)l50
【初心者歓迎】C/C++室 Ver.42【環境依存OK】
スレリンク(tech板)l50
【関連サイト】
猫でもわかるプログラミング
URLリンク(www.kumei.ne.jp)
MSDN ライブラリ ※変更された
URLリンク(msdn.microsoft.com)
URLリンク(msdn2.microsoft.com) (2005のことはこっち)
Platform SDK Update ※変更された
URLリンク(www.microsoft.com)
Google
URLリンク(www.google.co.jp)
5:デフォルトの名無しさん
08/02/15 03:01:26
【このスレの前身 VisualC++相談室 過去スレ】
part 1 URLリンク(piza.2ch.net)
part 2 URLリンク(piza.2ch.net)
part 3 URLリンク(piza2.2ch.net)
part 4 URLリンク(pc.2ch.net)
part 5 URLリンク(pc.2ch.net)
part 6 URLリンク(pc.2ch.net)
part 7 URLリンク(pc.2ch.net)
part 8 URLリンク(pc.2ch.net)
part 9 URLリンク(pc5.2ch.net)
テンプレ終わり。
6:デフォルトの名無しさん
08/02/15 03:26:38
Platform SDKの中で一番新しいのはこっち
Microsoft Windows Server 2003 R2 Platform SDK Web Install
URLリンク(www.microsoft.com)
(ISO版などあり)
これ以降、Platform SDK + .NET Framework SDKとして
Windows SDKが公開されていて、その中で一番新しいのはこれ。
Windows SDK for Windows Server 2008 and .NET Framework 3.5
URLリンク(www.microsoft.com)
少し前のバージョン(Vista + .NET 3.0の初期版)には日本語版もあったけど、
日本語化されているのは専ら.NET Framework部分だけ。
7:デフォルトの名無しさん
08/02/15 03:41:49
VC6対応の、最後のPSDKはここ。
URLリンク(www.microsoft.com)
8:デフォルトの名無しさん
08/02/15 06:04:51
>>1乙
ブチキレるのは勝手だがし、新スレも立ってねーのに
くだらねーKYレスでうめんなよな、998
9:デフォルトの名無しさん
08/02/15 07:59:05
前スレ 997 です。
999 さんありがとうございました。
10:デフォルトの名無しさん
08/02/15 10:50:53
こんなスレに立ち寄るだけ無駄。
11:デフォルトの名無しさん
08/02/15 10:52:02
スレ削除すべき
12:デフォルトの名無しさん
08/02/15 10:52:36
>>10-11ってリアルでも人生こんなもんか
13:デフォルトの名無しさん
08/02/15 12:22:51
うるせーよ。
まともに俺の質問にも答えられない愚民どもが。
14:デフォルトの名無しさん
08/02/15 14:19:22
前スレ>>995
>ポインタのポインタではだめなの?
freeとかdeleteを使うのがめんどくさいので
CArrayあたりでできないかと思いこのスレに来ました。
CArrayだとプログラムが終わったら領域解放してくれると
聞いたことがあるけど間違いかな?
15:デフォルトの名無しさん
08/02/15 14:33:18
CArray はよく分かんないけど、
とりあえず vector ならこうできる。
typedef int Four[4];
std::vector<Four> data;
16:デフォルトの名無しさん
08/02/15 14:41:03
mallocだろうとnewだろうとCArrayだろうとと、
プロセスが死ねばOSが解放する。
それが適切であるかどうかは別にして。
17:デフォルトの名無しさん
08/02/15 14:45:28
デストラクタが領域を解放してくれる、だな。
18:デフォルトの名無しさん
08/02/15 14:52:34
>>17
ちゃんと読んでるか?
19:デフォルトの名無しさん
08/02/15 16:21:54
push_back' : 1 番目の引数を 'int' から 'const int (&)[4]' に変換できません。
理由: 'int' から 'const int [4]' へは変換できません。
配列型への変換はありませんが、参照またはポインタから配列への変換があります。
int i,j;
typedef int Four[4];
std::vector<Four> data;
for(i=0; i<5; i++){
data.push_back(i);
for(j=0; j<4; j++){
data[i][j]=j;
}
}
20:デフォルトの名無しさん
08/02/15 16:23:41
>15
となりました。
根本的に使い方が間違っているのでしょうか?
ちなみにCArrayで同じことをやろうとすると、
宣言自体でコンパイルエラーになりました。
21:デフォルトの名無しさん
08/02/15 16:35:37
>20
VCやる前にCやC++の基礎をしっかりやった方がいいと思う。
数学の授業で足し算や引き算みたいな数学以前の質問されたら迷惑だろ
22:デフォルトの名無しさん
08/02/15 16:40:35
CArrayなんか使ってるやついるの?
23:デフォルトの名無しさん
08/02/15 16:42:56
カレーってよむの?
24:デフォルトの名無しさん
08/02/15 18:00:49
課題で「点数をキー入力してファイルに出力せよ」
→「次に作成したファイルから点数を入力し、合計と平均を出せ」
って言われたんだけど、「作成したファイルから点数を入力し」
の部分がよく分からない。
最初に入れた点数に意味は無いのかな?
入力したら上書きされるよね?
25:デフォルトの名無しさん
08/02/15 18:06:56
>>24
ここはガキの宿題に答えるスレじゃない。
入力とはキー入力の事だけをさすのではない
ファイルからデータを読み込むことをファイル入力
データを書き込むことをファイル出力という
その分は説明が不十分な気はするな。
キー入力、ファイル出力、ファイル入力までは書いてあるのに
合計と平均を何に出力するのかが書いていない。
まあおそらく画面出力のことだ。
「ファイルからデータを読み込んで、合計と平均を画面に出力せよ」
こういう事だろうよ。
26:デフォルトの名無しさん
08/02/15 19:20:33
>>25
分かりやすい解説ありがとうございます
自分の不勉強でした
27:デフォルトの名無しさん
08/02/15 21:27:14
すいません。
vectorについてお礼を言うのを忘れていました。
2次の動的配列ならいろいろと検索すれば
すぐに出てくるのですが、1次が固定で2次が動的
意外にないものですね。
スレ違いなのでここまでにさせていただきます。
28:デフォルトの名無しさん
08/02/15 22:14:36
std::vector< boost::array<int,4> >
29:デフォルトの名無しさん
08/02/16 08:30:33
>28
ありがとうございます。
他のスレで構造体を使う方法と,boost::arrayを
使う方法を教えてもらいましたが、
boost::arrayは自分でコンパイルしないといけないみたいですね。
30:デフォルトの名無しさん
08/02/16 09:22:02
マルチうぜーよ。子ね
31:デフォルトの名無しさん
08/02/16 09:31:10
番号、氏名、英語、数学、国語
こんなのを動的に追加するサンプルはよくあるだろ
これをこうして
番号、氏名、成績[3]
こうしたら
成績[3]
3つ固定のデータを動的に追加じゃないか
32:デフォルトの名無しさん
08/02/16 11:10:46
すいません。vector 構造体も vector boost::arrayも
問題は両方解決しました。
マルチでスレを汚してそのまま去るのもいい加減なので
お礼だけ言っておきます。
33:デフォルトの名無しさん
08/02/16 13:30:18
ここでき聞いていいのか分かりませんが・・・。
MFCでAppWizardでSDIを選択しましたが、
デフォルトのCViewではなくCFormViewを
使いました。
そのFormの上にエディトボックスを貼り付け、
テストで試しに線を引いてみるとこにしました。
34:デフォルトの名無しさん
08/02/16 13:40:30
OnInitialUpdate()で次のように描いています。
CDC* pDc;
pDc=m_Edit1.GetDC(); //m_Edit1はエディトボックスをメンバ変数に
CPen NewPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0,0,0));
CPen* OldPen=pDc->SelectObject(&NewPen);
pDc->MoveTo(0,0);
pDc->LineTo(50,50);
pDc->SelectObject(OldPen);
NewPen.DeleteObject();
どこが間違っているかさっぱり分かりません。
それともエディトボックスに描画はできないのでしょうか?
ホームページとかで調べるとできるようなことは書いているのですが。
35:デフォルトの名無しさん
08/02/16 14:02:47
別にボタンを作って同じコードを書いてボタンを
クリックしたら描画するようにしたらできた。
不思議だ。なぜ?
36:デフォルトの名無しさん
08/02/16 14:04:01
Windowsでは見えない部分は描かれない。
OnInitialUpdate()がどんな時に呼ばれるか調べな。
37:デフォルトの名無しさん
08/02/16 15:54:12
MFCでCFormViewのOnDraw関数でウィンドウのサイズが
変わったら再描画するようにしても一瞬だけ表示されて
消えてしまいます。
いいアドバイスがあったらお願いします。
38:デフォルトの名無しさん
08/02/16 16:57:53
何でエディトボックス?
違うもので試してみようと思わないのか?
39:デフォルトの名無しさん
08/02/16 17:19:41
グラフを書くのに文字も入れないといけないかと思い
実験していたところです。
40:デフォルトの名無しさん
08/02/16 17:25:22
エディトボックスじゃなくても字はかけるよ
41:デフォルトの名無しさん
08/02/16 17:41:19
そうですか、それではピクチャーボックスで試してみます。
しかし、エディトボックスで再描画がおかしくなる理由が
分かりませんね。
42:デフォルトの名無しさん
08/02/16 18:33:12
>>41
CFormViewのOnDrawではCFormViewのクライアント領域に描いてるから。
その上に乗ってるエディットボックス自身の再描画で上書きされる。
エディットボックスに描きたければ、サブクラス化してエディットボックスの再描画を乗っ取れ。
43:デフォルトの名無しさん
08/02/16 22:38:08
>42
ピクチャーボックスで再描画すると普通にできるのでとりあえずは
そっちでやることにします。
別に質問します。
ずっと前に、エディトボックスの右クリックを実現しようとして、
サブクラス化したのですが、なぜかリソースエディタが使えませんでした。
仕方ないので、createしてコードで作ったのですが、そういう場合でも
リソースエディタを使うことができますか?
44:デフォルトの名無しさん
08/02/17 02:39:14
>>36
こんな糞スレじゃなくてム板いけ。
書き込む前にスレに軽く目を通せばおかしいってわかるだろうが。
★初心者にVisual C++を教えるスレ★ Part29
スレリンク(tech板)
45:44
08/02/17 02:42:01
誤爆orz
46:デフォルトの名無しさん
08/02/17 02:47:34
バーかw
47:デフォルトの名無しさん
08/02/17 03:02:53
>>44に感謝して質問させていただきます。
自分のパソコンで一時的に(実家にいるときとかとかに)コードとかを書いて、出来ればデバッグまでおわらせて
実行するのは大学のパソコンで行いたいんだけど、この場合はプロジェクトの種類は何を選べば良いでしょうか?
使ってるのはVisual C++ express editionなんですが。
大学のlinuxではバージョンは分からないですがg++でコンパイルです。
Makefileも欲しいんですが、そんなことって出来ますか?
48:デフォルトの名無しさん
08/02/17 03:03:05
誤爆で説得力なくなる文だなw
専ブラはたまにこれやらかすな
49:デフォルトの名無しさん
08/02/17 03:06:06
>>47
Win32コンソールでいいかなあ
Makefileは昔のVCは作れたけど、今のは無理かな
まあMAKEだけ別管理にするのがよさげ
50:デフォルトの名無しさん
08/02/17 03:16:17
>>47
Cygwin入れた方が手っ取り早いと思う。
51:デフォルトの名無しさん
08/02/17 03:26:55
>>49
なるほど。サンクス。
>Makefileは昔のVCは作れたけど
「全般」っていう種類のプロジェクトにメイクファイルプロジェクトっていうのがあるけどこれ?
>>50
今wikipedia見たらvmwareみたいなやつか。
vistaで不安定って書いてあったからちょっと引け腰。
52:デフォルトの名無しさん
08/02/17 05:04:57
vmwareとはエミュレートするレベルが違う
vistaで不安定ならvmwareにXPでも入れて動かせばいいじゃない
53:デフォルトの名無しさん
08/02/17 05:09:57
>>52
vmwareを入れるのならXPでなくターゲットのlinuxそのものをその上にインストールすればいいんじゃないかw
>>51
エミュレーションソフトを入れて大学のlinuxと同じもので開発環境を構築してみては?
54:47
08/02/17 05:50:19
再度すみません。>>47です
とりあえずmakefileプロジェクトでクラスを書いてメインで動作確認のコードを書いてみたんですが、
ビルドを押すと、
実行するビルド コマンド ラインがありません。
と出てしまってよく分からないんだけれどこれはどういう状態です
google先生でも一応調べたんですが分からないっす。
55:デフォルトの名無しさん
08/02/17 08:09:53
>>54
その無駄な努力はやめて、CDブート可能なLinux使うかCygwin入れるかしろ。
56:デフォルトの名無しさん
08/02/17 08:18:34
なんとしてもVCでやりたいんだなwww
57:デフォルトの名無しさん
08/02/17 09:02:26
>>54
makefile プロジェクトは実行するコマンドから全て自分で指定
しないといけないから、君にはまだ無理。
そもそも、Visual Studio には make コマンドなんかついてない
ことすら知らないでしょ?
nmake で代用することもできるけど、makefile の文法が gmake
とは違う部分があるので、お勧めしない。
他の人が書いてるように、VMware とか入れて Linux 走らせるの
がいいと思う。VMware が不安と言うなら VirtualPC でやれば
MS の加護が受けられるのでちょっぴり安心かもしれない。
(まともに使ったことないからよく知らんけど。)
58:デフォルトの名無しさん
08/02/17 09:39:08
だからもう、vmwareじゃなくてCDbootのLinuxでいいよ。キノピなら問題ないでしょ。
59:デフォルトの名無しさん
08/02/17 09:44:31
別にcygwinでいいだろ
60:デフォルトの名無しさん
08/02/17 09:53:41
VC関係ない
61:デフォルトの名無しさん
08/02/17 12:13:50
URLリンク(itpro.nikkeibp.co.jp)
vmware + linux
無料だお
62:デフォルトの名無しさん
08/02/17 12:44:13
>57
Windowsの上に載ってるVirtualPCにはMSのサポートがあるけど、
そのVirtualPCの上に載ってるLinuxはどこがサポートするんだゐ?
63:デフォルトの名無しさん
08/02/17 13:14:38
サポートがいるなら、
Windows Vista / VirtualPC 2007 ->
WindowsXP / VirtualServer 2005 R2 SP1 ->
Red Hat Enterprise Linux
ってやればいいんじゃないかな。
64:デフォルトの名無しさん
08/02/17 13:35:59
OSだけで何万費やすつもりなんだw
65:デフォルトの名無しさん
08/02/17 14:09:46
環境を同じにするんじゃなけりゃ、ソースだけを共通にするほうが面倒がないよ。
まあ環境同じが楽だけど、行ったり来たりするほうが鍛えられる
66:デフォルトの名無しさん
08/02/17 15:15:04
という勘違いした人が一人いると無駄な作業が増える。
67:デフォルトの名無しさん
08/02/17 15:21:11
同じソース使うことのどこが勘違いなんだか。
デバッガにVCが使えるメリットは大きい。
68:デフォルトの名無しさん
08/02/17 15:22:42
いまだにデバッガとか使うやついるの?
printfで十分だろ
69:デフォルトの名無しさん
08/02/17 15:23:34
まあprintfで十分な規模ならprintfで十分
70:デフォルトの名無しさん
08/02/17 15:32:54
学校で作るもんなんてそんな規模だろ
71:デフォルトの名無しさん
08/02/17 19:17:13
すみません、ちょっと質問です。
ダイアログにwebbrowserコントロールとボタンコントロールを貼り付けて
ボタン押下でgoogleのページを表示させています。
その時にフォーカスがgoogle検索ページの
エディットボックスにフォーカスするのですが、
このフォーカスを移動させたくない場合、どのようにすれば良いでしょうか。
Navigate2のメソッドを利用しており、このメソッドのフラグを調べてみましたがないようです。
また、webbrowser2側でSetFocus()をオーバーライドしようとするも
webbrowser2側ではSeFfocus()を呼んでないようです。
webbrowser2にフォーカスを移動させない方法ってありますでしょうか?
72:デフォルトの名無しさん
08/02/17 19:22:21
javascriptをoffにすればいいんじゃない?
73:デフォルトの名無しさん
08/02/17 19:50:21
>>72
ありがとうございます!
IEのオプションでjavascriptをオフにしたらフォーカスが移動しなくなりました。
今現在は自分だけのローカルPCだけに反映されると思いますが、
他のPCでも有効にするためには、Navigate2のheaderとかに組み込めばいいのかな…
とりあえず、調べてみます。
ありがとうございました。
74:デフォルトの名無しさん
08/02/17 20:22:14
C++とC++/CLIは微妙に違うらしいのですが、素のC++の勉強がしたい場合「空のプロジェクト」というやつでプログラムを書けばいいのでしょうか?
75:デフォルトの名無しさん
08/02/17 21:04:10
>>74
CLR ではなく、Win32 で
76:デフォルトの名無しさん
08/02/17 21:21:11
>>75
最初それのコンソールアプリケーションというのを選べばいいのかなと思ったのですが、
mainの代わりに_tmainというのがあったので、違うのかなと思ってましたが、気にしなくていいんでしょうか・・・?
あ、すみませんVisual C++ 2008 Express Editionをインストールしました
77:デフォルトの名無しさん
08/02/17 21:34:49
_tmain はあんまり気にしなくていい。
消して問題ない。
78:デフォルトの名無しさん
08/02/17 21:40:12
>>77
ありがとうございます、気にしないで進めることにします
79:デフォルトの名無しさん
08/02/18 16:15:02
テンキーの+ボタンはVK_ADDフラグで取得出来るのですが、
ノートPC等でテンキーが付いてない場合、
+キーに相当するキーが押されたかを検出するには、
どのようししたら、良いでしょうか?
+
;れ
↑
このキーのフラグは?
80:デフォルトの名無しさん
08/02/18 16:17:26
>>79
ノートPCでもFnキー併用とかNumLock併用でVK_ADDを発行すると思うけど。
81:デフォルトの名無しさん
08/02/18 16:17:53
「;」か「シフトand;」ってわけじゃないの?
82:デフォルトの名無しさん
08/02/18 16:23:19
それだったらフルキーボードでも使えるわけで、だとしたらVK_ADDでは当然拾えないのだけれど。
83:79
08/02/18 16:25:14
シフトを押されてなくとも、「;」が押されたら+を押したと解釈してあげたいのです。
case ';'では引っかからず、case -69で引っかけられました。
(デバッグモードでメッセージ見ました)
-69って一体・・・・?
case ';'で掛からないのが納得行きません。
84:デフォルトの名無しさん
08/02/18 16:30:14
ちょっと待て、私のキーボードではShift+;は:なんだが。
つーか、Shift+=が+なんだが。
85:79
08/02/18 16:37:45
英語キーボード配列
とかいろいろありそうですね・・・
素直にShiftキー押してもらおうかな・・・
86:デフォルトの名無しさん
08/02/18 16:38:40
つまり、ややこしいことに日本語キーボードでは';'キーはVK_OEM_PLUS(0xbb = -69)であり、
英語キーボードでは';'キーはVK_OEM_1になると。英語キーボードで'+'の刻印がある'='キーはVK_OEM_PLUSなんだけどね。
87:デフォルトの名無しさん
08/02/18 20:48:31
これだな
#define VK_OEM_PLUS 0xBB // '+' any country
88:デフォルトの名無しさん
08/02/18 21:07:33
c++にかぎったものじゃないんですが、
今ゲーム作っててマス移動の当たり判定なら変数でなんとかなるけど
ドット単位であたり判定作ろうとしたらどういう風に管理すればいいんですか?
89:デフォルトの名無しさん
08/02/18 21:30:31
ドット単位で当たり判定もてばいいじゃない
1ドット1ビットで十分だが、面倒ならcharで取るとかな。
90:デフォルトの名無しさん
08/02/18 21:31:50
あと、マップに属性もたせるならそれ相応のビット数が必要
91:デフォルトの名無しさん
08/02/18 21:36:03
円形なら半径だけもっとけばいいし、
正方形なら角度も保持しとけばいい。
あとは数学的に判定。
範囲が極端に小さければ
マス移動と似た形で判定してもいいかもね。
92:デフォルトの名無しさん
08/02/18 22:53:18
ちょっと質問です
cliext::hash_map<array<char> ^, int> って型を作りたいんですが、
比較演算子の定義の仕方がわかりません
一応、こんなのを比較演算子として予定してます
int compare(array<char> ^left, array<char> ^right){
if (left->Length == right->Length){
for(int i = 0; i < left->Length; i++){
if (left[i] != right[i]) return left[i] < right[i] ? -1 : 1;
}
return 0;
}
return left->Length < right->Length ? -1 : 1;
}
どうすればいいんでしょう…
93:デフォルトの名無しさん
08/02/18 23:59:51
STLと同じで、比較関数は基本的にlhs < rhsなboolを返すもの。
URLリンク(msdn2.microsoft.com)
あとは、hash_setのコンストラクタに比較関数へのデリゲートを取る奴があるから、そいつに渡す。
キーの型がoperator <が多重定義できるものなら、そっちを多重定義してもいけるはず。
ところで、hash_mapだけど、ハッシュ関数は気にしなくていいの?
デフォルトでは、GetHashValueが使われるけど、これもコンストラクタで指定できる。
ほかにも、ハッシュを使わず、比較関数だけで順序付けるsetもあるよ。
94:デフォルトの名無しさん
08/02/19 20:23:07
>>93
Myhash_set c2 = cliext::greater<wchar_t>();
この部分ですよね
bool comp(array<char>^, array<char^>) の関数を渡してもエラーになるので、
定義の仕方が違うのかなと思ってるのですが…どうにも解りません
95:デフォルトの名無しさん
08/02/20 23:43:01
質問です。
「点数のデータが入った1次元配列のアドレスと人数を受け取り、
それらの最大点〜(略)を求めて返す関数を作成する」
という問題なのですが、@「〜を受け取り」、A「〜返す」
とはどういう意味なのですか?
どうか教えていただけませんでしょうか
96:デフォルトの名無しさん
08/02/20 23:51:09
引き数を受け取り、戻り値を返す。
97:デフォルトの名無しさん
08/02/21 00:38:58
スケルトンを作るとするとこんな感じ。
int GetMaxPoint( const int * points, int num ) {
// 最大値検索処理
return max;
}
98:デフォルトの名無しさん
08/02/21 00:44:33
「返す」とはreturn();の空白に数値などを入れることですか?
この問題ってサブルーチンを作るようなものですか?
99:デフォルトの名無しさん
08/02/21 00:46:42
>>97
ありがとうございます。教科書で似たような処理を見つけたので
勉強します。
100:デフォルトの名無しさん
08/02/21 02:23:15
うざい。VCと関係ないし。
101:デフォルトの名無しさん
08/02/21 15:22:49
>>100
初心者にはそんなこと分かんねーんだよww
102:デフォルトの名無しさん
08/02/22 14:01:27
CFormViewにピクチャーボックスを貼り付けて線を描画したものを
再描画する処理について質問です。
OnDrawで処理をするとなぜか、フォームのほうに描画されて、
その上にピクチャーボックスが貼り付けられる形になってしまいます。
ピクチャーボックスのプロパティのタイプでフレームと四角形とで
比べてみるとなんとなくそんな気がします。
CDC* pPIC=m_pict.GetDC(); //ウィザードでメンバ変数と作成
CRect rt;
m_pict.GetClientRect(&rt);
pPIC->MoveTo(0,0);
pPIC->LineTo(1000,1000);
細かいところは省略しています。
OnPaintで描くと正常に描画されるみたいですが、
そのとき、WinAPIの時みたいに
BeginPaint
EndPaint
とかの処理が必要なのでしょうか?必要だとしたら
BeginPaint
ShowGraph() //描画処理
EndPaint
と言うことも可能なのでしょうか?
103:デフォルトの名無しさん
08/02/22 14:04:59
そのOnDrawはViewを描画するためのDCが来るからな
OnPaintはBeginPaintのあとOnDraw呼んでるだけだし。
何がしたいの?
PictureBoxに直接書けば再描画気にしないでいいよ
104:デフォルトの名無しさん
08/02/22 14:05:20
>102
すいません、環境を描き忘れました。
なんとなく分かると思いますがMFCで
VC6.0です。OSはWinXP SP2です。
105:デフォルトの名無しさん
08/02/22 14:09:06
>103
CPen で描いているのですが再描画しないとWindowの後ろに
隠れると消えます。
別の方法があるというのですか?
106:デフォルトの名無しさん
08/02/22 14:27:57
オーナードロー使ってるのか、ビットマップでやってるのかどっち?
107:デフォルトの名無しさん
08/02/22 14:35:55
viewとコントロールは別のウインドウだから描画は別
コントロールの描画のタイミングでやらないと
108:デフォルトの名無しさん
08/02/22 14:51:14
Viewのほうで描画するのなら、オーナードローにして
WM_DRAWITEMで引数からHDC持ってきて描画するのがいいかなあ
109:デフォルトの名無しさん
08/02/22 15:10:02
>108
今までCViewのほうばかり使っていたので、恥ずかしながら
オーナードローと言うこと自体知りませんでした。
今度はそれで検索して調べてみます。
110:デフォルトの名無しさん
08/02/22 15:13:36
>107
クラスウィザードでピクチャーボックスのオブジェクトIDをクリックしても
BN_CLICKEDしか出ません。
根本的に考えていることが違うのでしょうか?
111:デフォルトの名無しさん
08/02/22 15:27:53
>103
何がしたいのか書いていませんでした。
ただ単にピクチャーボックスにグラフを書きたいだけです。
>107
CStatocをサブクラス化しないと無理ということですか?
112:デフォルトの名無しさん
08/02/22 15:28:38
>111
> CStatocをサブクラス化しないと無理ということですか?
CStaticです。すみません。
113:デフォルトの名無しさん
08/02/22 15:43:30
FormViewってことはダイアログエディタ使ってんだよね。
まあサブクラス化でもいいけど、プロパティのタイプにオーナードロー(描画)って無い?
と思ってVC6を久しぶりに起動してみたら無いんだな。
114:デフォルトの名無しさん
08/02/22 16:12:55
>113
ないですね^^
よそのホームページで調べたとおりにやったのですが。
115:デフォルトの名無しさん
08/02/22 16:19:27
>113
ボタンならありますね。
116:デフォルトの名無しさん
08/02/22 16:37:17
ちょっと試しにVC6で、rcファイルをテキストエディタで開いて、
SS_BLACKFRAME を SS_OWNERDRAW に書き換えて
OnDrawItem を作ったら動いたぞ。
まあこのやり方はどうなのか、という話もあるが。
117:デフォルトの名無しさん
08/02/22 16:54:58
ボタンなんかと違ってわざわざオーナードローしてまで使うもんじゃないし
118:デフォルトの名無しさん
08/02/22 16:56:34
VS2003以降はオーナードローあるからなあ
119:デフォルトの名無しさん
08/02/22 16:57:59
ま、オレはいつもSTATICは場所の確保だけしてもらって
中は親のほうで書いてたけどな。
120:デフォルトの名無しさん
08/02/22 17:13:26
>116
確かに動作したけど、再びリソースエディタで開くと
変な動作をしますね。確かに楽でいいと思うけど。
121:デフォルトの名無しさん
08/02/22 17:17:05
>119
それはコントロールを自分でcreateして作ることですか?
122:デフォルトの名無しさん
08/02/22 17:18:21
>>121
いや、どこに描くかの場所だけ取得
実際の描画はOnDraw()等でやる。
今回のはサブクラス化するのがいいと思うよ。
123:デフォルトの名無しさん
08/02/22 22:10:49
>122
Createしたとき以外に成功したことがないです。
少しだけ具体例を挙げて欲しいのですがいいですか?
オーナー描画はViewのほうでするのですか?
ViewのほうのOnDrawItemで
if( lpDrawItemStruct->CtlType == ODT_STATIC &&
lpDrawItemStruct->CtlID == IDC_PCT ){
CDC* myDC=m_pict.GetDC();
CPict* pPIC=(CPict*)GetDlgItem(IDC_PCT);
CDC* myDC=pPIC->GetDC();
CRect rt;
pPIC->GetClientRect(&rt);
// m_pict.GetClientRect(&rt);
myDC->MoveTo(0,0);
myDC->LineTo(1000,1000);
}
IDC_PCTがピクチャーボックスのIDです。
CPicはCStaticをサブクラス化したものです。
//でコメントしている行のm_pictは、サブクラス化してない
普通のCStaticのメンバ変数です。
両方試してみました。
やはりOnPaint以外再描画されません。
124:デフォルトの名無しさん
08/02/22 22:24:43
しかもリソースのプロパティのスタイルでフレーム以外
描画されないみたい。
125:デフォルトの名無しさん
08/02/23 08:10:30
質問させていただきます。VisualC++.net 2005(C++/CLI)を使用してます。
生成されるEXEファイルのアイコンを変更したいのですが方法がわかりません。
IcoFXで16x16・24x24・32x32の3つのサイズを含む32ビットアイコンを用意しました
これをリソースエディタで読み込み、IDをIDR_MAINFLAMEに変更する方法を
試みましたが、用意したアイコンがリソースエディタに読み込めませんでした。
「警告:Visual Studioイメージエディタでは、32ビットカラーイメージをサポートしていません。
イメージを保存するときに、変更は破棄されます。」
リソースエディタを経由しないでEXEファイルのアイコンを変更する方法はありませんでしょうか?
よろしくお願いします。
126:デフォルトの名無しさん
08/02/23 09:19:16
ビルドするだけ
127:デフォルトの名無しさん
08/02/23 10:40:37
>121
サブクラスのほうでOnDrawItemを作ってやるというのは
分かったのですがうまくいきません。
他に注意すべき点とか有りますか?
128:デフォルトの名無しさん
08/02/23 12:09:56
ここってマインスイーパーのプログラムの質問
してもいいんですかね?
129:デフォルトの名無しさん
08/02/23 12:27:16
>>127
横レスです。
>>102まで戻って
枠外まで描画してしまうのはWNDCLASSのstyleに 'CS_PARENTDC' がついているから。
次の方法で枠内に描画できる。
1)CDC::IntersectCilpRect()で制限する。
2)CDC* pPIC=m_pict.GetDC(); を
CDC* m_PIC=m_pict.GetWindowDC(); に変える。CWindowDCを使ってもいい。
MSDNフォーラムにも同様の質問が出ていて多少参考になるかも。
そこも理由をちゃんと理解してないようだけど…
↓
Visual C++ フォーラム
ピクチャーコントロールへの描画が、はみ出てしまいます
URLリンク(forums.microsoft.com)
130:129
08/02/23 12:33:11
ごめん、ちょっと紛らわしいので補足。
1),2)を順番に実行するという意味ではなく、
1),2)の内いずれか一つの方法を採用してという意味です。
131:デフォルトの名無しさん
08/02/23 13:35:35
URLリンク(pastebin.windy.cx)
これ,いわゆる多重継承の菱形継承なのですが,
なぜあいまいであるはずの変換演算子について
C2385 のエラーが発生しないのでしょうか?
Visual C++ 2008 Express Edition です.
33行目ではエラーになるのに39行目ではエラーになりません.
しかも二つある基底クラス D1,D2 のどちらの変換演算子が
呼び出されるかが宣言における継承の順序に依存しているのです.
変換演算子ではなく通常のメソッド Greeting については
あいまいである旨のエラー C2385 が出ます.
132:131
08/02/23 13:39:33
もしかしたら Visual C++ 2008 (vc9) のバグかもしれません.
g++ 4.1.3 ではエラーになりました.
test.cpp: In function ‘int main(int, char**)’:
test.cpp:33: error: request for member ‘Greeting’ is ambiguous
test.cpp:7: error: candidates are: void BaseClass::Greeting() const
test.cpp:7: error: void BaseClass::Greeting() const
test.cpp:39: error: request for member ‘operator const std::string&’ is ambiguous
test.cpp:17: error: candidates are: D1::operator const std::string&()
test.cpp:23: error: D2::operator const std::string&()
133:デフォルトの名無しさん
08/02/23 13:52:16
菱形継承じゃないよ。単なる多重継承。
んで、39 でエラーにならないのは正直バグじゃないかと。
134:131
08/02/23 14:12:07
>>133 そうでした.菱形継承で作っているプログラムで気づいて
切り出してきたので頭がそういう風になってしまってました.
そもそも例示したコードの BaseClass って必要なかったです.
URLリンク(connect.microsoft.com)
レポートしておきました.
135:デフォルトの名無しさん
08/02/23 14:15:50
>130
ありがとうございます。
枠に収まるように組んでいたので今まで気づきもしませんでしたが
そのように予防することができるのですね。 おそらくビットマップ
にして保存するときは見えない部分もそれで保存できると言うこと
ですか?
あと、CViewを引き継いでいるCFormViewで基本時に
OnPaintは使わないと言われていましたが、関数内に
コードを書かなくても宣言するだけでOnDrawが使えなくなる
とは思っていませんでした。
136:129
08/02/23 14:30:39
>>135
MFCスレの方とごっちゃにして答えてしまったみたいだ。
MFCスレの枠内に描画制限するのは上の解決方法でいいとして、
実はこっちのスレの回答にはなっていない。ごめん。
今VC6で確認したんだけど、
ピクチャーのタイプを'四角形'にしてCFormView::OnDraw()で描画すると
描画後にピクチャー自身のWM_PAINTで背景が塗りつぶされてしまっているよう。
もし背景色を変えたいとのことであれば
タイプは'フレーム'のままでOnDraw()内で
FillRect()で背景を自前で塗りつぶせばできる。
でもOnDraw()で無理矢理ピクチャーの位置に描画するより
皆が回答してくれた通りにした方がいいと思う。
> コードを書かなくても宣言するだけでOnDrawが使えなくなる
> とは思っていませんでした。
このあたりはCView::OnPaint()のソースを見ればわかるよ。
137:デフォルトの名無しさん
08/02/23 15:25:23
>FillRect()で背景を自前で塗りつぶせばできる。
既にあきらめてそれをやっています^^
それってバグじゃない? とか思ったり。
>このあたりはCView::OnPaint()のソースを見ればわかるよ
他のホームページでだいたいのことは分かりました。
ソースも検索で見てみました。
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
いつもと違って誤ってOnPaintを作ってからOnDrawを
作って書いたのでひどい目に遭いました。
そこで便乗質問ですが、CView以外でOnPaint内で
CDCを使った場合、BeginPaintとかいるんですか?
CPaintDCならいらないと聞いたのですが。
138:デフォルトの名無しさん
08/02/23 15:38:29
>136
> 皆が回答してくれた通りにした方がいいと思う。
オーナー描画、BitMap のうちどれですか?
オーナー描画もいろいろ調べたのですが、あきらめました。
BitMapも入門書ではピクチャーボックスではCDialogにですが、
OnPaintで再描画しているサンプルでした。
皆が進めるのはOnDraw OnPaint以外に書く方法ですか?
仮にサブクラス化したとして、どのタイミングで再描画
しているのでしょ?
139:デフォルトの名無しさん
08/02/23 17:10:05
ごちゃごちゃ回りくどいことやらずに直接viewに書く
140:129
08/02/23 17:47:06
>>137
> CPaintDCならいらないと聞いたのですが。
これはCPaintDCのコンストラクタ・デストラクタを見ればわかる。
>>138
(1)オーナードローを使う。
VC6ではダイアログエディタでオーナードローにできないのでコード上で
CFrameView::OnInitialUpdate()あたりで
m_pict.ModifyStyle(SS_TYPEMASK, SS_OWNERDRAW);でする。
その後CFrameView::OnDrawItem()で描画処理。
(2)CWndやCStatic派生クラスのOnPaint()内で描画する。
簡単なのは(1)だと思うけど
グラフを書きたいとのことなので、
グラフをあちこちで使いまわすのなら(2)かな。
141:デフォルトの名無しさん
08/02/23 18:52:00
スタティックコントロールは文字や図形を表示してくれるコントロールで、
これをオーナードローにしたら何もしないコントロールだけど
そんなものにわざわざコントロール使う意味ある?
142:デフォルトの名無しさん
08/02/23 19:06:43
URLリンク(okwave.jp)
ダイアログベースのexeで最適なグラフ表示方法 -OKWave
143:デフォルトの名無しさん
08/02/23 21:01:29
>>141
描画だけじゃなくマウスのこととかも含めた
簡易的な位置決めツールにとしては働く。
一応独立したウィンドウなんだし。
144:デフォルトの名無しさん
08/02/23 21:56:23
>140
ありがとうございます。
m_pict.ModifyStyle(SS_TYPEMASK, SS_OWNERDRAW);
ああ、これをやらないとダメなんですね。
元のFrameViewでよかったんですね。
確かに、コントロールとしての意味がなくなりそうなので
(2)のほうでやってみます。
Createまでする必要がないというのはよく分かりました。
いろいろと溜になる情報ありがとうございました。
145:デフォルトの名無しさん
08/02/24 00:28:53
void CMine1View::DispMine()
{
CClientDC dc(this);
CBrush *oldBrush1,redBrush,*oldBrush2;
int iy,ix;
for(iy=2;iy<=Masu+1;iy++)
{
for(ix=2;ix<=Masu+1;ix++)
{
if(Mine_Position[iy][ix]==-1)
{
oldBrush1=(CBrush*)dc.SelectStockObject(WHITE_BRUSH);
dc.Rectangle(ix*Width,iy*Width,
ix*Width+Width,iy*Width+Width);
dc.SelectObject(oldBrush1);
redBrush.CreateSolidBrush(RGB(255,0,0));
oldBrush2=dc.SelectObject(&redBrush);
dc.Ellipse(ix*Width+5,iy*Width+Width+5,
ix*Width+Width-5,iy*Width+Width-5);
dc.SelectObject(oldBrush2);
redBrush.DeleteObject();
}
}
}
AfxMessageBox("地雷 踏みました!");
}
VC++6.0でマインスイーパーを作ってます
地雷がうまく表示されないのと地雷を踏んだ時にリセットされません
どこがおかしいのか教えてください
146:デフォルトの名無しさん
08/02/24 00:36:42
>>145
一体何をリセットした積もりなの?
147:デフォルトの名無しさん
08/02/24 01:02:49
>>146 プログラム組むの初めてでそれすらもわからないです
本を見ながらやったんですがうまくいかなくて
148:デフォルトの名無しさん
08/02/24 01:14:07
Viewなのか、MFCってことだな。 んで、Documentは参照してないと。
ど、どんな本みてんだYO!
149:デフォルトの名無しさん
08/02/24 01:16:24
何をリセットしたつもりなのかもわからないのにリセットされないとどうやって判断したの?
少なくとも、「リセットされません」と言うからには何かを「リセットした積もり」なんじゃないの?
150:デフォルトの名無しさん
08/02/24 01:28:37
リリースビルドをデバッグビルドにしてみたのですが、
なぜかブレイクポイントがヒットしなくなっていました
これを直すにはどうすればよいのでしょうか。
ちなみにncbファイルの削除というのはやってみました。
151:デフォルトの名無しさん
08/02/24 01:30:53
>>148 MFCって書いてあります
>>149 地雷を踏んでログがでて最初の画面に戻るはずなんですが
152:デフォルトの名無しさん
08/02/24 01:48:06
>>151
>145は何の関数か理解している?
少なくとも、「ログがで」たり「最初の画面に戻る」処理は書かれていないわけで。
そもそも、「地雷を踏んだ」かどうかの判定している関数でもないな。
153:デフォルトの名無しさん
08/02/24 01:58:12
>>152 問題はここではないんですね
地雷の表示がうまくいかないのはここの部分であってますか?
154:デフォルトの名無しさん
08/02/24 02:00:51
>>153
脳味噌にも皺伸ばししているのか?
地雷の表示はどうなってほしいのがどううまくいかないのかも説明できないなら寝た方がいいぞ。
155:デフォルトの名無しさん
08/02/24 02:08:56
>>154
説明不足ですいませんでした
柵の真ん中に赤い丸で表示されるはずなんですが
実際は柵の下部分に半円で表示されるんです
156:デフォルトの名無しさん
08/02/24 04:34:41
>>155
>dc.Ellipse(ix*Width+5,iy*Width+Width+5,ix*Width+Width-5,iy*Width+Width-5);
これあってるの?
157:デフォルトの名無しさん
08/02/24 05:02:51
DSで動くソフトを作りたいんですけど
まず初めに何をすればいいんですか?
(´・ω・`)
158:デフォルトの名無しさん
08/02/24 05:43:44
>>156
+5の方の「Width」がひとつ多かったです
直してビルドして確認してみたらちゃんと赤い丸で表示されました
赤い丸が表示されないという問題は無事解決しました ありがとうございました
159:デフォルトの名無しさん
08/02/24 06:20:29
void CMine1View::OnButton1()
{
CClientDC dc(this);
CString ss;
int iy,ix,x,y,m_x,m_y;
Masu=8; MineKazu=0;
for(iy=0;iy<=Masu+1;iy++)
{
for(ix=0;ix<=Masu+1;ix++)
{
Mine_Position[iy][ix]=0; Mine_Pass[iy][ix]=0; Mine_Kazu[iy][ix]=0;
}
}
Width=30;
for(x=Width*2;x<=Width*10;x+=Width)
{
dc.MoveTo(x,Width*2);dc.LineTo(x,Width*10);
}
for(y=Width*2;y<=Width*10;y+=Width)
{
dc.MoveTo(Width*2,y);dc.LineTo(Width*10,y);
}
for(iy=0;iy<=Masu*3;iy++)
{
X=(int)((double)rand()/32767.0*Masu);
Y=(int)((double)rand()/32767.0*Masu);
X=(int)((double)rand()/32767.0*Masu);
Y=(int)((double)rand()/32767.0*Masu);
Mine_Position[Y][X]=-1;
Mine_Pass[Y][X]=-1;
Mine_Kazu[Y][X]=-1;
}
160:159
08/02/24 06:25:08
for(iy=2;iy<=Masu+1;iy++)
{
for(ix=2;ix<=Masu+1;ix++)
{
if(Mine_Kazu[iy][ix]==1)
{
MineKazu=MineKazu+1;
}
}
}
ss.Format("地雷の数は%d個です!",MineKazu); dc.TextOut(350,50,ss);
for(iy=2;iy<=Masu+1;iy++)
{
for(ix=2;ix<=Masu+1;ix++)
{
if(Mine_Position[iy][ix]==-1)
{
for(m_x=-1;m_x<=1;m_x++)
{
for(m_y=-1;m_y<=1;m_y++)
{
if(m_x!=0||m_y!=0)
{
if(Mine_Position[iy+m_y][ix+m_x]!=-1)
{
Mine_Position[iy+m_y][ix+m_x]=
Mine_Position[iy+m_y][ix+m_x]+1;
}}}}}}}}
起動した時に地雷の数を表示させたいのですが
表示は0のままでうまく表示出来ません
どこがおかしいのか教えてください
161:145.159
08/02/24 06:26:48
>>145のマインスイーパーについての質問です
162:デフォルトの名無しさん
08/02/24 08:08:41
>どこがおかしいのか教えてください
あんたの頭。
お願いだから寝てください。できれば永久に。
>Mine_Kazu[Y][X]=-1;
-1をセットしているのに
>if(Mine_Kazu[iy][ix]==1)
1を数えているじゃないか。
163:161
08/02/24 15:56:01
>>162 直したら地雷の数表示されました
ありがとうございます
164:デフォルトの名無しさん
08/02/24 16:00:19
void CMine1View::OnLButtonDown(UINT nFlags, CPoint point)
{
CClientDC dc(this);
CBrush blueBrush,*oldBrush1;
CString ss;
int iy,ix;
iy=int(point.y/Width);
ix=int(point.x/Width);
if(2<=iy&&iy<=Masu+1&&2<=ix&&ix<=Masu+1)
{
blueBrush.CreateSolidBrush(RGB(0,0,255));
oldBrush1=dc.SelectObject(&blueBrush);
dc.Rectangle(ix*Width,iy*Width,
ix*Width+Width,iy*Width+Width);
dc.SelectObject(oldBrush1);
blueBrush.DeleteObject();
Mine_Pass[iy][ix]=-1;
if(Mine_Position[iy][ix]>=1)
{
ss.Format("%d",Mine_Position[iy][ix]);
dc.TextOut(ix*Width+10,iy*Width+5,ss);
Mine_Pass[iy][ix]=-1;
}
165:145.159.160.164
08/02/24 16:00:56
else if(Mine_Position[iy][ix]==-1)
{
DispMine();
}
for(iy=2;iy<=Masu+1;iy++)
{
for(ix=2;ix<=Masu+1;ix++)
{
if(Mine_Pass[iy][ix]!=-1)
{
//goto saido;
return;
}
}
}
AfxMessageBox("おめでとう!クリアです!");
DispMine();
// saido:;
}
CFormView::OnLButtonDown(nFlags,point);
}
起動〜終了まで出来るようになったのですが
終了時にクリアのログの後に地雷を踏んだログが出てしまいます
どこが悪いのか教えてください
166:デフォルトの名無しさん
08/02/24 16:09:00
>どこが悪いのか教えてください
あんたの頭。いい加減にしなさい。
167:デフォルトの名無しさん
08/02/24 17:13:45
>>166 本当にわからないんです
自分の頭が悪いのはわかってます・・・
168:デフォルトの名無しさん
08/02/24 17:19:07
ここにソースあるから
URLリンク(www.kohgakusha.co.jp)
169:デフォルトの名無しさん
08/02/24 18:04:19
>>167
何が悪いか判ってよかったな。つまり、あんたにはプログラミングは無理ってことだ。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4416日前に更新/222 KB
担当:undef