★初心者にVisual C++を教えるスレ★ Part29at TECH
★初心者にVisual C++を教えるスレ★ Part29 - 暇つぶし2ch1: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次元配列のアドレスと人数を受け取り、
それらの最大点~(略)を求めて返す関数を作成する」

という問題なのですが、①「~を受け取り」、②「~返す」
とはどういう意味なのですか?
どうか教えていただけませんでしょうか

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
何が悪いか判ってよかったな。つまり、あんたにはプログラミングは無理ってことだ。

170:デフォルトの名無しさん
08/02/24 18:24:49
VC++でMFC使わずにWin32Appで書いてるんですが、
MFC覚えた方がいいですか?
仕事だとMFCとWin32Appはどっちが使われてます?

171:デフォルトの名無しさん
08/02/24 19:12:09
MFC覚えたらかなり生産性あがるよ

172:デフォルトの名無しさん
08/02/24 21:00:31
>>170
使えと言われたときのために軽くかじっておくのはいいと思う。
かじったことのない俺が言っても説得力0だけど。

173:デフォルトの名無しさん
08/02/24 22:31:57
お勧めの入門書はありますか?

174:デフォルトの名無しさん
08/02/24 23:34:28
VC++でEmacsキーバインドを使いたいのですが、
わざわざTabキーを入力しなければインデントしてくれません。
自動インデントをしてくれるようにする方法はありますか?

VC++のバージョン:
 Visual C++ 2008 Express Edition
現在の設定:
 ツール->オプション->環境->キーボード
  次の追加キーボードマップスキームを適用->Emacs
 ツール->オプション->テキストエディタ->C/C++->タブ
  インデント->スマート
  タブ->タブの保持
 後はおおむねデフォルトです。

175:デフォルトの名無しさん
08/02/25 00:34:04
>173
MFCなら 10年前に買った、新Visual C++ 6.0 入門編 シニア編
かな?


176:デフォルトの名無しさん
08/02/25 00:48:31
>>175
それって入門用には最悪だろ

177:デフォルトの名無しさん
08/02/25 04:08:20
なぜSelectObjectは描画後とかに戻し作業が必要なんですか?
DeleteObjectもなくても動くんですがどういうことですか?

pDC->SelectObject(oldFont);
myFont.DeleteObject();


178:デフォルトの名無しさん
08/02/25 06:43:45
戻し作業は不要だけど、状況によっては戻す必要がある。

DeleteObjectは必要だけど、なくても一応動く
ただDeleteObjectしてないように見えるけど、実際は見えない部分でやってる場合もある。

間違ったやり方をしているサンプルもあるし、
一見間違っているように見えて間違ってないサンプルもあるから
猿真似しかできないやつだと理解は難しい。

179:デフォルトの名無しさん
08/02/25 07:19:13
MFC 使ってるならデストラクタで自動的に DeleteObject される。
myFont をローカル変数にしていた場合、
SelectObject で戻し作業をしてないと
登録しているオブジェクトを DeleteObject しようとしてしまう。

myFont がローカル変数でない場合は
状況によっては必ずしもすぐさま戻す必要は無いが、
最終的には戻す必要がある。

180:デフォルトの名無しさん
08/02/25 09:56:18
MSDNのサンプルは戻さずに消してるよ

GRAPHICS\GDI\FONTS\FONTVIEW\STATUS.C

case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);
GetClientRect (hwnd, &rect);

hBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
border = rect;
border.bottom = border.top + cyStatusBorder;
FillRect (hdc, &border, hBrush);
DeleteObject (hBrush);

hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW));
border = rect;
border.top = border.bottom - cyStatusBorder;
FillRect (hdc, &border, hBrush);
DeleteObject (hBrush);

EndPaint (hwnd, &ps);


181:デフォルトの名無しさん
08/02/25 10:10:24
あ、それselectしてないか

182:デフォルトの名無しさん
08/02/25 11:32:29
ペゾ本読み返してみたら戻さなくていいが正解だった。

183:デフォルトの名無しさん
08/02/25 15:01:06
つまり戻さないとどうなるんですか?描画し終わったらデリようが、戻そうがどうでもよくないですか?


184:デフォルトの名無しさん
08/02/25 15:15:32
戻さないと消せない。
消さないとリソース消費が膨れ上がる。
ストックオブジェクトなら消す必要が無い
どの辺が疑問かわからん

185:デフォルトの名無しさん
08/02/25 15:19:33
ローカル変数だと自動デリでアクセス違反起こすって事じゃないの

186:デフォルトの名無しさん
08/02/25 15:20:25
まさにそれが聞きたかったんだ
ありがとう


187:デフォルトの名無しさん
08/02/25 15:31:23
描画の時にその都度選択しないといけないのは
解放されてしまうからなんだよね
だから自分で元に戻さなくても大丈夫

188:デフォルトの名無しさん
08/02/25 16:10:31
出したものは片付ける

189:デフォルトの名無しさん
08/02/25 16:22:58
出した後は疲れて寝ちゃうからほったらかし

190:デフォルトの名無しさん
08/02/25 17:06:07
>>185
アクセス違反は起きないよ。


SelectObjectされたままだとDeleteObjectが失敗するからどんどん溜まっていく。
使っているGDIオブジェクトの数はタスクマネージャでも確認できる。
・・・上限っていくつだろ?ググってみたがわからん。

191:デフォルトの名無しさん
08/02/25 18:19:05
>>190
たぶん上限というのは9xで64KB, NTで標準1MBのやつ。
で、オブジェクト1個で何バイトだよって話になるんだけどね。

192:デフォルトの名無しさん
08/02/25 19:39:37
このスレはペゾルド本読んでるやつ誰もいないのか?
戻さずに削除するやり方がちゃんと書いてあるだろ

193:デフォルトの名無しさん
08/02/25 20:08:58
だったら書けよチンカス

194:デフォルトの名無しさん
08/02/25 21:09:36
SelectObjectしたらいつまで有効?
毎回SelectObjectするのは何故?

195:デフォルトの名無しさん
08/02/25 23:49:47
SelectObjectしたままほっとらかしておいて大丈夫な状況なら、ほったらかしにすれば宜しいかと。

196:デフォルトの名無しさん
08/02/27 18:35:12
CButton* radio1=(CButton*)GetDlgItem(IDC_RADI01);
の(CButton*)この括弧ってなんなの?
ポイント関係の項目読んでも解説が出てこないんですけど!

