1 名前:Part28の1000 mailto:sage [2008/02/15(金) 01:45:56 ] Visual C++入門者・初心者からの質問を、 お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。 ■質問するにあたって ・エラーや警告のときはエラーメッセージを書きましょう。 ・開発環境も書きましょう。 ・できるだけ具体的に。 質問の仕方については次のページが大変参考になります。 www.hyuki.com/writing/techask.html myu.daa.jp/osiete/ ■回答するにあたって ・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。 (MSDNのどの項目だとか、何のキーワードでGoogleするとか) ・ネタや煽りは軽く流しましょう。 過去スレ、関連スレなどは>>2-5 辺り。
562 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 21:25:27 ] >>557 forの機能を調べなおして来い
563 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 21:39:00 ] >562 お前もCスレ行け
564 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 21:59:18 ] count=0 今0です表示 countが1になる。 条件式参照(for・・・にもどる。count<5なのでループ継続。 ・・・ 今4です表示。 countが5になる。 条件式参照。count<5なのでループ終了。
565 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 22:02:13 ] スレ違いに気づけ
566 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 09:40:54 ] 全く関係ないんじゃないからいいんじゃない? 英語の文法の授業で先生がSpeakingの話はじめたら 「先生、今文法の授業です」っていうタイプかしら。
567 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 09:56:39 ] 落ちこぼれのために小学校の復習からやられたら迷惑
568 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 11:52:00 ] バカは気づかない。 スレ違いでも、分かるやつが答えを1レスすればそこで終わることを。 結局何も分からないやつがアホみたいに、スレ違い、ヘルプ嫁を書き続けるからリソースも無駄遣いすることになる。 教えたくないなら完全にシカトしろ。どーせ答えられねーんだからよ
569 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:08:47 ] ばかじゃん
570 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:11:54 ] >559でとっくに終わってるのに
571 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:23:53 ] このスレの回答者はゴミレベルが幅を利かせてるからな 557なんかは560のレスが出れば終わるだろ。 運悪くゴミに糞回答された質問者は可哀相だよ。
572 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:30:15 ] というゴミレスを必死に繰返してる君はいったい
573 名前:デフォルトの名無しさん [2008/03/30(日) 15:32:35 ] 質問です。 C++の勉強をしようと思って、express editionをダウンロードしたんですが。 .NetFrameworkというのも一緒にダウンロードされました。 これって、何ですか?
574 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:39:00 ] express editionはC++の勉強に使えないこともないけど 本来は.NetFramework用の開発ツールですよ
575 名前:デフォルトの名無しさん [2008/03/30(日) 15:41:44 ] すみません。 .NetFrameworkって、何なんですか?
576 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:42:48 ] ググレかす
577 名前:デフォルトの名無しさん [2008/03/30(日) 15:44:15 ] ★初心者にVisual C++を教えるスレ★
578 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:45:58 ] 人類にまだ正義は残っている。 www.nicovideo.jp/watch/sm930541
579 名前:デフォルトの名無しさん [2008/03/30(日) 15:47:51 ] wikipediaで調べたら・・・ Microsoft .NET Framework(マイクロソフト ドットネット フレームワーク)は、マイクロソフトが開発したアプリケーション開発、実行環境。 WindowsアプリケーションだけでなくXML WebサービスやWebアプリケーションなどWebベースのアプリケーションなどを取り入れた環境。一般に.NETという場合.NET全体の環境を指す。 また.NET Frameworkの基盤となっている仕様はEcmaインターナショナル、ISO、JISにて標準化されており、マイクロソフト以外のベンダーが独自に実装することもできる。 実際にいくつのオープンソースによる実装プロジェクトがある。なお、CLIのマイクロソフトの実装をCLRと呼ぶ。.NET FrameworkはCLRにその他ライブラリ群を加えたものと言える。 初心者の俺には意味がわかりません。
580 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:52:27 ] なんでもすぐ聞くな 調べろ 徹底的に調べろ
581 名前:デフォルトの名無しさん [2008/03/30(日) 16:22:59 ] 調べてみました。 簡単に言うと、同じプログラムで.NetFrameworkが入ってるコンピュータなら 書き直さなくても、同じように動作するってことですか?
582 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:40:49 ] スクリプト言語みたいなもんです C++の勉強がしたいならコンソールアプリで十分
583 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:48:02 ] 質問失礼します。 現在ゲームを製作中なのですが、複数のcppファイルで同一のヘッダを 参照すると変数の多重定義によるエラーが出てしまいます。 環境はVC2005EEで、error LNK2005でググって色々試したりしてみましたが何ともいかず、 コンソールアプリケーションですごく簡単なプログラムをコーディングして試してみてもうまくいきません。 申し訳ないのですが少しでも解決方法の手立てをお教え頂けると幸いです・・・。
584 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:52:55 ] インクルードガード
585 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:53:23 ] #ifndef __HOGE_H__ #define __HOGE_H__ //・・・ #endif
586 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:54:34 ] #ifdef __MAIN__ #define EXTERN #else #define EXTERN extern #endif EXTERN int g_hoge;
587 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:58:10 ] ここに pc11.2ch.net/test/read.cgi/gamedev/1193935988/491
588 名前:デフォルトの名無しさん [2008/03/30(日) 17:23:06 ] >>561 ありがとうございました。もうちょっと調べてみます。
589 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 17:26:23 ] 皆さんご返答ありがとうございます。 >>584-585 ,>>587 この用法は既知だったので実装し、尚且つヘッダ内でstatic変数を作成し定義することも、 関数の定義を行うこともせずにビルドしてたのですが、それでもエラーが起こるため 甚だ疑問でした。環境から考えればコンパイラが古いということはないはずなのですが・・・。 >>586 そちらの用法を実装したところ、うまくいきました。ありがとうございます。 出来れば>>585 さんの記述の仕方でうまくやりたかったのですが、 何ともいかないのでこちらのやり方で何とかしてみようと思います。 しかし本当に何で#ifndefのほうはうまくいかないのか・・・。
590 名前:デフォルトの名無しさん [2008/03/30(日) 17:27:32 ] 目的が違うから。
591 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 17:34:50 ] int main () { try { LogFile logFile( "c:\\log.txt" ) ; } catch(...) { return -1 ; } logFile.Write( "hoge" ) ; } みたいに書きたいんだけど、tryのスコープにlogFileが捕らわれてしまうんだけどどうすれば解決できるでしょうか
592 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:28:59 ] >>591 LogFile のインスタンスが try 内でのみ有効なのでは? ポインタを使うのが常套手段かと LogFile *LogFile; try { LogFile = new LogFile( "c:\\log.txt" ); } catch (..) { return -1; } LogFile->Write( "hoge" ); .... delete LogFile; LogFile が ref class なら * を ^ に、 new を gcnew で置き換えればOK
593 名前:591 mailto:sage [2008/03/30(日) 18:36:17 ] mainのreturnが複数の箇所になって、ポインタをいちいち開放するのがスタイリッシュじゃないと感じて、 オブジェクト使って自動的にデストラクトさせようという狙いだったんです。
594 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:47:29 ] >>593 goto 文でエラー処理すれば? err_1: delete a; err_2: delete b; return -1; みたいな感じで 著名なツールでも内部でgoto文使って コードを簡潔化してる事あるよ あとはdefine使うぐらいしか無いんじゃ オヤジプログラマーに「goto文使ったら減給」とか 言われかねないけどw
595 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:50:14 ] どうでもいいけどスレ違い
596 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:52:28 ] >>591 これでダメな理由は? try { LogFile logFile( "c:\\log.txt" ); logFile.Write("hoge"); } catch(...) { return -1 ; }
597 名前:591 mailto:sage [2008/03/30(日) 18:55:55 ] >>596 かなり簡潔に書いたけど、main内でいろいろ処理しながら、いろいろとログ書き込んでるからきびしいかと
598 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:56:05 ] そんなことよりスレ違いを気にしたほうがいい
599 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:01:13 ] このスレの対象ってC++なの?CLRなの?MFCなの?
600 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:06:35 ] ttp://pc11.2ch.net/test/read.cgi/tech/1068359871/896 ↑ 誰かご存知の方いませんか?(´;ω;`)ブワッ センセー、C++もCLIもMS VC範囲内だと思います。
601 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:14:57 ] >599 標準C/C++のスレでないことは確か
602 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:18:16 ] C++をVCに含めるならVCはWinに含まれるのか?
603 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:33:55 ] >>596 コンストラクタで例外が発生する場合もあるしね。 すれ違いなんて気にするな。 その方が愛が育まれる。
604 名前:デフォルトの名無しさん [2008/03/31(月) 11:37:10 ] case WM_CREATE: hdcMem=CreateCompatibleDC(GetDC(hWnd)); break; case WM_PAINT: hDC=BeginPaint(hWnd,&ps); BitBlt(hDC,0,0,500,415,hdcMem,0,0,SRCCOPY); EndPaint(hWnd,&ps); return 0; こんな感じで、ウィンドウのDCと互換性のあるDC(hdcMem)を作り WM_PAINTでhdcMemからウィンドウのDCへコピー(画面に表示させる)・・・ というようにしたいのですが 例えばTextOutなどでhdcMemに書き込んでも 画面に何も表示されません。 教えて欲しいです。 あと、このプログラムはゲームのソースの一部ですが、この考え方って 一般的なものでしょうか?
605 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:59:58 ] 更新ないと描画されないからか?
606 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 13:55:22 ] ビットマップ選択してないとか?
607 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:03:39 ] どのcaseでtextoutしてんだ? PAINT以外でInvalidateRectしてないとか? てかbitmap選択してないからじゃないの?
608 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:34:06 ] 最初は1x1ドットのビットマップが選択されてるから、 1ドットだけコピーされてるよ。 同じ色になってなけりゃ虫眼鏡で見ればわかるよ。
609 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 12:22:11 ] リストビューにファイルを表示させようと思い、SHGetFileInfoでファイル情報を取得したところ、ファイルの種類とアイコンが思惑と異なりました。 対象はあるアプリケーションのファイルなんですが ファイル種類 → システムフォルダ アイコン → マイコンピュータのアイコン となってしまいます。 第一引数のLPCITEMIDLISTはフルパスを元に自作したものを使っています。 IEnumIDListのNext()関数で取得したLPCITEMIDLISTを用いた場合は正常に取得できる所を見ると、やはりLPCITEMIDLISTの自作部分に問題があると思った方がいいのでしょうか?
610 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 12:28:54 ] そこまでわかってたらデバッガか何かで確認するだけ
611 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 13:45:21 ] この辺が参考になるかも。 [ファイルを列挙する] www.kab-studio.biz/Programing/Codian/ShellExtension/05.html
612 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 15:05:06 ] >610 同じハズの2処理で結果が違うのですから、やはり何か異なるはずですよね。 もう少し追跡に集中してみます。 >611 こちらのサイトは参考資料として活用させてもらっています。 もう一度最初から読み直すなどして、もう少し理解を深めようと思います。 お二方ともありがとうございました。
613 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 15:40:57 ] >>611 www.kab-studio.biz/Programing/Codian/ShellExtension/06.html ↑に「IEnumIDList::Next()で取得するアイテムIDリストは、たったひとつのアイテムID、つまりそのファイルかフォルダだけしか持っていません。」 て書いてある。 これが原因じゃない?
614 名前:611 mailto:sage [2008/04/01(火) 15:42:10 ] >>612 と書きたかった。
615 名前:611 mailto:sage [2008/04/01(火) 15:57:38 ] 多分フルパスで取得したLPITEMIDLISTを先頭にたどっていけばいいんじゃないかな。 そうすれば最後はNext()で取得したLPITEMIDLISTと一致すると思う。 マイコンピュータのアイコンが表示されてしまうのは、 フルパスの先頭である「マイコンピュータ」を指してるからじゃないかな。
616 名前:611 mailto:sage [2008/04/01(火) 15:59:46 ] >>多分フルパスで取得したLPITEMIDLISTを先頭にたどっていけばいいんじゃないかな。 「先頭に」じゃないな。「末尾に」だな。 確認はしてないので違ってたらごめんね。
617 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:23:02 ] >616 いえ、ありがとうございます。 ここは多少立ち止まってでもしっかり理解したい所なので、全て試してみようと思います。
618 名前:デフォルトの名無しさん [2008/04/01(火) 17:48:04 ] 初心者に教えてくれる掲示板ということで教えてほしいのですが、 スタティックテキストの文字の色、大きさ、フォントの種類を変更したいと思っています。 初期の設定で変更し、その後は特に変更しません。 VisualC++2005のダイアログベースで作成中です。 よろしくお願いします。
619 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 18:25:29 ] >>618 ダイアログベースってMFC?そうでない? スタティックテキストは個別に変更したいってこと? リソースエディタでは無理だから、大きさとフォントは、別に作ったフォントを WM_INITDIALOGでWM_SETFONTしてやると変更できる。 色はWM_CTLCOLORSTATICメッセージでSetTextColor呼ぶとか
620 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 18:26:03 ] >618 そのへんは普通に勉強すれば誰でもわかることだし 掲示板でいちいち説明できる分量じゃない。
621 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 18:30:53 ] 初心者に教えるスレでっせ。
622 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 18:37:09 ] 教えるのはいいけど理解できるか?
623 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 18:42:36 ] この掲示板で説明するべき話題でないというのは同意。 ググった方が早くて確実で分かりやすいと思う。 突き放すことはないかなって思っただけです。
624 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 18:50:00 ] まあ環境もうちょっと書いてくれないとね。 詳しく書いた後で、MFCだとどう書きますかとか聞かれたらやだしね。 適当にはしょって答えて、そのキーワードでググってもらうのがいいかと。
625 名前:デフォルトの名無しさん [2008/04/01(火) 19:19:54 ] >619 ありがとうございます。 MFCです。スタティックは個別にそれだけを変更したいです。 その辺のキーワードを頼りに勉強してみます! >620 初心者なんですいません。 >そのへんは普通に勉強すれば誰でもわかることだし ということですが、その普通にを教えていただけませんか? もちろん参考書で勉強をしていますが、各コントロールの使い方が主に載っていてそれはわかるが、応用するときにはどうしていいかわかりません。 未熟者ですいませんがキーワードとかこういうの参考になるよってのを教えていただけたらと思います。 よろしくお願いします。
626 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 19:22:22 ] >各コントロールの使い方が主に載っていてそれはわかるが、応用するときにはどうしていいかわかりません。 >625 林本だろそれ
627 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 20:11:22 ] 本は欲しい情報が載ってないことが多いし探すのが大変。 自分はMSDNを調べたりキーワードでググったり掲示板を利用したりしている。 掲示板 rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi m--takahashi.com/
628 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 20:15:42 ] コントロールのデバイスコンテキスト取得 ↓ pDC->SetTextColor(0xffffff);
629 名前:デフォルトの名無しさん [2008/04/02(水) 01:29:08 ] DLLファイルを作成するプロジェクト(A)と、そのDLLファイルを使う プロジェクト(B)があります。AとBは別個のフォルダに収められている ので、BからAのDLLを使うには次のことをしなければなりません。 (1) .libファイルの場所をBで設定。(コンパイル時) (2) Bの.exeとリンクされる.dllの場所を設定。(実行時) (1)については[プロジェクト]→[設定]→[リンク]タブで設定しました。 (2)についてはどうすればいいのでしょうか? Aが作るDLLにはデバッグバージョンとリリースバージョンがあります。そこで、 Bの.exeがデバッグバージョンであれば、AのデバッグバージョンのDLLが、 Bの.exeがリリースバージョンであれば、AのリリースバージョンのDLLが リンクされるようにしたいのですが。
630 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 02:02:28 ] >>629 AとBの出力フォルダをデバッグ同士・リリース同士で揃えたらいいんじゃない?
631 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 02:13:14 ] >>630 .exeと.dllが作成される場所はデフォルトのままにしておきたいのですが。。。
632 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 02:31:13 ] >>631 ならBのプロジェクトのプロパティのデバッグの環境変数の設定で Aの出力フォルダをパスに追加しておくというのはどう?
633 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 02:46:44 ] >>632 すみません。具体的にどうやって設定したらよいか教えてもらえませんか? [プロジェクト]→[設定]とか[ツール]→[オプション]とかは散々いじくった のですが。。。 Visual C++6.0です。
634 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 06:53:44 ] カスタムビルドプロセスで、Aのdllをこっちのexeの出来るフォルダにコピーするとか。
635 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 08:19:54 ] >>633 出力はデフォルトのまま出来たDLLとかlibをコピーするのは駄目なの? コンパイル後のコマンドでコピーすればよいと思うんだけど あと、デバッグとリリースを分けるなら別名にしたほうがいろいろ便利だよ
636 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 10:26:22 ] 同じソリューションに入れて依存関係作っとけばよかった気がする
637 名前:625 [2008/04/02(水) 11:54:51 ] >>626 林本です! 一応初期化のところでCreateFontでフォントを作成し、GetDlgItemでIDを取得し、SetFontでフォントを指定して文字の大きさは変更できました。 あとは色ですね。。。 もうちょっと勉強してみます!
638 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 12:05:55 ] >>637 色は OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) で if (pWnd->GetDlgCtrlID() == IDC_HOGE) { pDC->SetTextColor(RGB(0xff,0,0)); } とか }
639 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 18:23:21 ] デバッグウインドウに文字を表示するにはどうすればよいでしょうか?
640 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 18:29:20 ] 以前学校の授業でC言語を簡単に勉強した事があるのですが C++とCはまったくの別物と考えたほうがいいのでしょうか? また、勉強用に独習C++あたりを購入しようかと思っているのですが、他におすすめの入門用の書籍などありますか?
641 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 18:31:58 ] あまり別物でないように使う事も出来るけど、 フルに機能を利用すれば全くの別物になる。 入門書は ・ 独習 C++ ・ C++ プライマー 第4版 ・ ロベールの C++ 入門教室 の3つを実際に店頭で読んでみて決めてみたら。
642 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 18:36:17 ] >>639 デバッグ中の出力ウィンドウのこと? OutputDebugStringとかOutputDebugStringFormatとか使う MFCだとTRACEマクロもある
643 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 18:41:14 ] >>641 なるほど、基本的な部分が似てるのなら少し安心です 前に独習Perlがすごい役にたったから今回も独習シリーズでいいや、とか思ってた たしかに読んでみて自分に合ったの探したほうがよさそうですね。 どうもありがとうございます
644 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 19:53:10 ] >>636 依存関係ではダメと思う。 自分は634のようにしている。
645 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 21:00:54 ] >>643 自分は「やさしいC++」がオススメ
646 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 23:31:13 ] >>642 アリガトン
647 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 02:55:42 ] >>634 >>635 ありがとうございます。うまくいきました。 [プロジェクト]→[設定]→[ビルド後の処理]タブで、 出来たての.dllをコピーするコマンドを指定しました。 copy $(TargetPath) コピー先フォルダ これでビルド後に.dllが(対応する).exeのフォルダにコピーされ、 .exeの実行時に適切な.dllが使われるようになりました。 >あと、デバッグとリリースを分けるなら別名にしたほうがいろいろ便利だよ 考えてみます。今のところ不都合はないように思います。 >>636 >同じソリューションに入れて依存関係作っとけばよかった気がする >>644 さんのおっしゃる通り、この方法はダメでした。 1つのワークスペース(VisualC++6.0なので)に2つのプロジェクトを挿入して、 それらのプロジェクトの間に依存関係を指定してみたのですが、 うまくいきませんでした。この方法でできれば簡単で良いのですが。。。
648 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 07:19:02 ] WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, LoadCursor(NULL,IDC_CURSOR1), NULL, NULL, L"Cursor Test", NULL }; カーソルを自作カーソルIDC_CURSOR1にするにはどうすればいいんですか? こうやるとエラーになってしまいます。
649 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 08:12:29 ] ■質問するにあたって ・エラーや警告のときはエラーメッセージを書きましょう。 ・開発環境も書きましょう。 ・できるだけ具体的に。
650 名前:デフォルトの名無しさん [2008/04/03(木) 08:20:17 ] >>648 -LoadCursor(NULL,IDC_CURSOR1), +MAKEINTERSORSE(IDC_CURSOR1) 綴りまちがってるから自分で確認して
651 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 09:06:33 ] 開発環境は2008です。 WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, LoadCursor(NULL, MAKEINTRESOURCE(IDC_CURSOR1)), NULL, NULL, L"Cursor Test", NULL }; - + の意味がわからないのですが これで実行した時のエラーは error C2065: 'IDC_CURSOR1' : 定義されていない識別子です。 warning C4003: マクロ 'CreateWindowW' に指定された実引数の数が少なすぎます。 error C2059: 構文エラー : ')' です。
652 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 09:38:12 ] IDC_CURSOR1っていう名前のカーソルのリソースがないんじゃないのかい?
653 名前:デフォルトの名無しさん [2008/04/03(木) 10:09:47 ] Windowsフォームアプリケーションだとコントロールを個別にフォントとかをプロパティで簡単に設定できるんですね。 なんでMFCだとできないんですかね。。。実はできたりするんですか?
654 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 10:14:51 ] ポトペタRAD環境をC++で使いたいならC++Builderへどうぞ VC++ではできません
655 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 11:50:43 ] >>651 LoadCursor(NULL,IDC_CURSOR1) だと IDC_CURSOR1 でエラーにならないのに LoadCursor(NULL, MAKEINTRESOURCE(IDC_CURSOR1)) だとエラーになるのはおかしいだろ。 そして、LoadCursorの第一引数がNULLなのはシステム定義アイコンを使うときだ。 hInst を入れてみ。
656 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 12:30:44 ] だめでした。 IDC_CURSOR1 を定義する方法は、 リソースビュー>追加>リソース>cursor>新規作成 出来た resource.h をcppにインクルード だけでいいですか? LoadCursorのヘルプに afxwin.h が必須インクルードと書いてあるのですが、インクルードすると #ifdef _DLL #ifndef _AFXDLL #error Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] の#errorに飛んでしまいます。
657 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 15:09:25 ] MFCのLoadCursor使うならafxwin.hが必要でMFCとしてビルドしないといけない
658 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 16:21:45 ] もしかして>>648 のエラーも >error C2065: 'IDC_CURSOR1' : 定義されていない識別子です。 なのか? そうでないなら出たエラー書いてみて
659 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 16:29:47 ] あと、>>648 のその行以外は問題ないとすると WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_CURSOR1)), NULL, NULL, L"Cursor Test", NULL }; こうだな。GetModuleHandle(NULL)がかぶってるから、 事前に呼んでとっておくといい、けどこれWinMainの第一引数なんだけどな。
660 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 18:12:45 ] エラーが出なくなりましたが、今度はウインドウが出てこなくなりました。 正常だった記述に戻してもウインドウが出てこなくなりました。 中間ファイルもソリューションのクリーンで消しましたがだめです。WINごと再起動してもだめです。 DirectX9SDKのサンプルCreateDeviceのVS2005プロジェクトをVS2008で自動変換して取り込み自作カーソルリソースを新規作成で追加して #include "resource.h"追加と WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L"D3D Tutorial", NULL }; の部分を WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_CURSOR1)), NULL, NULL, L"Cursor Test", NULL }; に書き換えただけです。たすけてください。もう12時間これやってます^^;
661 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 18:18:42 ] エラーが出ないって事はコンパイルできたんだろ? そしたら次はデバッガの使い方をだな・・・ とりあえず、F10連打だ
662 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 18:53:10 ] ああそうか!カーソルはこれでクリア出来てるってことですよね LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_CURSOR1)) の意味と、CreateDeviceが失敗してるのはまた明日調べます。 まじありがとうございました。