★初心者にVisual C++を教えるスレ★ Part29at TECH
★初心者にVisual C++を教えるスレ★ Part29 - 暇つぶし2ch49:デフォルトの名無しさん
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つのフォルダで全てのソースを管理する
のが一般的だということでしょうか? ちょっと意外です。

403:デフォルトの名無しさん
08/03/18 02:31:40
>>402
いやいやw>>397の2だよ。いちばん深い階層で4くらいかな?
ファイル数はヘッダー含めて100位だと思う。数えたことないけど・・・
1フォルダあたりファイルが20超えるくらいから考え始めて、50超えたらまずフォルダわけする。
というか、ファイルが増えたからフォルダわけっていうより役割の分割が自然とフォルダ単位になる。

404:397
08/03/18 02:57:59
>>403
やっぱりそうですか。ファイルの役割に着目してフォルダ分けする
のが自然ですよね。

僕の場合、Visual C++のFileViewのツリーで細かくフォルダ分けして
ファイルを分類しています。だから実際のファイルのフォルダ分けは
特に必要がないように感じていました。FileViewのツリーとWindowsの
フォルダのツリーを同じに保つのはめんどくさい(片方を変更したら
もう片方も変更しなければならない。)ので実際のファイルは分類せず
に1つのフォルダに放り込んでいました。

一人で開発していると、このような方法が一般的かどうかわからない
ので、アホなことをやってるんじゃないか、とか思うことが良くあります。


405:デフォルトの名無しさん
08/03/18 06:02:52
一般的ではないアホなことをやっている

普通はプロジェクトごとにフォルダわけするだろ
さらに別プロジェクトでも共有するライブラリなどのヘッダも
別フォルダにしてパスを通す

406:デフォルトの名無しさん
08/03/18 08:37:57
大量のソースがある巨大プロジェクトなのかと思ったけど
ファイル名の衝突とか言ってるから、今まで作ってきた全然関係ないプログラムが
1つのフォルダにごっちゃごちゃに存在してるということか?

407:デフォルトの名無しさん
08/03/18 12:33:31
>>397
参考までに衝突する(した)ファイル名を教えてほしい
一人で作っていて名前が衝突するって考えられんのだが

408:デフォルトの名無しさん
08/03/18 19:04:09
>>362みたいな感じでVisualC++起動時にエラーが出るんですけど、解決法は無いですか

409:デフォルトの名無しさん
08/03/18 19:06:35
新しいパソコン買う

410:デフォルトの名無しさん
08/03/18 19:08:29
>408
しつこい

411:408
08/03/18 19:21:38
初心者に教えるスレでそんな風に言われても…

412:デフォルトの名無しさん
08/03/18 19:29:36
いやだから新しいパソコン買えよ
てかまずPCスペックぐらい書けや

413:408
08/03/18 19:33:50
>>412
WindowsXP HomeEdition
Intel Celeron M processor 1.60G
メモリ 704M

414:デフォルトの名無しさん
08/03/18 19:53:55
OSから再インストール、それで駄目なら新しいパソコン買う

415:408
08/03/18 19:59:06
分かりました。ありがとうございました

416:デフォルトの名無しさん
08/03/18 21:47:42
VC++2008でC++の勉強を始めたものです。新規プロジェクトでコンソールアプリを選択して
新規プロジェクトを作成し、そこに既存のCPPファイルとかヘッダとかを追加したのですが、
ヘッダがコンパイラに認識されておらず、コンパイル時にヘッダがないというメッセージが
でてコンパイルできません。どうすればよいですか?
どうかよろしくお願いします。

417:デフォルトの名無しさん
08/03/18 23:06:01
ヘッダーがないなら
ヘッダーを用意しなきゃだめじゃない。

418:デフォルトの名無しさん
08/03/18 23:15:08
>>416
全部がファイルシステム上で同じフォルダにあるか?
違うフォルダにあるなら、同一のフォルダにまとめてから追加しろ。


419:デフォルトの名無しさん
08/03/19 00:43:20
今windowsにログインしているユーザーに
管理者権限があるかどうかを判別する関数があれば教えてください。

420:デフォルトの名無しさん
08/03/19 00:51:44
Administratorsグループに属しているかってこと?

421:デフォルトの名無しさん
08/03/19 01:43:08
すいません、今インストールするなら
Visual C++ 2008 再頒布可能パッケージ (x86)
だけでいいでしょうか?

Visual C++ 2005 再頒布可能パッケージ (x86)
も入れておいた方がいいですか?

422:デフォルトの名無しさん
08/03/19 04:46:11
最近VisualC++2005ExpressEditionをインストールして
簡単なHelloWorldプログラムを書いてビルドしようとしたのですが
エラーが出て先に進めなくなってしまいました。
OSはWindows2000。win32/コンソールアプリケーション/空のプロジェクト、で書いてます。

エラーの内容は以下です。↓
致命的なエラー C1902
プログラム データベース マネージャが一致していません。セットアップが正しく行われているか確認してください。

マニュアルによると対処方は以下です。↓
プログラム データベース ファイル (.pdb) は、
コンパイル時に検出されたものより DBI.dll のより新しいバージョンを使用して、作成されました。
最新バージョンの DBI.dll をシステムにインストールしてください。

しかしパソにはDBI.dllはインストールされておらず、どこから入手したものか見つかりません。

エラーの前に次の警告も出ていました。
警告 D9028 : 簡易リビルド時のエラーです、通常のビルドに戻します
マニュアルによると、
プロジェクトの .idb ファイルが破損しています。このファイルを削除して、リビルドしてください。

しかしそもそも.idbファイルが生成されていません。
プロジェクトのプロパティで簡易リビルドをオフにしたら出なくなりましたが、
要するに簡易リビルドできないということなので、どうも落ち着かないです。

もしわかる方いたらおしえてください。

423:デフォルトの名無しさん
08/03/19 06:10:26
リビルド 最初から全部ビルドやりなおし
簡易リビルド 一部のファイルを除いてビルドやりなおし

一回リビルド通ったら次からは簡易リビルドで問題ないはず

424:397
08/03/19 08:05:03
>>407
僕のプログラムでは、字句解析を行うLexクラスというクラスが
二つ必要です。二つのLexクラスを作って、別々の名前空間に入れました。

1つは、DIC::Lexクラスです。
もう1つは、CP::Lexクラスです。

これらのクラスのためのヘッダと実装のファイル名はともに
lex.hとlex.cppですから衝突しました。

僕はプリフィックスを付けて二つを区別しました。
(dlex.h, dlex.cpp) と (clex.h, clex.cpp)

これで不満はないのですが、プリフィックスを付けで衝突を避ける
代わりに、ファイルをフォルダで分類することによって衝突を避ける
という手もあるかな、と思ったのです。

425:397
08/03/19 08:06:51
>>405さんのレスが非常に気になるのですが、僕が>>404で書いたことが
うまく伝わってないような気がするので、もう一度きちんと説明します。

僕のプロジェクトのフォルダ構造は次の通りです。

<CoolCorpus> プロジェクトのフォルダ
├<Release>
├<Debug>
├<souce>
├<data>
└<test>

上記のCoolCorpus\souceにすべてのソースファイル(26個の.hファイルと
36個の.cppファイル)をフォルダ分けせずに置いています。

62個のファイルは全てCoolCorpusプロジェクトに参加しています。
従って、ワークスペースウィンドウの "FileView" タブのツリーには62個の
ファイルが表示されています。

"FileView"タブのツリーは、フォルダを作って自由にカスタマイズできます。
そこで、僕はデフォルトで作成される3つのフォルダ

Source Files, Header Files, Resource Files

