[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 12/26 23:49 / Filesize : 222 KB / Number-of Response : 898
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

★初心者にVisual C++を教えるスレ★ Part29



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辺り。

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 ]
しかもリソースのプロパティのスタイルでフレーム以外
描画されないみたい。


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&()







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<222KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef