1 名前:デフォルトの名無しさん [2008/07/31(木) 18:02:28 ] Visual C++入門者・初心者からの質問を、 お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。 ■質問するにあたって ・エラーや警告のときはエラーメッセージを書きましょう。 ・開発環境も書きましょう、特にWindowsForm、MFC、Win32アプリケーションの区別。 ・できるだけ具体的に。 質問の仕方については次のページが大変参考になります。 www.hyuki.com/writing/techask.html ■回答するにあたって ・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。 (MSDNのどの項目だとか、何のキーワードでGoogleするとか) ・ネタや煽りは軽く流しましょう。 過去スレ、関連スレなどは>>2-5 辺り。
266 名前:259 [2008/08/26(火) 14:17:55 ] すみません・・・マジで悪いみたいですオレは理解力がなさ過ぎる・・・ 上記みたいな感じでいけるかと思ったんですが、error C2196: case の値 '513' は既に使用されています。 と出て動きません・・・ボタンクリックの1回目と2回目を分けるには、どげんしたらいいんでしょうか・・・ プログラム分けてコピペさせていただきます・・・ >>260 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { HDC hDC; PAINTSTRUCT ps; int x[2] = {0,0}; int y[2] = {0,0}; switch(msg) { case WM_LBUTTONDOWN: x[0] = LOWORD(lp); y[0] = HIWORD(lp); return 0; case WM_LBUTTONDOWN: x[1] = LOWORD(lp); y[1] = HIWORD(lp); return 0;
267 名前:259 mailto:sage [2008/08/26(火) 14:20:35 ] case WM_PAINT: hDC = BeginPaint(hWnd, &ps); MoveToEx(hDC, x[0],y[0],NULL); LineTo(hDC, x[1], y[1]); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, msg, wp, lp); } すんません下記みたいな感じ、でした・・
268 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 14:36:45 ] case WM_LBUTTONDOWN:が2個あるぞ。 どっちかはWM_LBUTTONUPの間違いだなんてことない?
269 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 14:37:46 ] >>266 case WM_LBUTTONDOWNが2個あったら、怒られるだろう あと、それだとx[2], y[2]が、WndProc()抜けると消滅する static int x[2] = {0,0}; static int y[2] = {0,0}; static int index = 0; switch(msg) { case WM_LBUTTONDOWN: x[index] = LOWORD(lp); y[index] = HIWORD(lp); index = index ? 0 : 1; return 0; WM_PAINTで、ボタンクリックが2回目以降のみ描画する・・・ とか、詰めなきゃいけないところは、まだあるけど とりあえず、こんな感じでどう?
270 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 14:41:00 ] それ、いつまでもindexが0だと思うんだ。
271 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 14:41:39 ] と、入れ替えるのか、失礼
272 名前:デフォルトの名無しさん [2008/08/27(水) 16:34:08 ] Visual C++ 2008 EE で、C++ではなくC言語を使うにはどうすれば良いのでしょうか
273 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:38:15 ] ソースファイルの拡張子を.cppから.cに変える
274 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 17:22:17 ] Visual C++ 2008で、フォームを複数使用しているのですが、 変数の値を他のフォームに渡すことは可能ですか?
275 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 17:46:46 ] 可能です。
276 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 23:03:05 ] CodeBlocksでこれのVC++のコンパイル諸々を使うためにVisual C++ 2008 EEを入れたんですが コンパイル時にkernel32.libが開けないと言われます Visual C++ 2008 EEを標準でインストールした場合のkernel32.libの場所はどこでしょうか C:\Program Files\Microsoft Visual Studio 9.0\VC\lib 配下あたりだと思ったのですが そのあたり検索しても見つかりません
277 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 23:15:11 ] C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib
278 名前:276 mailto:sage [2008/08/27(水) 23:33:57 ] >>277 ありがとうございます
279 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 08:45:12 ] >>275 どうやって渡すのか教えて下さい
280 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 09:09:18 ] ケースバイケース
281 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 09:30:15 ] アンケートの質問を複数のフォームに書いて、最終的にその回答 (はい、いいえ、どちらでもない)を質問のフォームとは別の フォームに出力したいと思っています。フォーム1の質問で集めた回答を それぞれの変数に入れ、その値をフォームに2にも引き継ぎ、変数にはフォーム1と フォーム2の値が入っているようにしたいのですが・・・教えていただけませんか?
282 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 09:43:53 ] 受け渡しするpublicなメソッド書くとか、プロパティにして読み書きすればいいじゃん。 普通のことなのに、何がひっかかってるのかがわからん。
283 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 10:23:19 ] ご回答ありがとうございます。 プログラミングはC言語を2ヶ月ほどしか学んでいなく、 Visual C++ 2008 EEも使用して2日しか経過していない ので分かりませんでした。publicやメソッドの意味を 調べようと思います。
284 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 11:14:08 ] まずC++/CLIを勉強しないとな。 つか.NET使うんならC#の方がいいぞ。
285 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 18:55:08 ] .netつかうならどう考えてもC#のほうが… C++.net好んでつかってるやついるの? いたら何がいいのか教えて欲しいくらい C++のメリットドブにすててまで.netする意味がわからない
286 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 18:58:41 ] でもC++/CLIはマジで最強だよ
287 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 19:04:27 ] >>285 283のようなやつは時々現れるが、 単にC++→フォームアプリケーションでプロジェクト作っただけで、 好みではなく気付いていないだけだと思う。
288 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 19:42:19 ] C#はフリーの逆アセツールでソースが丸見えなのが嫌でC++使ってまふ
289 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 19:52:23 ] >>286 C++習熟してて なおかつC#とかで.netつかってるなら 本当に最強かもしれんね >>288 あとランタイム配布とかめんどくさいの考えると 本気で配布するソフトはあまりC#つかわないのよね XNAのやる気のなさに絶望して近頃C++しかつかってない
290 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 19:53:24 ] C++/CLIは逆汗してもソースでないの?
291 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 19:57:08 ] やっぱVC++6.0が一番頭よさそうに見えるからつこてる
292 名前:デフォルトの名無しさん [2008/08/28(木) 21:27:59 ] ライブラリとかじゃない、普通のプログラムをデバッグしようとしているのですが、 Debugging information for 'regsvr32.exe' cannot be found or does not match. Symbols not loaded. Do you want to continue debugging ? というメッセージが出ます。(開発環境は英語版のVC++9です) Yesを選択しても、 To register a module, you must provide a binary name. という メッセージが出て結局失敗します。 このエラーメッセージの意味は、regsvr32.exeを引数なしで呼び出したためだ というのは調べてわかったのですが、このあとどうすればよいのかよくわかりません。 ツールの中などで、regsvr32.exeを削除するような操作が必要なのでしょうか? regsvr32.exeはOLEコントロールを登録/解除するために使うらしい、というのも 書いてあったのですが、まったく意味がわかってません。 どうかよろしくお願いします。
293 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 22:42:44 ] regsvr32.exeをデバッグしてるって マイクロソフトの中の人ですか?
294 名前:デフォルトの名無しさん [2008/08/28(木) 23:05:59 ] >>293 結構大きなフリーのライブラリのソースをダウンロードしてきてコンパイルしたのですが、 コンパイル終わって実行する前に、登録するために使うプログラムを選択しろみたいな メッセージが出てきて、適当にデフォルトのを選択しておいたところ、292みたいな状態になって しまいました。 ずっとLinux使ってたので、もしかしてすごく見当はずれな質問してるかもしれませんが、 いろいろ検索してもなにも引っかからなかったし、どうすればよいか、ヒントでもよいので ください。
295 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 03:44:16 ] String^ s = "A"; for( int i=0; i<26; i++ ){ 〜何か操作〜 func( s ); } こんな感じで、func()に、「A〜Z」まで文字列を渡したいのですが、どんな操作をするとスマートに出来ますでしょうか?
296 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 03:56:27 ] func(static_cast<wchar_t>(L'A' + i).ToString());はどう? iの使い道がほかになければ、こういうループにするという手もある。 マジックナンバー26が消えるのがいい(もっとも、'Z' - 'A'でも消せるけど)。 for ( wchar_t i = L'A'; i<='Z'; i++ ) { func( i.ToString() ); }
297 名前:295 mailto:sage [2008/08/29(金) 04:19:47 ] 他にも使用していたので、前者を使わせてもらいました。 ありがとうございます。
298 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 11:04:43 ] >>292 >ライブラリとかじゃない、普通のプログラムをデバッグしようとしているのですが、 >>294 >結構大きなフリーのライブラリのソースをダウンロードしてきてコンパイルしたのですが、 どっちなんだ。
299 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 18:20:27 ] ダイアログボックスでボタン配置したときは プロパティからデフォルトボタンに設定できるけど CreateWindowで配置したボタンを デフォルトボタンにするにはどうしたらいいですか?
300 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 18:30:13 ] 作った後? 作るときなら、BS_DEFPUSHBUTTON
301 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 18:43:58 ] >>300 作ったあとに デフォルトボタンにしたり、しなかったり したいです
302 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:14:06 ] あとでスタイル変えるのは SetWindowLongでできるけど、 どうなるかはわからん、他のボタンのDEFも外さないと無理かも? 見た目はDM_SETDEFID送ればいいみたいだけど。
303 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:18:01 ] BM_SETSTYLE でもいけた。まあいろいろやってみ
304 名前:デフォルトの名無しさん [2008/08/29(金) 19:28:50 ] >>298 すいません。 結構大きなライブラリのソースをダウンロードしてきて、それをコンパイルした後、付属の サンプルコード(こいつは結構小さい普通のプログラム)をコンパイルしようとしたんです。 なんでどっちも本当です。 結局まだわからないので、スタティックライブラリを自分で作って勉強してみてます。 でもregsvr32.exeなんて使わないっぽい。 スタティックなライブラリをデバックするときって、regsvr32.exeを使いますか? 手順としてはこんな感じ。 (1)ライブラリ作成(名前はStaticLibrary.libとします) (2)regsvr32.exe \i StaticLibrary.lib (3)このライブラリをつかうサンプルプログラムを作成してデバッグ。
305 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:32:48 ] それはない。 regsver32の対象になるのはDLLだけ。
306 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 20:29:23 ] >>304 exeのプロジェクトのプロパティの「デバッグ」の「コマンド」がregsvr32になってるのかな。 空にしてok押してみて。”$(TargetPath)”が入ると思う。 新しいプロジェクトを作るときのウィザードで選択を間違えたのかな。
307 名前:デフォルトの名無しさん [2008/08/30(土) 01:12:35 ] >>304 ありがとうございます。おっしゃるとおりになってました。 そこを空にして、追加のインクルードパスにboostを追加して、F7でビルドするとビルドできました。 その後、同じソリューションの中のほかのサンプルプログラムをコンパイルするごとに追加の インクルードパスにboostを追加する、という作業が必要だったのですが、これはしょうがないですか? どこかで設定すれば同じソリューション内なら一度の追加ですむとか、そういうことはできないですか?
308 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 12:47:12 ] VS2008を使っているのですが、newで確保したクラスの動的配列の内容を デバッガで全て表示させるにはどうしたらよいのでしょうか? STLのstringやvectorだと上手く表示されているのですが、何かいい方法があるのしょうか? どなたか教えて下さい。
309 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 15:57:21 ] 変数の後ろに、カンマと数字で
310 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 13:09:13 ] >>309 最初何のことだか分からなかったのですが、ググって見てようやく分かりました。 御回答どうもありがとうございました。 一応他の方の参考になるかもしれないのでリンク張っておきます。 ttp://support.microsoft.com/kb/198953/ja 他にもautoexp.datを使う方法もあるみたいですね。 ttp://www.cycleof5th.com/tips/index.php?date=2007-05-13 ttp://blogs.wankuma.com/melt/archive/2007/10/01/98927.aspx
311 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 17:21:03 ] 某動画を見ながらVC++2008をインストールしたのですが 新規作成-プロジェクトの 「VisualC++」の「空のプロジェクト」実行で ソース、リソース、ヘッダーファイルが出なく(組み込まれなく?)なりました どこかさわってしまったらしく元に戻せません 超初歩的だと思いますが宜しくお願いします。
312 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 17:41:32 ] 「空のプロジェクト」なんだから、そういうのが無くて当たり前。
313 名前:311 mailto:sage [2008/08/31(日) 18:34:37 ] www.nicovideo.jp/watch/sm4250927 この動画の1’28”くらいのところなんですが 空のプロジェクトなのに3ファイルが組み込まれてるんです なにか設定を変えているとかでしょうか?
314 名前:311 mailto:sage [2008/08/31(日) 18:43:15 ] 連投すいません 他の説明動画で解決できました。 前の動画は編集されてたのかな?
315 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 19:11:35 ] こんな動画まであるのか。 ホントになんでもあるなw
316 名前:299 mailto:sage [2008/08/31(日) 23:41:36 ] >>300 BS_DEFPUSHBUTTON も設定しましたがリターンを押しても反応しません >>302 DM_SETDEFIDを SendMessage(ウインドウのハンドル, DM_SETDEFID, (WPARAM)ボタンのID, (LPARAM)0 ); で送ってもデフォルトになってないような? >>303 SendMessage(ウインドウのハンドル,BM_SETSTYLE, (WPARAM)BS_DEFPUSHBUTTON,(LPARAM)0); にしてみましたがやはりだめです 配置してるボタンはウインドウ上に1つだけです ひょっとしてデフォルトボタンはダイアログでしか設定できないのでしょうか?
317 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 23:45:49 ] Enter打つとボタンが押されたことになるって挙動が欲しいなら、 ボタンのIDをIDOKにして、メッセージループにIsDlgMessageを組み込むじゃなかったっけ。
318 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 00:55:14 ] テキストボックスに入力中にリターン押したときに ある関数を実行したいんですが ダイアログのときはデフォルトボタンで代用してました VBとかでいうところのkeydownイベントのときにキーコードがリターンか調べて リターンなら処理をする みたいな挙動がほしいです IsDlgMessageでググったら日本語のページがひとつもないといふ
319 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 01:55:10 ] じゃあ、IsDialogMessageでググってみて
320 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 04:19:22 ] >>315 そして、 本と同じで、こういう動画も初学者向であふれるんだろなw
321 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 17:48:26 ] >>319 ググったけどよくわからんかった モードレスダイアログにしてIDOK受けるみたいな感じに解釈したんだけど コントロールのサブクラス化のほうが理解しやすかったんでそっちにしました ありがとうございました
322 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 19:49:31 ] すいません。 これからVisual C++ 6.0を勉強をしようと思っているんですが、 初心者向きのわかりやすい参考書があれば教えて下さい。 よろしくお願いします。
323 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 20:12:44 ] >>322 本題(参考書の紹介)にレスできなくてごめん。 これから勉強するのに、なんでvc6なのだ? vc6はc++の規格が固まる前のものでオススメでない。 vc9(vs2008)でいいじゃないか。
324 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:15:53 ] VC6使ってるけどC++の規格で困ったことなんかないな
325 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:21:02 ] >>323 そうなんですか? しかし会社で使用する開発環境が6.0らしいんですが・・・ vs2008はOSが2000なのでインストール出来ませんが、 vs2005ならインストールしています。 vs2005を勉強すればvs6.0にも応用出来るのでしょうか? そういうことでしたらvs2005で勉強してみます。
326 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:24:29 ] 会社で使うという事情なら6.0にしておけ。
327 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:25:37 ] ちゃんとライセンスがあるのか心配なレスだなしかしw
328 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:33:29 ] そうですね。 やはり6.0を勉強します。 話は戻りますが、初心者向きのわかりやすい参考書が あれば教えて下さい。
329 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:40:02 ] VCの場合はCかC++がある程度使えないと初心者以前なので 勉強してから出直して来てください。
330 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:44:23 ] 山本信雄のシリーズは入りとしては最高 でも、Cがある程度使えなかったらわかりません >>329 VC++とC++ってそこまで違うものですか?
331 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:53:29 ] C++はプログラミング言語 VC++はマイクロソフト社製の開発環境
332 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:59:50 ] そっか VC++はVSのC++コンパイラ群のことだと思ってた
333 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 22:08:30 ] ライセンスなんてそんなに(・ε・)キニシナイ!!
334 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 22:12:31 ] libviscawinの使い方教えてください ていうかどこで聞けばいいですか?
335 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 22:19:35 ] VC++単体パッケージにはコンパイラしかついてないのか
336 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 22:59:15 ] >>332 いやまあその理解でもあまり困らないと思う。
337 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:25:10 ] まぁ、VC6と言うとMFCを使えることを想定されるな。
338 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 00:11:16 ] win32だったらprograming windows (ペゾルド) C言語を知っている前提 MFCだったら標準口座MFC6.0(シルト) C++のクラスぐらいまで知っている前提
339 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 07:41:32 ] main( )で始まるプログラムとMFC使ったプログラムは勝手が違うな
340 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 01:35:06 ] ポインタをヘッダファイルで定義して、複数のソースから使用します。 そこでヘッダ宣言時に"_declspec(selectany)"で書くと、リンカエラーもなくビルドできます。 この"_declspec(selectany)"とは、どういったものなのでしょうか?
341 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 01:52:49 ] >>340 その通りの効果。リンク時に重複した定義を許し、1つにまとめる。 msdn.microsoft.com/en-us/library/5tkz6s71.aspx
342 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:03:54 ] WM_PAINTメッセージの処理で、クライアント領域の左側を白、右側を黒に塗り潰すとして、 再描画が必要な領域で条件分岐して、
343 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:06:21 ] 途中で送信してしまいまして、すいません。 WM_PAINTメッセージの処理で、クライアント領域の左側を白、右側を黒に塗り潰すとして、 再描画が必要な領域で条件分岐して、白黒それぞれ描画するか判断するのか、 描画が必要ない領域を塗り潰しても、結局システムは何もしないと思って 両方とりあえず描画するのか、どちらが一般的なんでしょうか
344 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:55:55 ] 領域を指定する
345 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 13:16:31 ] クライアントエリアの中は全部描く クリッピングは速度のためにある
346 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:23:30 ] 昨日勉強始めました。 LINK : fatal error LNK1181: 入力ファイル 'object\library.obj' を開けません。 というエラーが出るのですがlibrary.objを検索してもHDにはありませんし、 解決するようなサイトが見つかりませんでした。 なにか解決方法ありましたらお願いします。 環境はVisualC++2008 Expressで、コードはチュートリアル用にダウンロードしたもの。 元のコードはVisualC++6で書かれたようです。
347 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:40:55 ] それ理解できないなら別のことやった方がいい
348 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:08:18 ] どっかでひろってきたサンプルのコンパイル方法か
349 名前:デフォルトの名無しさん [2008/09/07(日) 21:02:29 ] >>273 について誰か教えてください。よく理解できません。
350 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 21:07:28 ] >>349 d.hatena.ne.jp/keyword/%A5%B0%A5%B0%A5%EC%A5%AB%A5%B9
351 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 21:11:23 ] 特に指定がない場合はコンパイラが拡張子見てどっちか判断する
352 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 23:33:38 ] 授業でbccを使って書いたプログラムのソース(問題.c)をVisual C++で流用しようとしたら 1>cl : コマンド ライン error D8045 : C ファイル '.\問題.c' を /clr オプションと共にコンパイルできません というエラーが出てコンパイルが完了しません。どうしたらよいでしょうか?
353 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 23:48:54 ] プロジェクト作るときにWin32を選ぶ。 CLR選んだらCは使えない
354 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:02:52 ] >>353 ありがとうございます。 しかし今度は 「プリコンパイル ヘッダー ファイルが旧バージョンのコンパイラで作成されています。また、C++ のプリコンパイル済みヘッダー ファイルを C で使用しています (その逆も考えられます)。」 というエラーがありました。
355 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:10:12 ] >>354 空のプロジェクト作って追加するのがいいと思うけど、 cppのプロジェクト作って追加したのなら、ソリューションエクスプローラーのとこで 該当ファイル右クリックしてプロパティ出して、C/C++のプリコンパイルヘッダーの項目のとこで プリコンパイル済みヘッダーを使用しない、にする。 あるいはプロジェクト全体でこの設定をしてもいい。
356 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:24:59 ] >>355 ありがとうございます。 何とか上手く行きましたが、最後にscanfの宣言をしてくださいというエラーが出ました。 これはどういうことでしょうか?
357 名前:356 mailto:sage [2008/09/08(月) 00:25:56 ] 正しくは「'scanf' の宣言を確認してください。」でした。
358 名前:356 mailto:sage [2008/09/08(月) 00:33:44 ] すみません。自己解決しました。 Visual C++2005からの仕様変更が原因だったみたいですね。。 お騒がせしました。長らくのお付き合いありがとうございました
359 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:34:45 ] それは2005以降出るよ。 詳しくは、そのエラーの行でF1押して出たページの「CRT のセキュリティ強化」を読むといい。 その関数使う事が決まってるなら無視してもいいし、気になるならヘルプに出なくする方法も書いてある。 scanf以外にも、printf系、str〜系で出る。
360 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 01:34:31 ] 移植性?なんだそれ?そんなの知らん! 俺はMSと心中するんだと言う気持ちならscanf_sなど_s系が付いた関数を使えば良いよ
361 名前:デフォルトの名無しさん [2008/09/08(月) 10:26:31 ] すんません VC++6.0(MFC)でテキストエディタ作れと言われたのですが、 最初の最初でつまづいてます。 プロジェクト新規作成→MFC→SDIアプリ→→で、初期のスケルトン作成。 その後ですが、IDR_MAINFRAMEのフォームの白い部分(メニューバーを除く全部 の領域)を全体的にテキスト入力欄にするにはどう操作すればいいですか? ダイアログベースのプログラムならテキストボックス置けばいいだけですが、 SDIアプリケーションの場合はどうするのでしょうか?
362 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 10:32:15 ] >>361 MFCだといくつかのやり方があって、どういう点を学習してるかによるが、、、 CViewをCEditViewに替えるだけでいけるけど、、、 Editコントロールを貼り付けるのなら、メンバーにCEditでも置いて ウィンドウのOnCreateで一緒にCreateしてやって、OnSize時に CEditをクライアントエリアと同じ大きさにしてやればいい。
363 名前:デフォルトの名無しさん [2008/09/08(月) 12:04:29 ] >>362 ありがとうございます。 なんとか後者の方法でエディットボックス設置はできました。 あとは ・起動時にウィンドウのクライアント領域と合わせる ・リサイズ時にも合わせる のようにしたいですが、ウィンドウサイズの初期値設定、クライアント領域の現在値の取得などはどのようにすれば良いですか?
364 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 12:10:38 ] クライアントのサイズはGetClientRect()というのがあるけど、 WM_SIZEのハンドラ、OnSizeの引数に幅と高さもあるから、それそのまま使えばいい。 起動時にリサイズ(WM?SIZE)も来るから、起動時のことは考えなくてもいい。
365 名前:デフォルトの名無しさん [2008/09/08(月) 16:42:03 ] >>364 ありがとうございます。 試行錯誤した結果、やはりCEditViewにすることにしました。 www.vcppclub.com/kouza/nextstep1/mdieditor1.html ここを見たら1行も書かずに、読み込み/保存機能はできてしまったのですが、疑問が。 ファイル読み込みのダイアログを出す→ユーザーが選択したファイルを読み込む→テキストエリアに表示 保存も同様。 これらに必要な処理がどこにも書かれていないような気がするのですが。 調べていた段階で、メンバ関数 OnFileOpen() を作成し、 GetOpenFileName();でダイアログを出し、 CFile型に読み込む手順が必要そうだったのですが、 自動生成されたソースではどこにも書かれていません。 にもかかわらず読み書きできるのが疑問です。 (サイトのサンプルはMDIですが、SDIでもほとんど同じのようです)
366 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 17:33:51 ] その辺はMFCとDocumentViewアーキテクチャの話だからなあ。 CWinAppからCDocument、CEditViewの操作はMFCの中に含まれている。 もちろん、自分で変更することも可能。