を削除してしまいました。そして以下のようにツリーを構成
しました。(ファイル数が多いので簡略化しました。)

426:397
08/03/19 08:07:21
<CoolCorpus ファイル>
├ <下請け>
│ ├<StdAfx>
│ │ ├StdAfx.cpp
│ │ └StdAfx.h
│ └<File>
│   ├file.cpp
│   └file.h
├ <Core>
│ ├<Dictionary>
│ │ ├<Lex>
│ │ │ ├dlex.cpp
│ │ │ └dlex.h
│ │ ├<Freq>
│ │ │ ├freq.cpp
│ │ │ └freq.h
│ │ ├dictionary.cpp
│ │ └dictionary.h
│ └<Corpus>
│   ├<Lex>
│   │ ├clex.cpp
│   │ └clex.h
│   ├corpus.h
│   ├corpus1.cpp
│   ├corpus2.cpp
└ main.cpp

427:397
08/03/19 08:08:08
1つのクラス用に hと.cppを作り、それらをセットにして一つのフォルダに
入れています。フォルダといっても、FileViewのフォルダです。
本当のフォルダ(Windowsのフォルダ)ではありません(念のため)。

ソースを読むときは、このツリーをクリックしてソースを表示させます。
"ClassView"タブは全く使いません。

さて、この方法は変でしょうか?
開発現場での方法が知りたいのですが。。。

428:デフォルトの名無しさん
08/03/19 09:12:13
以下のプログラムから出力される数字を、
wavファイルにするにはどうすればいいでしょうか・・

#include <iostream>
#include <math.h>
using namespace std;
const int rate=44100;

int p(double q, int f, int t)
{
const double pi=3.1415;
double x;
x=sin(2*pi*f/rate*q);
cout << int(x*127+128+0.4999);
cout << "\n";
if (f<t) p(q,f+1,t);
return 0;
}

int main(void)
{
p(440.0 , 0, rate);
return 0;
}

429:デフォルトの名無しさん
08/03/19 10:00:38
WAVファイルのヘッダを知りたいのか
ファイルへのバイナリ出力が知りたいのか
まあ両方書いてもいいけど、それあっという間にスタック食いつぶさないか?
普通にループでいいべ。

430:デフォルトの名無しさん
08/03/19 10:14:09
>427
オープンソースで開発してるのがいっぱいあるから好きなだけ見ればいい

431:デフォルトの名無しさん
08/03/19 10:36:46
>>429
すみません、両方です。

432:デフォルトの名無しさん
08/03/19 10:45:18
ProgramingWindowsにsinwaveとかいうサンプルあったと思う

433:デフォルトの名無しさん
08/03/19 14:17:11
Visual C++ 2005の超初心者ですが、今、誰か教えてくれる人いらっしゃいますか?
ちなみにC言語では簡単なプログラムをいくつか作ったことありますが、VCは初めてです。

434:デフォルトの名無しさん
08/03/19 14:19:27
何?

435:デフォルトの名無しさん
08/03/19 14:22:26
MFCアプリのダイアログベースでボタンを用意し、そのボタンを押したらRS232で通信するプログラムを作りたいです。
URLリンク(www.geocities.jp)

これを参考に作成したつもりですが、全くの初心者なので、これをどう使っていいのかがわかりません。
一応、それぞれをinit, write, readとして関数にし、ボタンクリック動作の関数で呼び出そうとしたんですができません。
クラスの概念なんかをもっと理解しなければいけないと思うのですが、時間もないので教えて頂ければ幸いです。

よろしくお願いします。

436:デフォルトの名無しさん
08/03/19 14:25:36
>>427
はっきりいいますがアナタは頭がおかしいです
同一のプロジェクトに参加しているのならば別のファイル名にするべきです

437:デフォルトの名無しさん
08/03/19 14:28:00
まずはファイルを読み書きするプログラムから勉強すれば?
あとは通信でも同じようなもんだ