197:デフォルトの名無しさん
08/02/27 18:36:40
索引で「型キャスト」を調べるべし

198:デフォルトの名無しさん
08/02/27 18:42:06
OK!!


199:デフォルトの名無しさん
08/02/27 18:59:20
わかりました。
CButtonクラスにするポインタradio1にGetDlgItemで取り出したIDC_RADI01のアドレスをCスタイルキャストでポインタに強制変換していれてるんですね。
さっぱりわかりません

200:デフォルトの名無しさん
08/02/27 19:05:23
やばいわかっちゃった
GetDlgItemで取り出したIDC_RADI01のアドレスをCButton型のポインタにしていれてるんだ!

201:デフォルトの名無しさん
08/02/27 19:06:24
もうだめだ

202:デフォルトの名無しさん
08/02/27 19:20:51
いやあってる!ありがとうございました!

203:デフォルトの名無しさん
08/02/27 21:27:46
Visual Studio 2003 なんですが、
Foo.cpp タブの下に表示されている
クラスとメソッドを選択するバーを消す
方法を教えて下さい。


204:デフォルトの名無しさん
08/02/27 22:04:16
何でRADI01(ラジ01)なんだろう。

205:デフォルトの名無しさん
08/02/27 22:09:44
>>203
Visual Studio 2005 Part 23
スレリンク(tech板)l50


206:デフォルトの名無しさん
08/02/27 22:34:55
CWnd* myPICT=GetDlgItem(IDC_PICT);
CClientDC myDC(myPICT);
は丸暗記するものなんですか?
それともここを理解しないと先は暗いですか?

207:デフォルトの名無しさん
08/02/27 22:42:30
理解できてたらおぼえる必要ないだろ
忘れたら前に書いたコード探すだけだし

208:デフォルトの名無しさん
08/02/27 22:43:58
暗記なんてするのは学校のテストだけですよ

209:デフォルトの名無しさん
08/02/27 22:46:49
も、もしかして CWnd と CClientDCの構造体の中身から調べなきゃいけないんですか?

210:デフォルトの名無しさん
08/02/27 22:47:05
いい加減こいつがうざくなってきた

211:デフォルトの名無しさん
08/02/27 22:48:17
すいません二度と来ません

212:デフォルトの名無しさん
08/02/27 22:48:44
さいならっきょ

213:デフォルトの名無しさん
08/02/27 22:50:15
>>209
もし、その中身を知っていなきゃコーディングできないとするならばそんな関数があること自体おかしいと思わないか?
printfの実装なんぞ知らなくたって使えるだろ?

214:デフォルトの名無しさん
08/02/27 22:59:42
MFC使っててCWnd知らないやつはいないだろうし
CDC使ったことがあったらCClientDCも使えるだろうし

215:203
08/02/27 23:20:28
>>205

載ってる?
行って探してみたけど無さそうだったよ。
そもそも、消す機能ついて無い気もしてきた。。
とりあえずあきらめよう。
Thx.


216:デフォルトの名無しさん
08/02/29 00:56:57
VC++6.0なんだけど一行って何行まで書けるの?
2行に分けたい場合はどうするの?

217:デフォルトの名無しさん
08/02/29 01:12:19
日本語でおk

218:デフォルトの名無しさん
08/02/29 01:18:45
CやC++では、ただの空白やタブのみならず改行なども同じように区切りとして扱われる。
ようするに、だいたい改行したいと思ったところにただ改行を書くだけで大丈夫。

例えばVBのように行継続文字を書く必要はない。
それに相当するものはある(バックスラッシュを使う)のだが上記の理由で基本的に不要。

219:デフォルトの名無しさん
08/02/29 02:45:29
すごくよくわかりました。ありがとうございました

220:デフォルトの名無しさん
08/02/29 03:13:17
#defineとかは駄目だけどな

221:デフォルトの名無しさん
08/02/29 09:39:47
長いリテラルを複数行に分けて書く

222:デフォルトの名無しさん
08/02/29 10:15:08
ソースのことなのか実行結果のことなのかくらい書いたほうがいいけどなw

223:デフォルトの名無しさん
08/03/01 18:33:50
みんなバージョンいくつ使ってるの?


224:デフォルトの名無しさん
08/03/01 18:52:36
いまだに6.0が現役です

225:デフォルトの名無しさん
08/03/01 20:00:21
>>216
>一行って何行まで書けるの?
一行でなくなったら一行ではなくなるではないか。

226:デフォルトの名無しさん
08/03/03 09:48:08
つまり答えは一行には一行まで書けます、だな

227:デフォルトの名無しさん
08/03/03 12:10:55
古谷一行に訊け

228:デフォルトの名無しさん
08/03/03 20:52:04
一文字に何行書けますか?
という質問だろ、
文脈から判断せいや

229:デフォルトの名無しさん
08/03/03 21:04:22
>>216
文字列なら
char *str = "abc"\
"def";
みたいな感じ
関数ならint hoge(int a,int b,
int c)
{}
みたいな感じ

230:デフォルトの名無しさん
08/03/03 21:11:34
>一文字に何行書けますか?

・・・え?
一文って何行まで書けるの? じゃないのか?

231:デフォルトの名無しさん
08/03/03 21:22:39
お前らC++の前に日本語習得してこいよ

232:デフォルトの名無しさん
08/03/03 21:34:47
>>229
"で閉じているときは\は無くていいよ。↓でOK
char *str = "abc"
       "defg"
       "hijk";

閉じないなら\で繋げる。
char *str = "abc\
defg\
hijk";
(もっとも、この場合は行頭に桁揃えのスペースやタブを入れられなくなるが・・・)

233:デフォルトの名無しさん
08/03/05 00:12:55
アウトプットウィンドウに表示されるテキストを右端で折り返すこと
はできないのでしょうか? 長いエラーメッセージが表示されたとき、
水平スクロールバーを使ってスクロールしながら読むのは骨が折れます。
Visual C++6.0です。よろしくお願いします。


234:デフォルトの名無しさん
08/03/05 00:19:42
適宜改行しておけばいいんでね?

235:デフォルトの名無しさん
08/03/05 00:24:39
改行って、どうやって改行するんですか? カーソルを置いて[Enter]を
押しても改行されませんよ。

