- 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辺り。
- 51 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 03:26:55 ]
- >>49
なるほど。サンクス。 >Makefileは昔のVCは作れたけど 「全般」っていう種類のプロジェクトにメイクファイルプロジェクトっていうのがあるけどこれ? >>50 今wikipedia見たらvmwareみたいなやつか。 vistaで不安定って書いてあったからちょっと引け腰。
- 52 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:04:57 ]
- vmwareとはエミュレートするレベルが違う
vistaで不安定ならvmwareにXPでも入れて動かせばいいじゃない
- 53 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:09:57 ]
- >>52
vmwareを入れるのならXPでなくターゲットのlinuxそのものをその上にインストールすればいいんじゃないかw >>51 エミュレーションソフトを入れて大学のlinuxと同じもので開発環境を構築してみては?
- 54 名前:47 mailto:sage [2008/02/17(日) 05:50:19 ]
- 再度すみません。>>47です
とりあえずmakefileプロジェクトでクラスを書いてメインで動作確認のコードを書いてみたんですが、 ビルドを押すと、 実行するビルド コマンド ラインがありません。 と出てしまってよく分からないんだけれどこれはどういう状態です google先生でも一応調べたんですが分からないっす。
- 55 名前:デフォルトの名無しさん [2008/02/17(日) 08:09:53 ]
- >>54
その無駄な努力はやめて、CDブート可能なLinux使うかCygwin入れるかしろ。
- 56 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:18:34 ]
- なんとしてもVCでやりたいんだなwww
- 57 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:02:26 ]
- >>54
makefile プロジェクトは実行するコマンドから全て自分で指定 しないといけないから、君にはまだ無理。 そもそも、Visual Studio には make コマンドなんかついてない ことすら知らないでしょ? nmake で代用することもできるけど、makefile の文法が gmake とは違う部分があるので、お勧めしない。 他の人が書いてるように、VMware とか入れて Linux 走らせるの がいいと思う。VMware が不安と言うなら VirtualPC でやれば MS の加護が受けられるのでちょっぴり安心かもしれない。 (まともに使ったことないからよく知らんけど。)
- 58 名前:デフォルトの名無しさん [2008/02/17(日) 09:39:08 ]
- だからもう、vmwareじゃなくてCDbootのLinuxでいいよ。キノピなら問題ないでしょ。
- 59 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:44:31 ]
- 別にcygwinでいいだろ
- 60 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:53:41 ]
- VC関係ない
- 61 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 12:13:50 ]
- itpro.nikkeibp.co.jp/article/NEWS/20070912/281813/
vmware + linux 無料だお
- 62 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 12:44:13 ]
- >57
Windowsの上に載ってるVirtualPCにはMSのサポートがあるけど、 そのVirtualPCの上に載ってるLinuxはどこがサポートするんだゐ?
- 63 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:14:38 ]
- サポートがいるなら、
Windows Vista / VirtualPC 2007 -> WindowsXP / VirtualServer 2005 R2 SP1 -> Red Hat Enterprise Linux ってやればいいんじゃないかな。
- 64 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:35:59 ]
- OSだけで何万費やすつもりなんだw
- 65 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 14:09:46 ]
- 環境を同じにするんじゃなけりゃ、ソースだけを共通にするほうが面倒がないよ。
まあ環境同じが楽だけど、行ったり来たりするほうが鍛えられる
- 66 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:15:04 ]
- という勘違いした人が一人いると無駄な作業が増える。
- 67 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:21:11 ]
- 同じソース使うことのどこが勘違いなんだか。
デバッガにVCが使えるメリットは大きい。
- 68 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:22:42 ]
- いまだにデバッガとか使うやついるの?
printfで十分だろ
- 69 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:23:34 ]
- まあprintfで十分な規模ならprintfで十分
- 70 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:32:54 ]
- 学校で作るもんなんてそんな規模だろ
- 71 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 19:17:13 ]
- すみません、ちょっと質問です。
ダイアログにwebbrowserコントロールとボタンコントロールを貼り付けて ボタン押下でgoogleのページを表示させています。 その時にフォーカスがgoogle検索ページの エディットボックスにフォーカスするのですが、 このフォーカスを移動させたくない場合、どのようにすれば良いでしょうか。 Navigate2のメソッドを利用しており、このメソッドのフラグを調べてみましたがないようです。 また、webbrowser2側でSetFocus()をオーバーライドしようとするも webbrowser2側ではSeFfocus()を呼んでないようです。 webbrowser2にフォーカスを移動させない方法ってありますでしょうか?
- 72 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 19:22:21 ]
- javascriptをoffにすればいいんじゃない?
- 73 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 19:50:21 ]
- >>72
ありがとうございます! IEのオプションでjavascriptをオフにしたらフォーカスが移動しなくなりました。 今現在は自分だけのローカルPCだけに反映されると思いますが、 他のPCでも有効にするためには、Navigate2のheaderとかに組み込めばいいのかな… とりあえず、調べてみます。 ありがとうございました。
- 74 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 20:22:14 ]
- C++とC++/CLIは微妙に違うらしいのですが、素のC++の勉強がしたい場合「空のプロジェクト」というやつでプログラムを書けばいいのでしょうか?
- 75 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:04:10 ]
- >>74
CLR ではなく、Win32 で
- 76 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:21:11 ]
- >>75
最初それのコンソールアプリケーションというのを選べばいいのかなと思ったのですが、 mainの代わりに_tmainというのがあったので、違うのかなと思ってましたが、気にしなくていいんでしょうか・・・? あ、すみませんVisual C++ 2008 Express Editionをインストールしました
- 77 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:34:49 ]
- _tmain はあんまり気にしなくていい。
消して問題ない。
- 78 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:40:12 ]
- >>77
ありがとうございます、気にしないで進めることにします
- 79 名前:デフォルトの名無しさん [2008/02/18(月) 16:15:02 ]
- テンキーの+ボタンはVK_ADDフラグで取得出来るのですが、
ノートPC等でテンキーが付いてない場合、 +キーに相当するキーが押されたかを検出するには、 どのようししたら、良いでしょうか? + ;れ ↑ このキーのフラグは?
- 80 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:17:26 ]
- >>79
ノートPCでもFnキー併用とかNumLock併用でVK_ADDを発行すると思うけど。
- 81 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:17:53 ]
- 「;」か「シフトand;」ってわけじゃないの?
- 82 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:23:19 ]
- それだったらフルキーボードでも使えるわけで、だとしたらVK_ADDでは当然拾えないのだけれど。
- 83 名前:79 mailto:sage [2008/02/18(月) 16:25:14 ]
- シフトを押されてなくとも、「;」が押されたら+を押したと解釈してあげたいのです。
case ';'では引っかからず、case -69で引っかけられました。 (デバッグモードでメッセージ見ました) -69って一体・・・・? case ';'で掛からないのが納得行きません。
- 84 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:30:14 ]
- ちょっと待て、私のキーボードではShift+;は:なんだが。
つーか、Shift+=が+なんだが。
- 85 名前:79 mailto:sage [2008/02/18(月) 16:37:45 ]
- 英語キーボード配列
とかいろいろありそうですね・・・ 素直にShiftキー押してもらおうかな・・・
- 86 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:38:40 ]
- つまり、ややこしいことに日本語キーボードでは';'キーはVK_OEM_PLUS(0xbb = -69)であり、
英語キーボードでは';'キーはVK_OEM_1になると。英語キーボードで'+'の刻印がある'='キーはVK_OEM_PLUSなんだけどね。
- 87 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:48:31 ]
- これだな
#define VK_OEM_PLUS 0xBB // '+' any country
- 88 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:07:33 ]
- c++にかぎったものじゃないんですが、
今ゲーム作っててマス移動の当たり判定なら変数でなんとかなるけど ドット単位であたり判定作ろうとしたらどういう風に管理すればいいんですか?
- 89 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:30:31 ]
- ドット単位で当たり判定もてばいいじゃない
1ドット1ビットで十分だが、面倒ならcharで取るとかな。
- 90 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:31:50 ]
- あと、マップに属性もたせるならそれ相応のビット数が必要
- 91 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:36:03 ]
- 円形なら半径だけもっとけばいいし、
正方形なら角度も保持しとけばいい。 あとは数学的に判定。 範囲が極端に小さければ マス移動と似た形で判定してもいいかもね。
- 92 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 23:59:51 ]
- STLと同じで、比較関数は基本的にlhs < rhsなboolを返すもの。
msdn2.microsoft.com/en-us/library/bb385779.aspx あとは、hash_setのコンストラクタに比較関数へのデリゲートを取る奴があるから、そいつに渡す。 キーの型がoperator <が多重定義できるものなら、そっちを多重定義してもいけるはず。 ところで、hash_mapだけど、ハッシュ関数は気にしなくていいの? デフォルトでは、GetHashValueが使われるけど、これもコンストラクタで指定できる。 ほかにも、ハッシュを使わず、比較関数だけで順序付けるsetもあるよ。
- 94 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 20:23:07 ]
- >>93
Myhash_set c2 = cliext::greater<wchar_t>(); この部分ですよね bool comp(array<char>^, array<char^>) の関数を渡してもエラーになるので、 定義の仕方が違うのかなと思ってるのですが…どうにも解りません
- 95 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 23:43:01 ]
- 質問です。
「点数のデータが入った1次元配列のアドレスと人数を受け取り、 それらの最大点〜(略)を求めて返す関数を作成する」 という問題なのですが、@「〜を受け取り」、A「〜返す」 とはどういう意味なのですか? どうか教えていただけませんでしょうか
- 96 名前:デフォルトの名無しさん [2008/02/20(水) 23:51:09 ]
- 引き数を受け取り、戻り値を返す。
- 97 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:38:58 ]
- スケルトンを作るとするとこんな感じ。
int GetMaxPoint( const int * points, int num ) { // 最大値検索処理 return max; }
- 98 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:44:33 ]
- 「返す」とはreturn();の空白に数値などを入れることですか?
この問題ってサブルーチンを作るようなものですか?
- 99 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:46:42 ]
- >>97
ありがとうございます。教科書で似たような処理を見つけたので 勉強します。
- 100 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:23:15 ]
- うざい。VCと関係ないし。
- 101 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:22:49 ]
- >>100
初心者にはそんなこと分かんねーんだよww
- 102 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:04:59 ]
- そのOnDrawはViewを描画するためのDCが来るからな
OnPaintはBeginPaintのあとOnDraw呼んでるだけだし。 何がしたいの? PictureBoxに直接書けば再描画気にしないでいいよ
- 104 名前:デフォルトの名無しさん [2008/02/22(金) 14:05:20 ]
- >102
すいません、環境を描き忘れました。 なんとなく分かると思いますがMFCで VC6.0です。OSはWinXP SP2です。
- 105 名前:デフォルトの名無しさん [2008/02/22(金) 14:09:06 ]
- >103
CPen で描いているのですが再描画しないとWindowの後ろに 隠れると消えます。 別の方法があるというのですか?
- 106 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:27:57 ]
- オーナードロー使ってるのか、ビットマップでやってるのかどっち?
- 107 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:35:55 ]
- viewとコントロールは別のウインドウだから描画は別
コントロールの描画のタイミングでやらないと
- 108 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:51:14 ]
- Viewのほうで描画するのなら、オーナードローにして
WM_DRAWITEMで引数からHDC持ってきて描画するのがいいかなあ
- 109 名前:デフォルトの名無しさん [2008/02/22(金) 15:10:02 ]
- >108
今までCViewのほうばかり使っていたので、恥ずかしながら オーナードローと言うこと自体知りませんでした。 今度はそれで検索して調べてみます。
- 110 名前:デフォルトの名無しさん [2008/02/22(金) 15:13:36 ]
- >107
クラスウィザードでピクチャーボックスのオブジェクトIDをクリックしても BN_CLICKEDしか出ません。 根本的に考えていることが違うのでしょうか?
- 111 名前:デフォルトの名無しさん [2008/02/22(金) 15:27:53 ]
- >103
何がしたいのか書いていませんでした。 ただ単にピクチャーボックスにグラフを書きたいだけです。 >107 CStatocをサブクラス化しないと無理ということですか?
- 112 名前:デフォルトの名無しさん [2008/02/22(金) 15:28:38 ]
- >111
> CStatocをサブクラス化しないと無理ということですか? CStaticです。すみません。
- 113 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:43:30 ]
- FormViewってことはダイアログエディタ使ってんだよね。
まあサブクラス化でもいいけど、プロパティのタイプにオーナードロー(描画)って無い? と思ってVC6を久しぶりに起動してみたら無いんだな。
- 114 名前:デフォルトの名無しさん [2008/02/22(金) 16:12:55 ]
- >113
ないですね^^ よそのホームページで調べたとおりにやったのですが。
- 115 名前:デフォルトの名無しさん [2008/02/22(金) 16:19:27 ]
- >113
ボタンならありますね。
- 116 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:37:17 ]
- ちょっと試しにVC6で、rcファイルをテキストエディタで開いて、
SS_BLACKFRAME を SS_OWNERDRAW に書き換えて OnDrawItem を作ったら動いたぞ。 まあこのやり方はどうなのか、という話もあるが。
- 117 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:54:58 ]
- ボタンなんかと違ってわざわざオーナードローしてまで使うもんじゃないし
- 118 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:56:34 ]
- VS2003以降はオーナードローあるからなあ
- 119 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:57:59 ]
- ま、オレはいつもSTATICは場所の確保だけしてもらって
中は親のほうで書いてたけどな。
- 120 名前:デフォルトの名無しさん [2008/02/22(金) 17:13:26 ]
- >116
確かに動作したけど、再びリソースエディタで開くと 変な動作をしますね。確かに楽でいいと思うけど。
- 121 名前:デフォルトの名無しさん [2008/02/22(金) 17:17:05 ]
- >119
それはコントロールを自分でcreateして作ることですか?
- 122 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 17:18:21 ]
- >>121
いや、どこに描くかの場所だけ取得 実際の描画はOnDraw()等でやる。 今回のはサブクラス化するのがいいと思うよ。
- 123 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん [2008/02/22(金) 22:24:43 ]
- しかもリソースのプロパティのスタイルでフレーム以外
描画されないみたい。
- 125 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:19:16 ]
- ビルドするだけ
- 127 名前:デフォルトの名無しさん [2008/02/23(土) 10:40:37 ]
- >121
サブクラスのほうでOnDrawItemを作ってやるというのは 分かったのですがうまくいきません。 他に注意すべき点とか有りますか?
- 128 名前:デフォルトの名無しさん [2008/02/23(土) 12:09:56 ]
- ここってマインスイーパーのプログラムの質問
してもいいんですかね?
- 129 名前:デフォルトの名無しさん mailto:sage [2008/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++ フォーラム ピクチャーコントロールへの描画が、はみ出てしまいます forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2756516&SiteID=7
- 130 名前:129 mailto:sage [2008/02/23(土) 12:33:11 ]
- ごめん、ちょっと紛らわしいので補足。
1),2)を順番に実行するという意味ではなく、 1),2)の内いずれか一つの方法を採用してという意味です。
- 131 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:35:35 ]
- pastebin.windy.cx/?page=view&id=1203741161
これ,いわゆる多重継承の菱形継承なのですが, なぜあいまいであるはずの変換演算子について C2385 のエラーが発生しないのでしょうか? Visual C++ 2008 Express Edition です. 33行目ではエラーになるのに39行目ではエラーになりません. しかも二つある基底クラス D1,D2 のどちらの変換演算子が 呼び出されるかが宣言における継承の順序に依存しているのです. 変換演算子ではなく通常のメソッド Greeting については あいまいである旨のエラー C2385 が出ます.
- 132 名前:131 [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:52:16 ]
- 菱形継承じゃないよ。単なる多重継承。
んで、39 でエラーにならないのは正直バグじゃないかと。
- 134 名前:131 [2008/02/23(土) 14:12:07 ]
- >>133 そうでした.菱形継承で作っているプログラムで気づいて
切り出してきたので頭がそういう風になってしまってました. そもそも例示したコードの BaseClass って必要なかったです. connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=329756 レポートしておきました.
- 135 名前:デフォルトの名無しさん [2008/02/23(土) 14:15:50 ]
- >130
ありがとうございます。 枠に収まるように組んでいたので今まで気づきもしませんでしたが そのように予防することができるのですね。 おそらくビットマップ にして保存するときは見えない部分もそれで保存できると言うこと ですか? あと、CViewを引き継いでいるCFormViewで基本時に OnPaintは使わないと言われていましたが、関数内に コードを書かなくても宣言するだけでOnDrawが使えなくなる とは思っていませんでした。
- 136 名前:129 mailto:sage [2008/02/23(土) 14:30:39 ]
- >>135
MFCスレの方とごっちゃにして答えてしまったみたいだ。 MFCスレの枠内に描画制限するのは上の解決方法でいいとして、 実はこっちのスレの回答にはなっていない。ごめん。 今VC6で確認したんだけど、 ピクチャーのタイプを'四角形'にしてCFormView::OnDraw()で描画すると 描画後にピクチャー自身のWM_PAINTで背景が塗りつぶされてしまっているよう。 もし背景色を変えたいとのことであれば タイプは'フレーム'のままでOnDraw()内で FillRect()で背景を自前で塗りつぶせばできる。 でもOnDraw()で無理矢理ピクチャーの位置に描画するより 皆が回答してくれた通りにした方がいいと思う。 > コードを書かなくても宣言するだけでOnDrawが使えなくなる > とは思っていませんでした。 このあたりはCView::OnPaint()のソースを見ればわかるよ。
- 137 名前:デフォルトの名無しさん [2008/02/23(土) 15:25:23 ]
- >FillRect()で背景を自前で塗りつぶせばできる。
既にあきらめてそれをやっています^^ それってバグじゃない? とか思ったり。 >このあたりはCView::OnPaint()のソースを見ればわかるよ 他のホームページでだいたいのことは分かりました。 ソースも検索で見てみました。 CPaintDC dc(this); OnPrepareDC(&dc); OnDraw(&dc); いつもと違って誤ってOnPaintを作ってからOnDrawを 作って書いたのでひどい目に遭いました。 そこで便乗質問ですが、CView以外でOnPaint内で CDCを使った場合、BeginPaintとかいるんですか? CPaintDCならいらないと聞いたのですが。
- 138 名前:デフォルトの名無しさん [2008/02/23(土) 15:38:29 ]
- >136
> 皆が回答してくれた通りにした方がいいと思う。 オーナー描画、BitMap のうちどれですか? オーナー描画もいろいろ調べたのですが、あきらめました。 BitMapも入門書ではピクチャーボックスではCDialogにですが、 OnPaintで再描画しているサンプルでした。 皆が進めるのはOnDraw OnPaint以外に書く方法ですか? 仮にサブクラス化したとして、どのタイミングで再描画 しているのでしょ?
- 139 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:10:05 ]
- ごちゃごちゃ回りくどいことやらずに直接viewに書く
- 140 名前:129 mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:52:00 ]
- スタティックコントロールは文字や図形を表示してくれるコントロールで、
これをオーナードローにしたら何もしないコントロールだけど そんなものにわざわざコントロール使う意味ある?
- 142 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 19:06:43 ]
- okwave.jp/qa2565794.html
ダイアログベースのexeで最適なグラフ表示方法 -OKWave
- 143 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:01:29 ]
- >>141
描画だけじゃなくマウスのこととかも含めた 簡易的な位置決めツールにとしては働く。 一応独立したウィンドウなんだし。
- 144 名前:デフォルトの名無しさん [2008/02/23(土) 21:56:23 ]
- >140
ありがとうございます。 m_pict.ModifyStyle(SS_TYPEMASK, SS_OWNERDRAW); ああ、これをやらないとダメなんですね。 元のFrameViewでよかったんですね。 確かに、コントロールとしての意味がなくなりそうなので (2)のほうでやってみます。 Createまでする必要がないというのはよく分かりました。 いろいろと溜になる情報ありがとうございました。
- 145 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん [2008/02/24(日) 00:36:42 ]
- >>145
一体何をリセットした積もりなの?
- 147 名前:デフォルトの名無しさん [2008/02/24(日) 01:02:49 ]
- >>146 プログラム組むの初めてでそれすらもわからないです
本を見ながらやったんですがうまくいかなくて
- 148 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:14:07 ]
- Viewなのか、MFCってことだな。 んで、Documentは参照してないと。
ど、どんな本みてんだYO!
- 149 名前:デフォルトの名無しさん [2008/02/24(日) 01:16:24 ]
- 何をリセットしたつもりなのかもわからないのにリセットされないとどうやって判断したの?
少なくとも、「リセットされません」と言うからには何かを「リセットした積もり」なんじゃないの?
- 150 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:28:37 ]
- リリースビルドをデバッグビルドにしてみたのですが、
なぜかブレイクポイントがヒットしなくなっていました これを直すにはどうすればよいのでしょうか。 ちなみにncbファイルの削除というのはやってみました。
- 151 名前:デフォルトの名無しさん [2008/02/24(日) 01:30:53 ]
- >>148 MFCって書いてあります
>>149 地雷を踏んでログがでて最初の画面に戻るはずなんですが
|

|