- 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辺り。
- 24 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:00:49 ]
- 課題で「点数をキー入力してファイルに出力せよ」
→「次に作成したファイルから点数を入力し、合計と平均を出せ」 って言われたんだけど、「作成したファイルから点数を入力し」 の部分がよく分からない。 最初に入れた点数に意味は無いのかな? 入力したら上書きされるよね?
- 25 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:06:56 ]
- >>24
ここはガキの宿題に答えるスレじゃない。 入力とはキー入力の事だけをさすのではない ファイルからデータを読み込むことをファイル入力 データを書き込むことをファイル出力という その分は説明が不十分な気はするな。 キー入力、ファイル出力、ファイル入力までは書いてあるのに 合計と平均を何に出力するのかが書いていない。 まあおそらく画面出力のことだ。 「ファイルからデータを読み込んで、合計と平均を画面に出力せよ」 こういう事だろうよ。
- 26 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:20:33 ]
- >>25
分かりやすい解説ありがとうございます 自分の不勉強でした
- 27 名前:デフォルトの名無しさん [2008/02/15(金) 21:27:14 ]
- すいません。
vectorについてお礼を言うのを忘れていました。 2次の動的配列ならいろいろと検索すれば すぐに出てくるのですが、1次が固定で2次が動的 意外にないものですね。 スレ違いなのでここまでにさせていただきます。
- 28 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:14:36 ]
- std::vector< boost::array<int,4> >
- 29 名前:デフォルトの名無しさん [2008/02/16(土) 08:30:33 ]
- >28
ありがとうございます。 他のスレで構造体を使う方法と,boost::arrayを 使う方法を教えてもらいましたが、 boost::arrayは自分でコンパイルしないといけないみたいですね。
- 30 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:22:02 ]
- マルチうぜーよ。子ね
- 31 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:31:10 ]
- 番号、氏名、英語、数学、国語
こんなのを動的に追加するサンプルはよくあるだろ これをこうして 番号、氏名、成績[3] こうしたら 成績[3] 3つ固定のデータを動的に追加じゃないか
- 32 名前:デフォルトの名無しさん [2008/02/16(土) 11:10:46 ]
- すいません。vector 構造体も vector boost::arrayも
問題は両方解決しました。 マルチでスレを汚してそのまま去るのもいい加減なので お礼だけ言っておきます。
- 33 名前:デフォルトの名無しさん [2008/02/16(土) 13:30:18 ]
- ここでき聞いていいのか分かりませんが・・・。
MFCでAppWizardでSDIを選択しましたが、 デフォルトのCViewではなくCFormViewを 使いました。 そのFormの上にエディトボックスを貼り付け、 テストで試しに線を引いてみるとこにしました。
- 34 名前:デフォルトの名無しさん [2008/02/16(土) 13:40:30 ]
- OnInitialUpdate()で次のように描いています。
CDC* pDc; pDc=m_Edit1.GetDC(); //m_Edit1はエディトボックスをメンバ変数に CPen NewPen; NewPen.CreatePen(PS_SOLID, 1, RGB(0,0,0)); CPen* OldPen=pDc->SelectObject(&NewPen); pDc->MoveTo(0,0); pDc->LineTo(50,50); pDc->SelectObject(OldPen); NewPen.DeleteObject(); どこが間違っているかさっぱり分かりません。 それともエディトボックスに描画はできないのでしょうか? ホームページとかで調べるとできるようなことは書いているのですが。
- 35 名前:デフォルトの名無しさん [2008/02/16(土) 14:02:47 ]
- 別にボタンを作って同じコードを書いてボタンを
クリックしたら描画するようにしたらできた。 不思議だ。なぜ?
- 36 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:04:01 ]
- Windowsでは見えない部分は描かれない。
OnInitialUpdate()がどんな時に呼ばれるか調べな。
- 37 名前:デフォルトの名無しさん [2008/02/16(土) 15:54:12 ]
- MFCでCFormViewのOnDraw関数でウィンドウのサイズが
変わったら再描画するようにしても一瞬だけ表示されて 消えてしまいます。 いいアドバイスがあったらお願いします。
- 38 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:57:53 ]
- 何でエディトボックス?
違うもので試してみようと思わないのか?
- 39 名前:デフォルトの名無しさん [2008/02/16(土) 17:19:41 ]
- グラフを書くのに文字も入れないといけないかと思い
実験していたところです。
- 40 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:25:22 ]
- エディトボックスじゃなくても字はかけるよ
- 41 名前:デフォルトの名無しさん [2008/02/16(土) 17:41:19 ]
- そうですか、それではピクチャーボックスで試してみます。
しかし、エディトボックスで再描画がおかしくなる理由が 分かりませんね。
- 42 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:33:12 ]
- >>41
CFormViewのOnDrawではCFormViewのクライアント領域に描いてるから。 その上に乗ってるエディットボックス自身の再描画で上書きされる。 エディットボックスに描きたければ、サブクラス化してエディットボックスの再描画を乗っ取れ。
- 43 名前:デフォルトの名無しさん [2008/02/16(土) 22:38:08 ]
- >42
ピクチャーボックスで再描画すると普通にできるのでとりあえずは そっちでやることにします。 別に質問します。 ずっと前に、エディトボックスの右クリックを実現しようとして、 サブクラス化したのですが、なぜかリソースエディタが使えませんでした。 仕方ないので、createしてコードで作ったのですが、そういう場合でも リソースエディタを使うことができますか?
- 44 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:39:14 ]
- >>36
こんな糞スレじゃなくてム板いけ。 書き込む前にスレに軽く目を通せばおかしいってわかるだろうが。 ★初心者にVisual C++を教えるスレ★ Part29 pc11.2ch.net/test/read.cgi/tech/1203007556/
- 45 名前:44 mailto:sage [2008/02/17(日) 02:42:01 ]
- 誤爆orz
- 46 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:47:34 ]
- バーかw
- 47 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 03:02:53 ]
- >>44に感謝して質問させていただきます。
自分のパソコンで一時的に(実家にいるときとかとかに)コードとかを書いて、出来ればデバッグまでおわらせて 実行するのは大学のパソコンで行いたいんだけど、この場合はプロジェクトの種類は何を選べば良いでしょうか? 使ってるのはVisual C++ express editionなんですが。 大学のlinuxではバージョンは分からないですがg++でコンパイルです。 Makefileも欲しいんですが、そんなことって出来ますか?
- 48 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 03:03:05 ]
- 誤爆で説得力なくなる文だなw
専ブラはたまにこれやらかすな
- 49 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 03:06:06 ]
- >>47
Win32コンソールでいいかなあ Makefileは昔のVCは作れたけど、今のは無理かな まあMAKEだけ別管理にするのがよさげ
- 50 名前:デフォルトの名無しさん [2008/02/17(日) 03:16:17 ]
- >>47
Cygwin入れた方が手っ取り早いと思う。
- 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 ]
- しかもリソースのプロパティのスタイルでフレーム以外
描画されないみたい。
|

|