236:デフォルトの名無しさん
08/03/05 01:53:19
「右端で折り返す」オプションなかったっけ、2005にはあるが、、、
っと起動してみたがみつからんなあ、長年つかってなかったからよーわからん
ヘルプもうまく出んな

237:デフォルトの名無しさん
08/03/05 01:55:09
>>235
出力時にですがな。

238:デフォルトの名無しさん
08/03/05 02:12:24
>>237
>235が言ってるのはビルドエラーだよ?
コンパイラのコードをいじれと?

239:デフォルトの名無しさん
08/03/05 02:26:33
んが? 自分で出したエラーメッセージじゃないの?
そら失礼。

240:デフォルトの名無しさん
08/03/05 06:53:06
ちんちん!

241:デフォルトの名無しさん
08/03/05 12:35:45
ちんちんの後でつらいですが、
int a[10];
の a[10] 以降の配列にデータを入れ続けた場合の被害は、最悪プログラムの強制終了だ。と上の方に書いてありましたが本当ですか?
なんか最近OS起動後すぐにWindousのプロセスが強制終了しだしたんですが、
自分のアプリ外のメモリ領域は保護してくれるぐらいの機能はあるんですよね?VC++6.0なんですけど。


242:デフォルトの名無しさん
08/03/05 13:10:14
>>241
URLリンク(www.kumei.ne.jp)

動かない事はないけどメモリアドレス関係のバグは命取り

243:デフォルトの名無しさん
08/03/05 13:27:14
メモリの保護はOSの役目なのでVC++とか関係ないです。

244:デフォルトの名無しさん
08/03/05 14:06:06
test
B?ng

245:デフォルトの名無しさん
08/03/05 21:34:33
質問です.VC++2005を使用しているのですが
LPSTR型の文字列をchar str[200]に代入したいのですが可能でしょうか?



246:デフォルトの名無しさん
08/03/05 21:44:28
typedef CHAR * LPSTR;
だから

247:デフォルトの名無しさん
08/03/05 21:51:04
strncpy 使わないとな。

248:デフォルトの名無しさん
08/03/06 01:15:44
Visual C++ 2008 Express Editionを使ってるんですけど、プロパティバインディングって使えないんでしょうか?
適当なコントロールを選んで、プロパティのApplicationSettings->PropertyBindingの...をクリックし、バインドしたいプロパティを選んで新規を押し、
項目を入力してOKを押すと「設定ファイルがプロジェクトに見つかりません。設定ファイルを追加して、再試行してください。」と出ます。
(プロジェクト名).config, (プロジェクト名).exe.config, App.config, config.xml, (プロジェクト名).xmlといろいろ追加してみましたが結局出来ませんでした・・・。

どうすればいいものかと途方にくれてます。。

249:デフォルトの名無しさん
08/03/06 18:19:22
大きなダイアログのタブオーダーの設定をしている最中に
スクロールバーでダイアログを動かすと
次にクリックした位置がオーダー1に戻ってしまうのですが、
これってVC2005のバグなのでしょうか?
こういう場合、どのようにしてタブオーダーを設定すればよいでしょうか。

250:デフォルトの名無しさん
08/03/06 18:48:33
>>249
URLリンク(msdn2.microsoft.com)(VS.80).aspx
Ctrlを押しながらクリックすれば途中から設定できるはず

それかホイールマウスでスクロールする。

251:デフォルトの名無しさん
08/03/06 18:57:09
>>250
> Ctrlを押しながらクリックすれば途中から設定できるはず

スクロールした後にコントロールをCtrl+クリックすると、
そこが新たな基準点になるだけで、
そのコントロール自体のタブオーダーは変更されないのです。

> それかホイールマウスでスクロールする。

ホイールを回してもスクロールしないのですが、
これはなにかの設定に依存するのでしょうか?

252:デフォルトの名無しさん
08/03/06 19:06:18
>>251
スクロールした後で一つ前のコントロールをCtrl+クリックして基準点として
それ以降を設定すればいいのでは?

ホイールスクロールはマウスユーティリティによるものかも。

253:デフォルトの名無しさん
08/03/06 19:24:22
>>252
何度もすみません。

> スクロールした後で一つ前のコントロールをCtrl+クリックして基準点として
> それ以降を設定すればいいのでは?

その1つ前のコントロールと次のコントロールが
今のPC上のVS2005ではダイアログエディタ内に収まらないんです。

手前のコントロールをクリック

次のコントロールへスクロール

そのコントロールをクリック

という流れなのですが、ここで通常クリックだと1に戻ってしまい、
Ctrl+クリックだと手前のコントロールのコントロール+1になりません。

254:デフォルトの名無しさん
08/03/06 19:41:11
>>253
なら、一時的に周りの余計なツールウィンドウを全て閉じて編集するとか。

それでもだめならリソーススクリプトを直接編集するしかないかもね。
タブオーダーの順に上から記述されてるからコピペで並び替え。

255:デフォルトの名無しさん
08/03/06 19:52:40
>>254
rcファイルを直接編集して並び替えられました。
ありがとうございます。

256:デフォルトの名無しさん
08/03/06 20:18:54
OS:XP SP2
開発環境:VS2005

CDaoDatabaseを使用してDBにアクセスしています
select * from WORK_TABLE WHERE ''='' ORDER BY test
はきちんと検索結果が帰ってくるのですが
select * from WORK_TABLE WHERE ''='' ORDER BY convert(integer,test)
に変更するとエラーが発生します。

なにが問題か分かる方いましたらご教授をお願いします。




257:256
08/03/06 20:58:01
追加情報です。

select * from WORK_TABLE WHERE ''='' ORDER BY cast(test as integer)
でもダメでした。

デバッグモードで起動し、エラーをキャッチした箇所でとめてエラー内容を見ると
convertでは「式に未定義関数 'convert' があります。」
castでは「クエリ式 'casttest as integer)' の 構文エラー : 演算子がありません。 」
というエラーが設定されています。


258:デフォルトの名無しさん
08/03/06 21:24:31
プロジェクトのフォルダの中にある.hと.cppファイルの中で、
実際にはプロジェクトに参加してない無駄なファイルを見つけ
て削除したいのですが、効率良くやるにはどうすればいいで
しょうか? Visual C++6.0です。

259:デフォルトの名無しさん
08/03/06 22:16:50
dspを開いて、\.h|\.cppをgrepする。
あとはそのファイルだけcopyするような
バッチにでも変換すれば。
プロジェクトにないけどincludeされている連中は死ぬけど。