438:デフォルトの名無しさん
08/03/19 14:30:28
>>435
分不相応な事はしない事です。
まったくの初心者であればまずは理解からはじめましょう

439:デフォルトの名無しさん
08/03/19 14:40:12
>>437さん
アドバイスありがとうございます。
ファイル読み書きやってみます。

ちなみに私のやってることって考え方間違ってますか?
init関数にして呼び出したりって。
Cでのイメージが抜けないのですが、、、

440:デフォルトの名無しさん
08/03/19 14:42:51
>>436さん
全くその通りです。ほんとはもっと時間をかけてやるべきですが、仕事で時間が限られているので相談させてもらいました。。。


441:440
08/03/19 14:43:43
間違えました。>>438さんです。

442:デフォルトの名無しさん
08/03/19 14:44:34
そういうサンプルなら探せばあると思う

443:デフォルトの名無しさん
08/03/19 14:56:32
VC++ 2005ProでPCの情報を取得する→CSVで指定したフォルダに吐き出す
というプログラムをあと三日で作成しなければなりません。
慣れた方なら1日で出来るみたいに言われたのですけど、
VBしかやったことなくてプロジェクト作成からさっぱりです。
本当はちゃんとC++の勉強をしてから取り組んだ方がいいのでしょうが
時間がないので無理なんです。
誰か手取り足取り教えてくれませんか?
ちなみに取得する情報は
PC基本情報
ハードウェア基本情報
ユーザー情報
ネットワーク情報
論理ドライブ情報
物理ドライブ情報
プリンタ情報
インストールされている全アプリケーション情報
です。
お願いします。。。





444:デフォルトの名無しさん
08/03/19 14:57:56
>>432
その本(サイトじゃないですよね)って、5版>4版>3・・・
って考えていいんですか。

445:デフォルトの名無しさん
08/03/19 15:26:52
>444
最初に出てくるサンプルは単に正弦波を描画するやつで
音を鳴らす用に改造したサンプルはあとの方に出てくる

サウンド関係のサンプル
AddSynth
BachTocc
Drum
KBMidi
Record1
Record2
Record3
SineWave
TestMci
WakeUp

446:デフォルトの名無しさん
08/03/19 15:28:56
上下卷必要?

447:デフォルトの名無しさん
08/03/19 16:23:44
>>443
仮にWMIで取得できる情報だけだったら、
VBScriptやVB6系でやるのが簡単だと思う。

あと、手取り足取り教えるほどのお人好しはここにはいないと思うぞ。

448:443
08/03/19 16:28:58
>>447
そうですか。。。
VB6のソースはあります。
これをVC++2005で作り直さなければならないのです。

449:デフォルトの名無しさん
08/03/19 17:02:14
そういえばMSDNにシリアル通信のサンプルがあった

//---------------------------------------------------------------------------
//
// Module: tty.c
//
// Purpose:
// The sample application demonstrates the usage of the COMM
// API. It implements the new COMM API of Windows 3.1.
//
// NOTE: no escape sequences are translated, only
// the necessary control codes (LF, CR, BS, etc.)
//
// Description of functions:
// Descriptions are contained in the function headers.
//
//---------------------------------------------------------------------------
//
// Written by Microsoft Product Support Services, Windows Developer Support.
//
//---------------------------------------------------------------------------


450:デフォルトの名無しさん
08/03/19 17:04:51
シリアルは慣れてないとハマるから、mscomm.ocx使ったほうが楽かも

451:デフォルトの名無しさん
08/03/19 17:40:12
>>397
職業プログラマだけど、自分はそうやってるし、他の人もそうやってる。
一般的かどうかまでわからないが、合理的な方法と思う。

実際のディレクトリ構成は、ファイル数が多くなったら機能ごとに分けてる。
その方が管理しやすいから。

ファイル名はプリフィックスをつけて一意にする。
ディレクトリが別になってても、単体で見たときに区別できないから。


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