260:デフォルトの名無しさん
08/03/06 22:29:32
いつまた使うようになるかわからないのであった

261:デフォルトの名無しさん
08/03/06 22:38:41
>>257
> convertでは「式に未定義関数 'convert' があります。」
convertが使えない環境

> castでは「クエリ式 'casttest as integer)' の 構文エラー : 演算子がありません。 」
castとtestの間に(を入れ忘れ。
でも、入れたとしてもcastが使えない環境だったら
未定義うんぬんのエラーが出るだろう。

262:デフォルトの名無しさん
08/03/07 01:03:24
WIN32とかSTLとかMCFとかATLとかCRTの違いがよくわからないのですが
これらは全てVC++のことを言ってるのでしょうか?
また、これらの違いがよくわかるHPとかありませんか?

263:デフォルトの名無しさん
08/03/07 01:23:57
> WIN32とかSTLとかMFCとかATLとかCRT
どれも1種のライブラリ。どれもVisual C++から使えることに違いはないが、
誰が何のために制定したかが違う。

264:デフォルトの名無しさん
08/03/08 06:44:14
int (*p)[4] = new int[3][4];

int *p = new int[3][4];

じゃだめなんですか?[4]をつける意味無くないですか?

265:デフォルトの名無しさん
08/03/08 09:19:40
>>264
そう思うのなら試して味噌。

266:デフォルトの名無しさん
08/03/08 09:21:45
>>264
内部の動作を想像する能力が必要だ

267:デフォルトの名無しさん
08/03/08 09:59:42
int (*p1)[4] = new int[3][4];
p1[1][2] = 400;
cout << p1[1][2];

わかりません。(*p1)[4]を日本語にしてくださいお願いします。








268:デフォルトの名無しさん
08/03/08 10:36:52
p1はint型の配列(要素数4)を指すポインタ

int (*p1)[4] = new int[3][4];
はint型の配列(要素数4)を3つ作ってて、p1はその先頭を指している。

以下と対比するとわかりやすいかも。
int* p2 = new int[3];

掲示板では分かりやすい説明は難しいと思われるので、
どうしても知りたければ「Cプログラミング専門課程」の多次元配列の項を読むこと。

269:デフォルトの名無しさん
08/03/08 10:42:34
Cスレでやれ馬鹿

270:デフォルトの名無しさん
08/03/08 11:30:20
ごめんなさい

271:デフォルトの名無しさん
08/03/08 11:56:58
だめだ [4] がなんでだぶってるのかイメージできない。CとC++シニア編の多次元配列とポインタ読んでもわからない。やばすぎる


272:デフォルトの名無しさん
08/03/08 14:10:46
p1 += 1; // アドレスが 16増える -> typeof(p1) == int*の要素4つの配列 
p2 += 1; // アドレスが 4増える -> typeof(p2) == int*

273:デフォルトの名無しさん
08/03/08 15:23:46
Visual C++ 2005 or 2008に関する質問です。
作成したプログラムにてCtrl+Fにより検索フォームを表示したいのですが
どのようにすればいいのでしょうか。
また下記のように検索関数をC++で書いたのですが機能しません。
どのように変え組み込んでいけばいいのでしょうか?
機能的にはCtrl+Fを押されたときに検索フォームが表示され、
その中で検索ボタンを押せば検索が実行される。
つまり検索ボタンに下記のようなプログラムを組み込みたいのですが・・・。

string str;
string buffer;
size_t found;

ifstream fin(argv[1]);

if(!fin){
cout<<"読み込みファイルオープンエラー";
exit(0);
}

cout<<"文字列を入力してください";
cin>>str;

while(fin>>buffer){
found=buffer.find(str);
if(found!=string::npos)cout<<buffer;
}

fin.close();


274:デフォルトの名無しさん
08/03/08 15:37:52
アクセラレータにCtrl+Fを定義
呼ばれたら検索フォームを表示するだけ

275:デフォルトの名無しさん
08/03/09 00:33:39
Visual Studio.NET 2003を使っているんですが、
ソリューションエクスプローラのフォルダ構成を
ローカルのフォルダ構成と同期させることってできないでしょうか?

現在ソースファイルを追加するときは、
ソリューションにフォルダを作って、ローカルに同名のフォルダを作って、
「新しい項目の追加」をしてるんですが、
二度手間だし、フォルダ名を変えたくなったときに面倒です。

276:デフォルトの名無しさん
08/03/10 00:24:34
openFileDialogでファイルのパス名を取得したいのですが、実行ファイルと違うフォルダのファイルを選択した場合動作がおかしいです。

・・・(openFileDialogのインスタンス生成等)
if (ofd->ShowDialog() == System::Windows::Forms::DialogResult::OK) {
  String^ s;
  try {
   s = ofd->FileName::get();
  } catch(...) {
   Console::WriteLine("catched");
  }

  System::IO::StreamWriter^ sw = gcnew System::IO::StreamWriter("out.txt");
  sw->WriteLine(s);
  sw->Close();
}

こんな感じでパス名をout.txtに出力するテストコードを作ったのですが、実行ファイルと別のフォルダの
ファイルを指定すると、out.txtが作られません。
でもデバッガで見るとsにパス名は入ってるようですし、セキュリティ例外?ってやつかなと思ってcatchブロック増やしてみても
catchしてないみたいでよくわかりません。

環境はVisual C++ 2008のWindowsフォームアプリケーションです。

277:デフォルトの名無しさん
08/03/10 00:46:32
その指定したフォルダにout.txtが作られていないか?
ファイルを開くダイアログはカレントディレクトリを変更する副作用があったはず。
カレントディレクトリに置きたいなら、このダイアログを開く前に予め記憶しておけばいいし、
実行ファイルのある場所に置きたいのなら、
Application::ExecutablePathから加工して実行ファイルのあるディレクトリを切り出しておけばいい。

あと、swはSystem::IO::StreamWriter sw("out.txt");と書け。そしてsw.Write(s);とする。
こうするとClose(正確にはDispose)が自動的に呼ばれる(例外で抜けるときでも)。
これを使わないのはC++を使う意味がない。

278:276
08/03/10 02:24:15
>>277
あ。。。。
おっしゃる通りでした。
こんな初歩的なことを忘れていたとは、、申し訳ないです。

C++/CLIって全部ハンドル型でやればいいやって思ってたんですけど、違うんですね。
もう一度勉強してきます。
どうもありがとうございました。

279:デフォルトの名無しさん
08/03/10 02:38:01
openFileDialog で使われているだろう
GetOpenFileName / GetSaveFileName API は
カレントディレクトリを変更してしまう

280:デフォルトの名無しさん
08/03/10 05:35:24
ビルドの中止が出来ないのですが、どうすればいいのですか?

281:デフォルトの名無しさん
08/03/10 07:25:11
Ctrl + Break

282:デフォルトの名無しさん
08/03/10 08:40:27
>>281それをやってもダメなんです…

283:デフォルトの名無しさん
08/03/10 09:10:09
いきなりは止まらんぜ?テキトーにいえばVCにとってきりのいいところでストップする。


284:デフォルトの名無しさん
08/03/10 10:53:01
}付け忘れただけで中止が効きませんずっとです

285:デフォルトの名無しさん
08/03/10 11:19:09
そのソースを晒せ。

286:デフォルトの名無しさん
08/03/10 11:20:14
再インストールだな

287:デフォルトの名無しさん
08/03/10 12:44:49
VC++6.0を再インストールする場合はまた6.0>2005>2008の順番でインストールしないとまずいですか?

288:デフォルトの名無しさん
08/03/10 13:17:35
何故そんなにも闇雲にインストールしたがる。
VC6なんてもう要らないだろうし、2008が入っているなら2005を入れる必要もないだろ。
縦しんばVC6が必要なら、VC6をインストールして関連付けだけ直せば済みそうだが。

289:デフォルトの名無しさん
08/03/10 14:05:56
>>286
VC6は、販売期間と.net移行前の最終リリースだけあって結構それで作られたソフト多いからねぇ
いまさら、VC6で作ることは無いにしてもメンテで必要になる可能性は多いよ
俺のPCは今でも3.1とのデュアルブート環境だし

290:デフォルトの名無しさん
08/03/10 14:14:31
>>289
メンテで必要になるくらいなら、OSごとVC6環境を静態保存するだろ。常考

291:デフォルトの名無しさん
08/03/10 14:53:25
だからビルドの中止はそのオブジェクトのコンパイルが終了した時点だって。つまりcl.exe(だっけ?)が終了した時点。
でかいソースにオブジェクト分割もせずにズラズラと書いてればすべてのコンパイルが終了するまで中止できない。

292:デフォルトの名無しさん
08/03/10 16:53:48
VC++2008を使用しているのですが、console.hをインクルードする為のコンソールAPIはどうやって追加するんですか?


293:デフォルトの名無しさん
08/03/10 20:15:39
console.hなんて聞いたことないけど、
<windows.h>や<conio.h>は違うの?

294:デフォルトの名無しさん
08/03/10 20:55:38
VC++6はVistaでも動きますか?

295:デフォルトの名無しさん
08/03/11 10:07:33
>>293
コンソールAPIの使用法がいまいち解らないんで……。
ネットで検索しても、どのヘッダーファイルをインクルードするのか詳しく書かれておらず、console.hなるものを見つけたんですが、VC++2008にはそれらしいのがなくて……。

296:デフォルトの名無しさん
08/03/11 10:23:31
console.hなんてVC6にもないよ

297:デフォルトの名無しさん
08/03/11 12:10:33
やりたいことを書いたほうがいい。
やりたいことを探してるうちに、console.hの存在を知り
それを探す/使うのが目的になっちゃってないか?

298:デフォルトの名無しさん
08/03/11 14:36:55
>>296
そうなんですか……。

>>297
あ、いえ、やりたいことはあるのですが、それを成すにはコンソールAPIがないと出来ないと思ったんです……。
コンソールで文字位置、色を変えたり。それで方法を探してた結果、検索で出てきたのがconsole.hなんです。




299:デフォルトの名無しさん
08/03/11 14:42:34
いやだから、コンソールAPIはwindows.hのincludeで使えるよ。
そのconsole.h とやらはどこで出てきたの?
unix系なら sys/console.h とかあるし、CEにもそれらしいのあるけど
その console.h のインクルードは、 <console.h> なのか?
"console.h" ならそこのローカルなファイルだぞ。

300:デフォルトの名無しさん
08/03/11 14:53:33
すみません。
console.hはC言語のサイトからです。
URLリンク(www.plustarnet.com)

"console.h"です。

>>いやだから、コンソールAPIはwindows.hのincludeで使えるよ。
そうなんですか・・・。

301:デフォルトの名無しさん
08/03/11 15:55:01
URLリンク(www.plustarnet.com)
>これらの API を簡単に使って頂く為に、CConsole クラス として、一つのクラスにまとめてみました。
って思いっきり書いてるじゃねーか。
このHPの作者が、処理しやすいようにクラス化したってことでしょ

302:デフォルトの名無しさん
08/03/11 16:43:29
>>301
いろいろすみません……ありがとうございます。
そして申し訳ないです。。

VC++2008に<windows.h>をインクルードするには何か追加が必要なんですか?



303:デフォルトの名無しさん
08/03/11 16:49:40
ほらきたきた

304:デフォルトの名無しさん
08/03/11 16:52:07
>VC++2008に<windows.h>をインクルードする
VC++以前の問題で基本が分かってないから、入門書読んできなさい。

305:デフォルトの名無しさん
08/03/11 16:54:10
VCの入門書でもAPIの入門書でもなくC言語の入門書な。

306:デフォルトの名無しさん
08/03/11 16:55:11
これは初心者の俺から見ても痛い。

何が痛いかって、行動が

307:デフォルトの名無しさん
08/03/11 16:55:32
>>302
Cは初めてか?力抜けよ。

console.h使いたいなら、そのサイトのページまるまるコピーしてconsole.hというファイル名で
セーブすりゃいいし、

>>301のコードをconsole.h無しでやるなら
#include <stdio.h>
#include <windows.h>

int main(int argc, char* argv[])
{
COORD coord;
HANDLE hConsoleStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

printf("012");

coord.X = 3;
coord.Y = 1;
SetConsoleCursorPosition(hConsoleStdOut, coord);

printf("345");
return 0;
}
とかやればいい

308:デフォルトの名無しさん
08/03/11 17:06:53
すみません。ありがとうございます。
出直します。

309:デフォルトの名無しさん
08/03/11 17:32:16
VisualC++ 6.0でログ出力画面を作成しようとしています。

1.外から1行分ずつデータが常にとばされてくる
2.スタートボタンとストップボタンを用意し、スタート押下時からストップ押下時
  までの間のみ、画面に出力する
4.出力中はTeratermでtail -fをしたように、新しいログがくればスクロールしていく
  (上限を超えたら古いものから削除)
5.画面上のログは範囲選択でき、クリップボードにコピペや
  名前をつけて保存ボタンによるファイル出力を可能とする

以上の内容を作るにあたり、参考になるサイトはないでしょうか?
VBをさわったことはあるんですが、VC++は初めてで、GUIやクラスの使い方から
結構つまづいています。

310:デフォルトの名無しさん
08/03/11 17:47:59
>>309
つまりC++でのウィンドウズプログラミング入門だな。「猫でも」とかどうぞ。


しかし今VC初めてなのにVC6ってのが不思議。

311:デフォルトの名無しさん
08/03/11 18:36:28
ハノイの塔で再起なんたらの項目なんですが、これ頭で最後までたどれる人いますか?板の数は3です
これできないレベルだとこの先勉強する価値が脳にありますか?

312:デフォルトの名無しさん
08/03/11 18:46:12
遊びでC++やるとしても4本までは図に描かなくても最初からできないと結局ポインタも使いこなせないだろうしやめた方がいいよ
自分の出来る事でがんばるんだ。あきらめよう

313:デフォルトの名無しさん
08/03/11 18:55:39
学校じゃ教えてくれないすばらしいレスだ

314:デフォルトの名無しさん
08/03/11 20:09:21
ソフトからtxtやhtmlのファイルの開くのを
vcでやるのはどういう関数を使えば良いですか?

315:デフォルトの名無しさん
08/03/11 20:24:10
日本語でおk。たぶんsystemで事足りる。

316:デフォルトの名無しさん
08/03/11 20:27:55
>>312
たしかに思考の階層の深さってのは努力ではどうしようもない
能力で稼ぐ業界だからまず社会で戦えないだろうし、遊ぶならベーシックのほうが楽しい
スレタイが初心者ってなってるからって勘違いして雑魚がたまに来るのが痛い


317:デフォルトの名無しさん
08/03/11 20:31:50
よく入門書のハノイの塔がうんたらとか言うけど
そういうの載ってる本みたことないんだが

318:デフォルトの名無しさん
08/03/11 20:35:57
>>317
再帰関係かアルゴリズム関係でググればすぐ見つかる。

319:デフォルトの名無しさん
08/03/11 21:25:33
>309
Teratermのソース持ってるから見てみればいい

320:デフォルトの名無しさん
08/03/11 21:29:04
>>311
東急ハンズなどで売っているから手に取って試してみたら?

321:デフォルトの名無しさん
08/03/11 21:30:24
>>309
「Teratermでtail -f」じゃなくて、Unix系OSでtailコマンドを使っただけだろ。
Cygwinでも入れて使うか、tailのソースでも探してきたら?

322:デフォルトの名無しさん
08/03/11 21:39:05
TeratermはMFCなのか
今まで使ってて気がつかなかった

323:デフォルトの名無しさん
08/03/11 22:51:41
>>321
すれ違いだし、>>309 の方がまともなこと言ってるし。

要するに、巣に帰れと言うことだ。

324:デフォルトの名無しさん
08/03/12 05:39:15
質問です
VS.NET 2003 で Visual C++ を使用しているのですが、
みなさんは、普段完成品をリリースするときに、最適化のオプションはなにを選びますか?

325:デフォルトの名無しさん
08/03/12 06:26:00
特に遅くないからまったく気にしたことない。

326:デフォルトの名無しさん
08/03/12 07:59:06
普段意識しないが、最適化するとはまることがあるので、最適化しないようにする方が吉なのかも。

327:デフォルトの名無しさん
08/03/12 08:04:52
アホかい。

328:デフォルトの名無しさん
08/03/12 08:14:57
VCで作られたバイナリは、少なくともどのくらい古いCPUで動くんですか?486?
逆に言うと、cmov*とか使わないんですか?

329:デフォルトの名無しさん
08/03/12 10:25:51
コンソールアプリでもdosで起動した16bitモ-ドじゃ動かない

330:デフォルトの名無しさん
08/03/12 11:51:30
>>328
コンパイラのオプションで選べた気がする

331:デフォルトの名無しさん
08/03/12 12:12:25
>>309
外から飛ばされてくる部分についてはどういう仕組み?
それによってはVBで別アプリとして作ったものを利用するというのも出来そうだが

332:デフォルトの名無しさん
08/03/12 15:51:27
VC++2008を使い始めたのですがEclipseでの[Ctrl]+[I]のようなインデント修正機能ってありますか?

333:デフォルトの名無しさん
08/03/12 16:50:57
Eclipse知らんけど
Ctrl + K , Ctrl + F
だろうか?


334:デフォルトの名無しさん
08/03/12 17:47:26
独習C++の第5章の理解度チェック8の問題で思い切り恥じかいた。
解答が間違ってるじゃん。

335:デフォルトの名無しさん
08/03/12 17:49:43
連投ですまんが、まあ俺が未熟だというのも問題なんだがな。
でも間違った解答を載せるなよ(怒)

336:デフォルトの名無しさん
08/03/12 18:04:15
『独習C++ 第3版』正誤表 1刷(26件)

337:デフォルトの名無しさん
08/03/12 18:23:36
URLリンク(seshop.com)

26件中13件は、15刷で修正

338:デフォルトの名無しさん
08/03/12 19:01:14
F5でデバッグするときに確認画面が出なくなってしまいました
どうすれば今まで通り確認画面が出るようになりますか?

339:デフォルトの名無しさん
08/03/12 19:02:59
確認画面ってなんだよ

340:デフォルトの名無しさん
08/03/12 19:22:20
「ビルドしますか?」ってやつか? チェック入れると次から出なくなるからかな。 解決方法は分からないが。

341:デフォルトの名無しさん
08/03/12 19:36:01
>>340
それです

342:デフォルトの名無しさん
08/03/12 19:36:55
再インストール

343:デフォルトの名無しさん
08/03/12 19:57:50
ツール
> オプション
> プロジェクトおよびソリューション
> ビルド/実行

344:デフォルトの名無しさん
08/03/12 22:46:39
ちょっと今ネット環境がなくて調べられないんで携帯から質問です

doubleの中身をchar型に変換するにはどうしたらいいですか?

コンソールではprintfで%fを指定すれば勝手に小数点以下6位まで表示されますよね?
wsprintfではできなくて困ってます

wsprintfでchar型にし、ダイアログのスタティックテキストに表示したいんですが、
double型だけどうしても分かりません

345:デフォルトの名無しさん
08/03/12 22:49:51
wsprintfではできない

346:デフォルトの名無しさん
08/03/12 22:53:39
swprintf ではダメなのか?
wsprintf じゃないとダメな理由があるのか?

347:デフォルトの名無しさん
08/03/12 22:54:19
そうだったんですか;

何を使えば小数点以下を表示出来るでしょうか?

348:デフォルトの名無しさん
08/03/12 22:55:57
StringCchPrintf

349:デフォルトの名無しさん
08/03/12 23:21:57
できました!
早いお返事ありがとうございます。

350:デフォルトの名無しさん
08/03/13 15:44:50
VisualC++ 6.0のファイルの展開で質問です。

ビルドして出来た実行ファイルを色んなPCで起動してみたところ
エクスプローラーのアイコンの表示を縮小版にしていると
何故かfopenやcreatefileといったファイルを開く関数が失敗しました。
一覧や詳細の表示ならば問題なく動きました。

また、表示を縮小版にしていてもVisualC++ 6.0から実行した場合は
関数で失敗することはありませんでした。
表示を縮小版にしなければ問題ないのでしょうが、
原因がわからないのも気味が悪いので、分かる方いましたら教えてください。

351:デフォルトの名無しさん
08/03/13 17:05:13
エクスプローラがサムネ作るためのファイルアクセスと衝突してるんだろ

352:デフォルトの名無しさん
08/03/13 21:04:59
フリーウェアでメニューからヘルプを選択するとマニュアル.htmが
開くソフトがありますが、あれはどのような関数を使ってますか?
IE.exeを起動するのは出来ますがIE.exe起動とマニュアル.htm
の結び付け方が分かりません。

353:デフォルトの名無しさん
08/03/13 21:24:32
拡張子

354:352
08/03/13 22:08:57
自己解決すますた。

355:デフォルトの名無しさん
08/03/14 10:24:41
>>351
なるほど・・・ありがとうございます。
それではこの場合、どうすればファイルを開くことができるのでしょうか?

356:デフォルトの名無しさん
08/03/14 12:31:22
VisualC++ 6.0を使用したいんですが有料ですか?
またどこで手に入りますか?

357:デフォルトの名無しさん
08/03/14 12:38:11
URLリンク(www.microsoft.com)
すでに販売終了してるけどサブスクライバダウンロードで入手可能

358:デフォルトの名無しさん
08/03/14 13:00:56
ありがとうございます
早速ダウンロードさせてもらいます

359:デフォルトの名無しさん
08/03/14 13:06:39
金持ちだな

360:デフォルトの名無しさん
08/03/14 13:47:54
URLリンク(www.microsoft.com)

361:デフォルトの名無しさん
08/03/14 14:06:51
>>355
衝突しないような共有モード指定するとか、オープンできるまでリトライするとか。

362:デフォルトの名無しさん
08/03/14 20:14:00
VisualC++ 2005を起動しようとすると、問題が発生しましたと出て強制終了してしまいます
そこで新しく2008を入れて始めてみたのですが、途中から同じような症状になりました。どうしたらいいんでしょうか

363:デフォルトの名無しさん
08/03/14 20:41:17
Expressて、ライセンス登録してもほんとにタダなんですか??
すいませんがどなたか教えてください

364:デフォルトの名無しさん
08/03/14 21:17:31
タダだよ馬鹿

365:363です
08/03/14 22:00:17
>>364

どーもありがと。


366:デフォルトの名無しさん
08/03/14 23:05:53
なんかうまくいかないので質問なのですが、

class test{
public:
int i;
test(){ test(1); }
test(int i){ this->i = i; }
}

こういう感じでコンストラクタをオーバーロードし、コンストラクタからコンストラクタを呼ぶことはできないのでしょうか?

367:デフォルトの名無しさん
08/03/14 23:18:16
C++スレで聞け

368:デフォルトの名無しさん
08/03/14 23:21:30
つーかiはないだろ

369:デフォルトの名無しさん
08/03/15 01:40:35
>>366
普通は
class test{
public:
int i;
test(){ init(1); }
test(int i){ init(i) }
init(int i){ this->i = i;}
};
じゃねーか?
できるとしてもこっちだろ
でもできないような気がする
class test{
public:
int i;
test() : test(1){}
test(int i){ this->i = i;}
};


370:デフォルトの名無しさん
08/03/15 01:44:31
コンストラクタというものがわかってらっしゃらない

371:デフォルトの名無しさん
08/03/15 07:30:38
>>366 をやりたいだけなら、ディフォルト引数でいいんじゃね?

class test{
public:
int i;
test(int i = 0){ this->i = i; }
}

ディフォルト引数だと難しい (例えば、違う型の引数でオーバーロードしたいとか)
なら、>>369 のように共通部分をくくりだしたメンバ関数を作ればいいだけ。




372:デフォルトの名無しさん
08/03/15 09:07:55
ディフォルトwwww

373:デフォルトの名無しさん
08/03/15 09:24:06
別に「デ」でも「ディ」でもいいんでない?
URLリンク(cougar.eb.com)

374:デフォルトの名無しさん
08/03/15 09:39:06
ディスクトップパソコン

375:デフォルトの名無しさん
08/03/15 12:00:42
ハードデスクドライブ

376:デフォルトの名無しさん
08/03/15 13:14:45
ディスク、デスクの場合とは違うっしょ。
URLリンク(cougar.eb.com)
URLリンク(cougar.eb.com)

377:デフォルトの名無しさん
08/03/15 13:36:59
disk [di'sk]
default [difo':lt]

アクセント位置の違いなのかな


378:デフォルトの名無しさん
08/03/15 14:55:27
デホルト

379:デフォルトの名無しさん
08/03/15 16:19:21
Visual Studio 2005 Standard と Visual C++ 2008 Express Edition
を使っています。時々 EUC で書かれたファイルを受け取って開いて
しまい、文字化けしてしまうのですが、ファイルを開くにあたって
想定する文字コードを指定して読み込ませることは可能でしょうか?

UTF-8 と ShiftJIS に関してはどうやら判別してくれるようですし、
保存する際の文字コードにいたってはわざわざ EUC-JP で保存する
こともできるようなのですが、読み込みの際には UTF-8 か ShiftJIS
かどちらか程度しか判別してくれないようです。

せめて「俺はこのファイルを開くときに文字コード○○のつもりで
開いたぜ」ってことがステータスバーに表示されるといいのですが。

マルチバイト文字を含んだソースコードとして
UTF-8, UTF-16LE, Shift-JIS, EUC-JP のものを受け取る可能性が
あるので、できれば Visual Studio のエディタで開く
文字コードに関してどんな判定がされているのかを知りたいです。

380:デフォルトの名無しさん
08/03/15 17:23:07
他のエディタか変換ツール使えばいいだけ

381:デフォルトの名無しさん
08/03/15 18:38:43
PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
// 描画処理
DrawMain();


}
}
// Direct3D オブジェクトを解放
RELEASE(lpD3DDEV);
RELEASE(lpD3D);
// 終了する
return 0;
}

382:デフォルトの名無しさん
08/03/15 18:43:16
DestroyWindowでアプリを終了させたいのですが、ウインドウは消えるのですが、
プロセスが残ってCUPがんがん回ってるのですが、全部きれいに消すにはどうすればいいですか?

LRESULT CALLBACK procMainaa(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch (msg)
{
case WM_CLOSE:
MessageBox(NULL,"WM_CLOSE","test",MB_OK);
DestroyWindow(hWnd);
return 0;

case WM_DESTROY:
MessageBox(NULL,"WM_DESTROY","test",MB_OK);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}

383:デフォルトの名無しさん
08/03/15 18:51:41
さあ?

384:デフォルトの名無しさん
08/03/15 18:56:28
> 全部きれいに消すにはどうすればいいですか
ブレークポイント等を活用しながらトレースし、
問題箇所を探っていこう。

385:デフォルトの名無しさん
08/03/15 21:04:38
TranslateMessageの前に、
if( msg.message == WM_QUIT ) break;
でも入れたら?

386:デフォルトの名無しさん
08/03/15 21:46:59
DestroyWindowにこだわるのは何で?

PostQuit・・・じゃダメなの?

387:デフォルトの名無しさん
08/03/15 22:19:54
DestroyWindowは呼んでも呼ばなくてもいい
ただ自分で呼ばないときはDefWindowProcが代わりに呼ぶように作る
だからどっちみちDestroyWindowは呼ばれる

388:デフォルトの名無しさん
08/03/16 02:23:27
Visual Studio 2008 Express Editions をインストールしたのですが

ファイル > 新規作成 > プロジェクト > 「新しいプロジェクト」のダイアログで
プロジェクト名を入力してもOKボタンが有効になりません。

OSは、XP Home SP2です。

389:デフォルトの名無しさん
08/03/16 07:57:00
VC2008です。
L""でない""の文字列定数をANSI(SJIS)でなく、UTF-8にしたいのですが、どうすればいいですか。
ソースコードをUTF-8で保存しても、SJISにされるようです。

390:デフォルトの名無しさん
08/03/16 08:32:57
WideCharToMulltiByte

391:デフォルトの名無しさん
08/03/16 08:45:39
定数をUTF-8にしたいんですが…
実行時に変換するしか方法はないですか?

392:デフォルトの名無しさん
08/03/16 10:07:31
あとはファイルから読み込むとか、
"\xe4\xb8\xAD"のように地道に十六進拡張表記を書くくらいしかない。

393:デフォルトの名無しさん
08/03/16 10:27:27
Visual C++ では wchar_t の文字列は
UTF-16 なんですか?それとも UCS2 なんですか?

394:デフォルトの名無しさん
08/03/16 11:08:08
サロゲートペアを扱えたらUTF-16、そうでなければUCS-2。
それは冗談としても、最近のWindowsはUTF-16だから、
UTF-16として扱っておくのが吉。

395:デフォルトの名無しさん
08/03/16 16:47:44
Windowsの内部でUnicode使ってるからVCでUnicodeを使うようになっただけだから
あくまでWindowsのためのUnicodeなんだと考えておいた方がいい。

396:デフォルトの名無しさん
08/03/16 17:42:10
結局マルチバイトじゃん・・・
いや、マルチワードじゃん・・・
まぁ合成文字とかもあるから仕方ないか。
いっそのこと Mule の内部表現にしてしまへ!

397:デフォルトの名無しさん
08/03/18 01:45:20
VisualC++6.0を使って一人でプログラムを作っているのですが、
だんだんとソースファイルが増えてきて60個ぐらいになりました。
これらのファイルは1つのフォルダに入れているのですが、
ファイル名の衝突が気になり始めました。衝突を防ぐ方法として
次の二つの方法を思いつきました。

(1) ファイル名にサフィックスやプリフィックスを付けるなどして
名前が重複しないようにする。(今まで通り、1つのフォルダに全て
のソースファイルを入れる。)

(2) ファイルをフォルダに分けて管理。

ソフトウェア開発の現場では多数のソースファイルをどのように
管理していますか?アドバイスをお願いします。

398:デフォルトの名無しさん
08/03/18 01:51:54
>>397
ファイル名が衝突する=ファイル分割が間違っているorファイル命名が間違っている
とは思うけど、まぁよくあることだよな。
1も2も大差はないと思うけど見た感じ管理されてそうに見える2を選択するかな?
ただincludeパスを書くのが面倒かもしれないが・・・


399:デフォルトの名無しさん
08/03/18 01:56:41
>>398
>ファイル名が衝突する=ファイル分割が間違っている
>orファイル命名が間違っている
>とは思うけど、まぁよくあることだよな。

適切にファイル分割して正しく命名すれば、ファイルがいくら
増えても名前が衝突することはないのですか?

400:デフォルトの名無しさん
08/03/18 02:00:48
名前入れ忘れたけど399==397です。

401:デフォルトの名無しさん
08/03/18 02:01:45
>>399
システムの規模にもよると思うけど、俺のしょぼい経験じゃまず無いように思う。
きちんと命名し、役割が変わってしまった、役割を分割したときなんかに正しくリネームしてれば無さそうだけど・・・

402:397
08/03/18 02:22:48
>>401
とすると、開発の現場では1つのフォルダで全てのソースを管理する
のが一般的だということでしょうか? ちょっと意外です。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch