■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part10
251 名前:デフォルトの名無しさん :04/02/08 10:31
CString と std::string はどっちが速いでつか?


252 名前:デフォルトの名無しさん :04/02/08 11:01
char *とCStringの比較なら、長さを求めるのに
strlenをいちいち発行しなくてはならない点で、
char*は不利かもね。

253 名前:デフォルトの名無しさん :04/02/08 11:15
なんじゃ?このスレの流れは?
子供の喧嘩?

254 名前:デフォルトの名無しさん :04/02/08 11:42
>>251
自分で測定しな。
処理の内容も、クラスライブラリのバージョンも実行環境も君と俺では違うだろうから。

>>252
char * 側も長さ情報を持つようにすればいいだけ。
もっともそういうのをやりだすと結局 CString と同じようになるわけだが。
あとは、その実装をやる奴の腕と CString の作成者の腕の勝負になるだけのこと。
まあ、実装をやる奴 = 使う奴なら個別の最適化が可能なので腕が同じ程度なら char * が幾分有利。
ただ、CString の作成者に比べて腕がショボーンかもしれないので、勝負はやってみないとわからん。
参照 → >>226

>>253
脊髄反射で、>>225 を書き込んだヴァカがからかわれてだけだろ。

255 名前:デフォルトの名無しさん :04/02/08 11:49
char を処理する方法でCStringは作れるが逆はできない

256 名前:デフォルトの名無しさん :04/02/08 11:58
だからなに ?

257 名前:デフォルトの名無しさん :04/02/08 12:01
>>254
> >>253
> 脊髄反射で、>>225 を書き込んだヴァカがからかわれてだけだろ。

間違いでは無いと思うけどなー。
CString が Pascal のように文字長を持ってれば話は違うのだろうが。。


258 名前:デフォルトの名無しさん :04/02/08 12:03
>>251
inline を多用しているSTLの方が速いと言う話も。
つか、VC++ で std::string を使ってる香具師って居るのけ?


259 名前:デフォルトの名無しさん :04/02/08 12:06
>257
struct CStringData
{
long nRefs; // reference count
int nDataLength; // length of data (including terminator)
int nAllocLength; // length of allocation
// TCHAR data[nAllocLength]

TCHAR* data() // TCHAR* to managed data
{ return (TCHAR*)(this+1); }
};
_AFX_INLINE CStringData* CString::GetData() const
{ ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }

>258
std版では最適化が効かないからどうだろうねぇ。

260 名前:デフォルトの名無しさん :04/02/08 12:16

最近のパソコンで速度なんて気にする必要あるのかね。



261 名前:デフォルトの名無しさん :04/02/08 12:22
>>257
> CString が Pascal のように文字長を持ってれば話は違うのだろうが。。

はぁ ? >>252 を読んでないのか ?

ちなみに、手元の MFC のソースは...と思ったら、>>259 が貼ってた。

「脊髄反射」じゃないとしたら、真性なのか... ?

とにかくもう少し落ち着いててから書いたほうがいいぞ。

>>260
君の作るプログラムなら、必要ないと思うよ。

262 名前:257 :04/02/08 12:25
>>259
CString は NULLターミネート文字列を使ってるが内部の処理では
NULLターミネート使わずに処理してるのね・・・ ソス見ずに脊髄反射してしもうた _| ̄|○

strcpy, strcat, .... 使うより速い鴨。。


263 名前:デフォルトの名無しさん :04/02/08 12:44
>>260
本物のプログラマは、たった数μS速くするためにでも命を賭ける。
厨なプログラマは厨に分かるようなプログラムを書く。
漏れは厨なプログラマのままで良い。


264 名前:デフォルトの名無しさん :04/02/08 12:48
>>259
CString の中の人も大変だな。

std版では、inline キーワードは無視されるの? そりゃクソだな。w


265 名前:デフォルトの名無しさん :04/02/08 13:26
>>263
> 厨に分かるようなプログラムを書く。

これができれば、厨とは言わない。

厨の書くプログラムはワケワカメ。

> 漏れは厨なプログラマのままで良い。

だから、改心しろ。

266 名前:デフォルトの名無しさん :04/02/08 13:35

何 か 微 妙 な 流 れ で す が …

誰が作ってもCString / std::string / std::wstring の
パフォーマンス超えるものは作れませんよ。
できるのはパフォーマンスの調整ぐらい。

要はクラスの性質を理解してパフォーマンスを生かすように使わないと。
それは、char* を使う場合でも同じ。

最適化 = inline展開 な>>264にパフォーマンスなど関係ないかもしれんが。

267 名前:デフォルトの名無しさん :04/02/08 13:43
>>266
>できるのはパフォーマンスの調整ぐらい。

どうやってやるの? 教えてクレ

268 名前:デフォルトの名無しさん :04/02/08 13:44
>>267
文盲の方ですか?

269 名前:デフォルトの名無しさん :04/02/08 13:53
>>268
そういう事にしたいのですか?


270 名前:デフォルトの名無しさん :04/02/08 13:54
>>269
あなたは>>266を本当にお読みになりましたか?

271 名前:デフォルトの名無しさん :04/02/08 13:55
>>270
はい。
で、どうやってパフォーマンス調整をするのか聞いてるのですが
何か問題でもありますでしょうか?


272 名前:デフォルトの名無しさん :04/02/08 13:58
>>266
漏れの天才的な頭脳と __asm {} を持ってすれば不可能は無い。


273 名前:デフォルトの名無しさん :04/02/08 14:07
>>271
>>266
>パフォーマンス超えるものは作れない
と書いてます。もし、同じようなものを自作しても
パフォーマンスの調整版にしかならないと書いているのです。

文字列というのは要するに固定長の配列なわけです。
それを可変長であるかのように振舞わせるわけですから
パフォーマンスの調整の余地があるわけです。

おわかりになりますか?

274 名前:デフォルトの名無しさん :04/02/08 14:18
>>266
ようは、

  実  行  速  度  な  ん  ぞ  気  に  す  る  な

と言うことでよろしいか?

275 名前:デフォルトの名無しさん :04/02/08 14:19
>>273
分かり難い文章ですが言われてる事は分かりました。

一般的にパフォーマンス調整(パフォーマンスチューニング)と
言うと、パフォーマンスの改善、つまり速くなることと理解しますが。。


276 名前:デフォルトの名無しさん :04/02/08 14:22
「初心者に・・・」というスレタイ向けにまとめれば

普通は心配せずにCStringを使っておいて間違いはない

という結論かと

277 名前:デフォルトの名無しさん :04/02/08 14:23
>>274
違う、

藻 ま え ら の よ う な ア フ ォ は ブ ビ で も 使 っ と け。

と言う意味。


278 名前:デフォルトの名無しさん :04/02/08 14:25
>>275
オレは書いた人じゃないけど
パフォーマンス・チューニングじゃなくて「パフォーマンスの調整くらい」
つまり「パフォーマンスの調整程度」というニュアンスだろ

普通に文意を汲めば「多少の加減」という意味だと思うが

279 名前:デフォルトの名無しさん :04/02/08 14:40
>>276
殆どの場合の文字列操作は、char [] と ANSI C 文字列関数を使うより
MFC CString を使った方が速い。

ということかと。


280 名前:デフォルトの名無しさん :04/02/08 14:52
         \   ∩─ー、    ====
           \/ ● 、_ `ヽ   ======
           / \( ●  ● |つ
           |   X_入__ノ   ミ   そんな餌で俺様がクマ――!
            、 (_/   ノ /⌒l
            /\___ノ゙_/  /  =====
            〈         __ノ  ====
            \ \_    \
             \___)     \   ======   (´⌒
                \   ___ \__  (´⌒;;(´⌒;;
                  \___)___)(´;;⌒  (´⌒;;  ズザザザ
                               (´⌒; (´⌒;;

281 名前:デフォルトの名無しさん :04/02/08 16:08
で、VC++ でウイソのアプリを作るのに std::string を使ってるヤシは居るのか?
漏れはそれが知りたい!!


282 名前:デフォルトの名無しさん :04/02/08 16:25
>>266
> 誰が作ってもCString / std::string / std::wstring の
> パフォーマンス超えるものは作れませんよ。

またこんな断定するヴァカが出てくるし...。
何の根拠があってこんなこと書くかなぁ。

もうネタの投下はいいよ。

283 名前:デフォルトの名無しさん :04/02/08 16:58
>>282
ヴァカはお前の方だ。STLの仕様はC++標準委員会で
詳細に決まってんの。


無知は怖いね。

284 名前:デフォルトの名無しさん :04/02/08 17:02
>>283
藻まいのようなヤシをプログラマーに使いたくないぞ。
何が出来るか分からないから。

285 名前:デフォルトの名無しさん :04/02/08 17:13
>>281
(´・ω・`)∩

286 名前:266 :04/02/08 17:13
>>274, 277, 279
おぃおぃw

>>281
漏れはCStringが必要なとき以外はstring/wstringだね。

>>284
ご自分の勉強不足を反省してはいかがですか?

287 名前:つーか、仕様と実装ぐらい区別できないのかよ。 :04/02/08 17:19
>>283-284
決まってるからどうかしたのか ?
それが最高のものである保証はどこにあるんだ ? (ププッ

288 名前:デフォルトの名無しさん :04/02/08 17:19
>>286
>>282>>283 の話の内容がかみ合ってないのは気のせいか?
当然、後からとんちんかんな事を書いた >>283 がアフォだと思うが。

289 名前:デフォルトの名無しさん :04/02/08 17:28
ねぇねぇ、STLの実装ってコンパイラによって激しく違うのけ?


290 名前:デフォルトの名無しさん :04/02/08 18:08
>>287
仕様と実装を区別してないだろ?
Effective STLでも読んで見れ。

>>288
stringはSTLの1クラス。

>>289
STLのベンダごとに違う。

291 名前:デフォルトの名無しさん :04/02/08 18:09
前にもどっかのスレにいたなぁ。
標準ライブリラリは標準委員会が実装方法を決めていて、どのソースも同じだと思ってた奴。

292 名前:デフォルトの名無しさん :04/02/08 18:19
ライブリラリって何だ、俺。

293 名前:デフォルトの名無しさん :04/02/08 18:21
>>292
ついでに

>標準委員会

標準化委員会な、確か。

294 名前:デフォルトの名無しさん :04/02/08 18:25
各自Effective STLの第二章を読めってことでそろそろお開きにしてくれないか…

295 名前:288 :04/02/08 18:38
>>290
文字列クラスのパフォーマンスとSTLの仕様の話じゃ未だかみ合ってないぞ〜。


296 名前:デフォルトの名無しさん :04/02/08 19:00
VC++ 6.0 で C++ の構文を弾くようにするのはどうすれば良いのでしょう?
C の構文だけ通すようにしたいのでつ。


297 名前:デフォルトの名無しさん :04/02/08 19:03
>>296
拡張子を .c にする。

298 名前:デフォルトの名無しさん :04/02/08 19:18
>>291
http://pc2.2ch.net/test/read.cgi/tech/1074454641/228-

299 名前:287 :04/02/08 19:26
>>290
> 仕様と実装を区別してないだろ?

何で俺に言う ?

300 名前:デフォルトの名無しさん :04/02/08 19:56
>>297
そんな簡単な事だったのか。
オプションには無いはずだ。_| ̄|○

301 名前:デフォルトの名無しさん :04/02/08 20:01
ん?/Tcでもいけるはずだが。

302 名前:デフォルトの名無しさん :04/02/08 21:52
>>299
だよなぁ

303 名前:249 :04/02/08 22:42
>>250
子供のいいわけねえ。

>悪くないならなぜ使わないの ?
どこに「使わない」なんて書いてあるんだろう?
ひょっとして「仕様書の行間」を読み過ぎる人ですか?

>心配しなくとも見る事できるから、バージョンとファイル名と行数を書いてくれれば大丈夫だよ。
MFCの構造による速度のことを言っているのにファイル名と行数ねえ。
ひょっとしてここもCString限定なのか?

俺は
>本当に速度にシビアな状況なら、そもそもMFC自体使わないだろう。
こんな事態に遭遇したことはない、つーか今更MFCは外せないから
MFCのソースを引張ってきて書き換えてる。
MFCは便利ではあるがその分内部構造が複雑になっているから
速度面で不利になることも事実。
でもそれを気にしているのはメイン作業のCADだけだな。
その他の請負い作業ではまず気にしない=する必要がないな。

304 名前:デフォルトの名無しさん :04/02/08 23:00
ぬるい303がいるスレはこちらですか?

305 名前:デフォルトの名無しさん :04/02/08 23:50
つーか、まだやってるのか。

306 名前:デフォルトの名無しさん :04/02/08 23:54
>>303
> どこに「使わない」なんて書いてあるんだろう?

自分でも引用してるんだけどな。

>>240
> 本当に速度にシビアな状況なら、そもそもMFC自体使わないだろう。
                               ^^^^^^^^^^^
(まーた、「使わない」とは書いてない、「使わないだろう」と書いてあるとか言い出すのかな ? (ププッ))

> MFCの構造による速度のことを言っているのにファイル名と行数ねえ。

で、どこの構造がどうだと言うの ?
ソース見た事あるかなんて書く位だから、具体的に指摘してくれるんだよね。

> ひょっとしてここもCString限定なのか?

あらら、話が大きくなってきましたねぇ。
知ったか厨が、人を煙に巻く時によく使う手 (まあ、自爆するのがオチなんだが) ですけど、あんたはそんなこと無いよねぇ...。
CString 限定でなくていいから、MFC の構造と速度についてきっちり指摘してくれ。

307 名前:デフォルトの名無しさん :04/02/08 23:59
>>263
本物のプログラマがどういう範疇に入るのか分からないが
プロのプログラマは要求仕様と時間効率で最善の方法を選ぶよ
仕様によってはVBだって使うし、アセンブラだって使う


308 名前:デフォルトの名無しさん :04/02/09 00:03
とりあえずマの話はマ板でやれや

309 名前:デフォルトの名無しさん :04/02/09 00:04
>>307
ネタにマジレスしてるとこ悪いが、「本物のプログラマ」でググルことをお勧めするよ。

310 名前:デフォルトの名無しさん :04/02/09 00:16
重要なのは、文字列の性質をちゃんと理解して使えば
どんなクラスを使っても大きくパフォーマンスが異なることは
ないんですよ。

初心者が良くやる極端な例:
vector<string> v;
/* v に文字列を沢山詰め込む処理 */
string str;

for(int i=0;i<v.size();i++)
{
    str += v[i];
}

311 名前:307 :04/02/09 00:19
ググってみた
へー、面白いなぁ"本物のプログラマー"なるほどネタなのね



312 名前:デフォルトの名無しさん :04/02/09 00:27
ここが何スレかわかった上で書いているのか君達は

313 名前:デフォルトの名無しさん :04/02/09 00:54
初心者のコードに見られる極端な例。
char *p = _strdup("hogehogefoo...")に対して、
for( int i=0;i < strlen(p); i++ )
{ p[i]++;}

314 名前:249 :04/02/09 01:01
>>306
「遅い」=「悪い」から出てきた話なのに単純に「使う」「使わない」に
なっちゃってるよ。
「MFCの構造による速度」はそういう状況になれば理解出来るようになるから
焦るな。
スレ違いなのと面倒くさくなったのとププッとか書くやつの相手をするのが
いやなのででもうレスはしません。

このスレの皆さんへ
本当は>>310のようなことを言おうと思ったのだが、ちゃちゃを入れたせいで
おかしな方向へいってしまったことをお詫びします。

315 名前:俺用メモ :04/02/09 01:27
結局結論は >>266 で、文字列を直接いじる場合でも
クラスで使う場合でもパフォーマンスを落とさない使い方を
するのがいいんですな。

316 名前:デフォルトの名無しさん :04/02/09 07:11
あのさー、良くわかんないんだけど

>誰が作っても<CString / std::string / std::wstringを使って>
>CString / std::string / std::wstring の
>パフォーマンス超えるものは作れませんよ。

ということなのか?
これなら話のつじつまは合うんだけど・・・
言ってること自体が意味不明なんだよな。

317 名前:デフォルトの名無しさん :04/02/09 11:35

string のついでに質問なんだけど、Windowsって
仮想メモリがあるけど、stringで長い文字列を
作っていくと、自動的にHDDも使ってくれるんでしょうか?
まあ、stringに限らずに vector でも list でも、いいんだが。



318 名前:デフォルトの名無しさん :04/02/09 13:26
>>317
OSがスワップしてくれるでしょ。 激遅だと思うけど。

319 名前:遅いコードw :04/02/09 13:51
char cpysrc[] = "abcdefghijklmnopqrstuvwxyz";
char* pcreate = new[strlen(cpysrc) + 1];
strcpy(pcreate, cpysrc);

320 名前:デフォルトの名無しさん :04/02/09 14:10
char* pcreate = new char[strlen(cpysrc) + 1];

321 名前:デフォルトの名無しさん :04/02/09 14:14
>>320
ゲゲッ  コンパイラさんに頼ってるから・・

322 名前:遅い!遅すぎる!! :04/02/09 19:33
static char str[] = "hoge";

323 名前:富豪的プログラミングマンセー :04/02/09 19:54
wstring str(L"実行速度?シラネーヨ!( ´ー`)y-~~");

324 名前:デフォルトの名無しさん :04/02/09 21:13
ビルドしたらリンク中とでて止まったまま・・・・


325 名前:デフォルトの名無しさん :04/02/09 22:31
>>312
> ここが何スレかわかった上で書いているのか君達は

初心者に、「MFC の構造による速度」を教えるスレだろ。(藁
講師: >>249

>>314
> 「遅い」=「悪い」から出てきた話なのに単純に「使う」「使わない」に
> なっちゃってるよ。

じゃあ、速度の話に戻すけど、今でも「CStringが速いのはCStringからの初期化と代入くらいじゃないの?」とか言うのか ?

> 「MFCの構造による速度」はそういう状況になれば理解出来るようになるから焦るな。

「MFCのソースを見たことがあるのだろうか」なんて大口叩いてたのに、具体的に聞くとこれですか ?
まあ、予想できたけどな。

> スレ違いなのと面倒くさくなったのとププッとか書くやつの相手をするのが
> いやなのででもうレスはしません。

ハイハイ、「面倒」と言うことにしておこうな。

> 本当は>>310のようなことを言おうと思ったのだが、ちゃちゃを入れたせいで
>>310
> どんなクラスを使っても大きくパフォーマンスが異なることはないんですよ。

はぁ ? まあ、もういいか。

326 名前:デフォルトの名無しさん :04/02/09 23:43
>>325
ない爪を隠してもしょうがないんじゃない?(ププッ

327 名前:これで本当の最後 :04/02/09 23:48
>>325
もう一回だけ相手をする。

310の引用は
>初心者が良くやる極端な例:
この部分にしてくれ。

問題が分かってないのかな〜?

328 名前:327 :04/02/09 23:51
>>325
>>326は俺じゃないよ。
勘違いされそうなんで一応。


329 名前:デフォルトの名無しさん :04/02/09 23:55
>>326
負惜しみカコ悪い。

>>327
> /* v に文字列を沢山詰め込む処理 */

コメントからしてハァ ? なんですけど。

330 名前:デフォルトの名無しさん :04/02/10 00:00
もういいじゃん
とりあえず初心者が質問しやすい流れを作ることもこのスレの回答者たちの役目だろ
ここ100近くの間に初心者の質問がいくつあったよ?
はっきり言って、初心者が質問しにくいレスを付け続けている
奴らは別のところにいってやってくれ


331 名前:310 :04/02/10 00:01
チャレンジャーだねぇ。
EffectiveSTLの文字列クラスの実装の項を
読んでみることをお奨めするよ。

>>327
そのコメントのどこらへんが「ハァ?」なの?
どうせ逃げるんだろうけど。

あと、何を誤解してるか知らんけど、>>327 != 310 ね。

332 名前:310 :04/02/10 00:02
ぬお、「ハァ?」は>>327じゃなくて、>>329な。

333 名前:デフォルトの名無しさん :04/02/10 00:11
はぁ

334 名前:デフォルトの名無しさん :04/02/10 00:16


--- 以下しばらく中身のない低俗な煽り合いをお楽しみ下さい ---



335 名前:デフォルトの名無しさん :04/02/10 01:35
>>330
逆さ縦読みか?

336 名前:デフォルトの名無しさん :04/02/10 02:19
Win2000 SP4 環境下で、VC++6.0のプロフェッショナルエディションを使用しています。

見た感じ、>>112さんと同様と思われる症状が現れるのですが、
(VC6でも)サービスパックをあてれば直るもんなのでしょうか?

ナローバンドなうえに長時間接続できないので、
特に問題がないなら、所詮日曜プログラマなので、SPを入れなくてもいいかなとは思っていたんですが…。


337 名前:デフォルトの名無しさん :04/02/10 02:44
もしかして林晴彦著新Visual C++6.0入門シニア編(ソフトバンク)の
P558に出ていることじゃないか?
ビルドの黙り込み対策
本屋で見てくれ。

338 名前:デフォルトの名無しさん :04/02/10 02:47
そーす
ttp://store.sbpnet.jp/isbn/0802/mokuji.htm

339 名前:デフォルトの名無しさん :04/02/10 03:38
・・・かもしれないですね。

林晴比古氏(変換めんどいよ!)のC言語入門で学んだ人間なんで。
彼の本なら安心して買えるかなあ。


340 名前:デフォルトの名無しさん :04/02/10 08:58
……もしかして、根本的な解決策、無い……?


ちょっとぐぐってみたら、
ハイパースレッディングの機能をBIOSでオフにしろとか書いてあったけど……


341 名前:デフォルトの名無しさん :04/02/10 12:10
片方のコンボボックスのデータを変えてエディタボックスにデータに応じた値を表示した後
もう片方のコンボボックスのデータを変えてエディタボックスに表示されている値に
そのデータに応じた値を加算させたいのですができません。助けて!

342 名前:デフォルトの名無しさん :04/02/10 13:03
片方のコンボボックスのデータを変えてエディタボックスにデータに
応じた値を表示するところまでは出来るの?

343 名前:デフォルトの名無しさん :04/02/10 13:06
>>341
どこまでできて何ができないのか具体的に

344 名前:デフォルトの名無しさん :04/02/10 14:42
>>342
そこまではできます

例えばコンボボックス1でAというデータ(対応する値は10)を選択した際
10という値をエディタボックスに表示させることはできるんですが
その後コンボボックス2でBというデータ(対応する値は5)を選択した際
現在エディタボックスに表示されてる10に5を加算して15という値を表示させたいのに
何故か5と表示されてしまいます。

345 名前:デフォルトの名無しさん :04/02/10 14:57
>>344
10を表示する時に、その値を覚えておいて、
15を表示させたい時にたせば?

15表示する時に、10のエディットボックスから拾ってきてもいいけど。


346 名前:デフォルトの名無しさん :04/02/10 15:02
>>344
そのエディッタボックスってのは、コンボボックスの中の香具師?
それとも独立したエディッタボックス?

347 名前:デフォルトの名無しさん :04/02/10 15:35
>>345
そのやり方がよくわかりません・・

>>346
独立したエディタボックスです

もうちょい試行錯誤してきます

348 名前:デフォルトの名無しさん :04/02/10 15:43
ダイアログベースのアプリケーションでメインダイアログから
Create()を使ってモードレスダイアログを作成したあと、
2つのダイアログを重ねたらモードレスダイアログの方が必ず上に
表示されます。
アクティブになっている方が上に表示されるようにするには
どうすればよいのでしょうか?

分かる人がいたら教えていただけないでしょうか?

349 名前:デフォルトの名無しさん :04/02/10 16:14
もし定説だったらごめんなさい。
VC++で、DualCPUを生かしたビルドってできませんか?
DualCPUのPCでビルドしても、かたっぽのCPU使用率がMaxになるだけで、
二つをフル稼働させてないんですが・・・・。
どこかで設定できるのであれば、教えて欲しいです!

350 名前:デフォルトの名無しさん :04/02/10 16:37
できない

351 名前:デフォルトの名無しさん :04/02/10 16:38
MDIのアプリを作っているのですが、下のような感じで
4つの子ウィンドウ(フレーム、Doc-Viewの1対1)を表示させているのですが、
「 ̄ ̄ ̄|「 ̄ ̄ ̄| 
|_A_」|_B_」 
「 ̄ ̄ ̄|「 ̄ ̄ ̄|
|_C_」|_D_」
ここでドキュメントBを破棄したときにMditileを通すと
「 ̄ ̄ ̄ ̄ ̄ ̄ ̄| 
|__A____」 
「 ̄ ̄ ̄ ̄ ̄ ̄ ̄| 
|__C____」 
「 ̄ ̄ ̄ ̄ ̄ ̄ ̄| 
|__D____」 
のようなイメージになってしまうのですが、これを
「 ̄ ̄ ̄| 
|_A_」
「 ̄ ̄ ̄|「 ̄ ̄ ̄|
|_C_」|_D_」
のようにする(Bが表示されていた場所には何も表示しない)方法があれば、ご教授をお願いいたします。
長文失礼しました。


352 名前:デフォルトの名無しさん :04/02/10 17:10
>>348 モードレスの親をデスクトップにしてCreateするとか

353 名前:デフォルトの名無しさん :04/02/10 17:47
アルゴリズムで曜日の算出法おしえてください!
Y.M.D
△Y=2000−Y
△X=△Y/4
△Z=△Y−△X
1990/1/1をこれに当てはめると75がでてそのあとどうするばよいかわかりません




354 名前:デフォルトの名無しさん :04/02/10 18:04
>>353
「Zellerの公式」でぐぐれ

355 名前:デフォルトの名無しさん :04/02/10 18:35
最後に7で割るのであまりは少数のところはどうすればよい?

356 名前:デフォルトの名無しさん :04/02/10 18:40
剰余を出すなら小数にならんだろ

357 名前:デフォルトの名無しさん :04/02/10 18:47
公式に当てはめた段階で小数が出ますヨ?

358 名前:デフォルトの名無しさん :04/02/10 19:40
出ませんヨ?

359 名前:デフォルトの名無しさん :04/02/10 20:19
キャストしろ

360 名前:デフォルトの名無しさん :04/02/10 20:21
宿題スレの予感

361 名前:デフォルトの名無しさん :04/02/10 21:52
コンパイルはできたけどビルドができないよ〜
うわーん ゜。(pvq)。゜
なんかね、とまっちゃうんですよ。ビルド押すと・・・
そいで終了させようとしても・・・ビルドの中止ボタンを押してくださいとかいってるの・・
んでねビルドの中止おしても無反応なんですよ・・;
なんか解決方法ないっすかね?^^;

やってみたことは
再インストール
サービスパック5を入れる(日本語
です。


362 名前:デフォルトの名無しさん :04/02/10 21:56
CFormViewから派生したビュークラスを使用しているとき
ダイヤログリソースでVisibleをFalseにしてないとエラーが出てしまいます。
私の感覚的には見えるようにするのだからTrueだと思うのですが、
どうしてFalseにしないとエラーが出るのでしょう?

363 名前:デフォルトの名無しさん :04/02/10 22:06
VisualC++でビッグエンディアンのプロセッサのCソースを
直さずになんとか動かす方法はないですか。

364 名前:デフォルトの名無しさん :04/02/10 22:09
>>362
>ダイヤログ


365 名前:誰が誰かなんかもうわからんだろうに...。 :04/02/10 22:26
>>331
> EffectiveSTLの文字列クラスの実装の項を読んでみることをお奨めするよ。

ハイハイ、そういう言い訳は聞き飽きた。
で、どうせ具体的に指摘できないんだろ ?

> >>327
> そのコメントのどこらへんが「ハァ?」なの?

>> v に文字列を沢山詰め込む

どの行で、「v に詰め込んでいるのか」教えて欲しいものだ。

> どうせ逃げるんだろうけど。

なんて人を煽る暇があったら、ハァ ? と指摘されてるところを見直したらどうか。

> あと、何を誤解してるか知らんけど、>>327 != 310 ね。

あんたが引用してるから、あんた宛に書いただけのことだけど。

366 名前:336 :04/02/10 22:51
>>361さん
仲間仲間〜 ヽ( ̄▽ ̄)ノ


・・・いや、そーじゃなくて。
SP5入れても治んないのかー。落とすの面倒だし、入れなくてもいっか。

とりあえずOS再インストしてみるです、自分も。

367 名前:デフォルトの名無しさん :04/02/10 22:55
>>365 は天然ですか?

368 名前:デフォルトの名無しさん :04/02/10 23:00
だろうね。もう完全に周りが見えなくなってる。

369 名前:347 :04/02/10 23:25
やっぱりできないよー助けて!

370 名前:361 :04/02/10 23:27
>>364
スルーしてくだちい_| ̄|○

371 名前:デフォルトの名無しさん :04/02/11 01:06
VCやってる奴ってこんなんばっかかよ

372 名前:デフォルトの名無しさん :04/02/11 04:55
>>371
悪い奴が目立つだけ

373 名前:デフォルトの名無しさん :04/02/11 09:07
>>367=>>368=>>331 と言うことで FA ?

374 名前:デフォルトの名無しさん :04/02/11 09:27
>>363
ネットワーク・プログラミングのコード例見れば必ずやってあることだが
#ifdefで条件分岐してhtonsやhtonlをかけるかどうか使い分ける

375 名前:デフォルトの名無しさん :04/02/11 09:37
>>374
htons, htonl 使ってて、#ifdef で条件分岐してる奴って頭おかしいと思うのは俺だけか ?
(つーか、質問者の意図 (=Cソースを直さずに) を無視してるし...。)

>>363
ソース見ないとなんとも...。
エンディアンが問題となるところで htons 相当の手当てがしてあるなら、その定義を書き換えればいいけど、生でキャストしまくられていたらソース書き換えられないとどうしようもない。

376 名前:デフォルトの名無しさん :04/02/11 14:45
外に出さなきゃ問題ないけどな
たいていはネットワークやファイルに出してるから無理か・・

377 名前:デフォルトの名無しさん :04/02/11 15:29

エクスプローラで、/ なんかのファイル名を指定すると
ファイル名として指定できない文字の一覧が表示されますけど、
あれの コロン : とアスタリスク * の間の2文字はなんでしょう?
コンマとセミコロンかと思ったんですが、どうもこの文字は
ファイル名として指定できるみたいで。

分かる方いませんか?

378 名前:デフォルトの名無しさん :04/02/11 15:38
コロンとアスタの間に文字なんて無いぞ・・・
XPでNTFSだけど

379 名前:デフォルトの名無しさん :04/02/11 15:39
コンマとセミコロンがあるぞ
2000でNTFSだけど

380 名前:デフォルトの名無しさん :04/02/11 15:45
? " / \ < > * | :

コンマとかセミコロンは(Vではない)FATで使えない文字だと思う。
これってどっかでdefineされてんのかな?

381 名前:デフォルトの名無しさん :04/02/11 16:46
>>379
うちは 2000 + FAT32です。
2000だとあるんですかね。

\ / : , ; * ? " < > |

こんななってる。

>>380
VFATなんての、ありましたっけ?
聞いたことあるようなないような・・・。

ファイルパスをParseするクラスを作ってるんですが、
2000以上なら , ; は使えると考えていいんかなー?

382 名前:デフォルトの名無しさん :04/02/11 16:47

参考になりますた。
どもです。

383 名前:デフォルトの名無しさん :04/02/11 16:57
---------------------------
名前の変更
---------------------------
ファイル名には次の文字は使えません。

\ / : , ; * ? " < > |
---------------------------
OK
---------------------------

どうでも良いことだけど、Win2000 以降では
ctrl-C でダイアログボックスのテキストがコピペ出来る


384 名前:デフォルトの名無しさん :04/02/11 17:06
>>381
>ファイルパスをParseするクラスを作ってるんですが、

せっかく車輪の再発明をしてるところなのに申し訳無いんだが
Windows Shell API つーので Parse 出来る分けだが。

http://nienie.com/~masapico/api_index.html
ここの Path から始まる API 群。。

Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later).
Windows 95/98/Me: Requires Windows 98 (or Windows 95 with Internet Explorer 4.0 or later).
Header: Declared in Shlwapi.h.
Import Library: Shlwapi.lib.

385 名前:デフォルトの名無しさん :04/02/11 17:32
>>384
お、どもども。

アスキーのWin32APIオフィシャルリファレンスに載ってなかったので
ないのかと思いました。Platform SDKの全訳が欲すぃ・・・・。

386 名前:デフォルトの名無しさん :04/02/11 17:39
>>384
Win9xだと"*HOGE*"を照合できないし、
UNCの判定とか機能不足しすぎ。
\\HOST\A\B\Cだとマウントしてからディレクトリを移動せんと。

387 名前:デフォルトの名無しさん :04/02/11 22:25
どなたかVC++で出たエラーなどの解決方法を教えてくれる。
スレッドがあったら教えていただきませんか?

388 名前:336 :04/02/11 22:28
336でございます。
林ハルヒコさんのVC本、立ち読みしてきました(買えよ自分)

載っていた解決策:
 VC5→ヘルプだか検索だかしる
 VC6→Ctrl+Cを押す



… 駄目でした_| ̄|○

389 名前:デフォルトの名無しさん :04/02/11 23:14
ずっとstandard ed.使っているけど
そういう現象には一度も遭遇してないなあ。
バージョンによって違うのかな。
ちなみにNTで使っているけど。

390 名前:デフォルトの名無しさん :04/02/11 23:19
>>112
これ?
http://support.microsoft.com/default.aspx?scid=kb;ja;412370

391 名前:デフォルトの名無しさん :04/02/12 11:32
void ShowMyText(HWND hWnd)
{
HDC hdc;
PAINTSTRUCT paint;
char *str = "こんにちは";

hdc = BeginPaint(hWnd, &paint);
TextOut(hdc, 10, 10, (LPCSTR)str, strlen(str));
EndPaint(hWnd, &paint);
return;

}

上のは文字しか表示できないのですが
printf("a + b = %d\n", a + b);
みたいに数字を表示させるにはどうしたらいいのですか?

>sprintfでも使ってなさい
と他スレで返答いただいたのですがスレ違いだったのでこっちで質問します

sprintfをしらべたのですが、数字を表示できそうにありません
sprintfをどのように使えば数字を表示できるのですか?





392 名前:デフォルトの名無しさん :04/02/12 11:35
まず Windowsの描画の仕組みが全然わかってない
まずはコンソールでやってはいかがか

sprintf なら、
char str[100];
sprintf(str,"こんにちは %d", 1);
以下同文

393 名前:デフォルトの名無しさん :04/02/12 11:40
ってこれ、「猫でも・・・」での例なのか
いいのかこんな例出して

394 名前:デフォルトの名無しさん :04/02/12 11:43
>391
sprintf作った奴が聞いたら泣くだろうな。(笑

まず、printfとかsprintfをシャブリ尽くしていろいろ試そう。



395 名前:デフォルトの名無しさん :04/02/12 12:05
>>392
ありがとうございました
できました
>>393
そうです
なんでわかったのですか?
>>394
printfはコンソールでしかつかえないんですか?

396 名前:デフォルトの名無しさん :04/02/12 12:28
>宣言時に初期化するのでかまわなければ、
>int data[100] = {0}; のようにすると、全ての要素に{0}を設定できますよ。
と調べたら出てきたのですが、上のようなやり方で2次元配列の場合はどのように宣言したらいいのでしょうか?

int data[5][5] = {1};として初期化してもダメでした

397 名前:デフォルトの名無しさん :04/02/12 12:31
>>391
void ShowMyText(HWND hWnd)
{
HDC hdc;
PAINTSTRUCT paint;
int a = 10;
int b = 100;
CString str;
str.Format("a + b = %d\n", a + b);

hdc = BeginPaint(hWnd, &paint);
TextOut(hdc, 10, 10, (LPCSTR)str, str.GetLength());
EndPaint(hWnd, &paint);
return;

}

これでもできる。

398 名前:デフォルトの名無しさん :04/02/12 12:35
>>396
int data[5][5]
ZeroMemory(data, sizeof(data[][]));

ゼロの場合はコレで初期化できるかな?
試してないんだけど。

399 名前:デフォルトの名無しさん :04/02/12 12:41
配列のsizeof は名前だけでいいよ。
sizeof (data)

400 名前:デフォルトの名無しさん :04/02/12 12:51
>>397
いっぱいエラーが出て確認できませんでした
>>398
0で初期化されてたようです

401 名前:デフォルトの名無しさん :04/02/12 13:03
MFC使ってないんだと思われ

Paint系は、引数をHDCにして、WM_PAINT でBeginPaint()して
得たHDCを渡すようにすると、自力で描画する場合にも
同じ関数が使えるぞ、、、ってとりあえず現状では無理か・・・

402 名前:デフォルトの名無しさん :04/02/12 13:47
>394
少し戻って変数の型とかの部分をよく見てやり直しておいた方が良いよ
今のうちに。

char からintとか、その逆への変換は基本中の基本だから。
後、猫プロはとりあえず出来る方法を紹介していて、理屈は
とばしてるところもあるので、別のサイトや本もよまないと
自力で書けるようにならないよ。

403 名前:デフォルトの名無しさん :04/02/12 16:48
visual C++6.0で
#include <stdio.h>
int main()
{
int a=1,b=1;
printf("AたすBは%dです。",a+b);
return;
}
ってのをコンパイルしました。
そしてビルドを押すと「リンク中...」とでたまま操作不能になってしまいます。
これを解決するにはどうすればいいのでしょうか、
この症状が出た人は多数いるようですが、解決策が無いようなので
やっぱり解決することは不可能なんですか?
それとも
ソースがいけない、使い方が悪い...とかの事ですかね

404 名前:デフォルトの名無しさん :04/02/12 17:33
ん?デジャヴ?

405 名前:デフォルトの名無しさん :04/02/12 17:44
>>403
VS起動しなおしてみて。悪いのは多分MS

406 名前:デフォルトの名無しさん :04/02/12 18:07
>>403
それでハングするってのはオカシイね。
return で値を返してないからコンパイルエラーになるとは思うけど。
ソースの問題ではないと思われ。

407 名前:391 :04/02/12 18:26
>>401
MFCは使ってませんでした
>>402
見直してみます

アドバイスありがとうございました

408 名前:デフォルトの名無しさん :04/02/12 18:51
LINKが返ってこなくなるのは何年も前に食らった
まだ直ってないのか・・・

終了しようにもビルド中で終われなくてビルドの中止は
無視されるんだよな。

409 名前:デフォルトの名無しさん :04/02/12 19:21
VC++って良く知らないんですが、ANSICの関数は全て使えるんですか?

410 名前:デフォルトの名無しさん :04/02/12 19:25
>>409
使えると思う。

411 名前:391 :04/02/12 19:42
char str[100];
sprintf(str,"こんにちは %d", 1);



char str[100];
wsprintf(str,"こんにちは %d", 1);

としても同じ結果になったのですが
sprintfとwsprintfはなにが違うのですか?


412 名前:デフォルトの名無しさん :04/02/12 19:48
>>411
Cの標準ライブラリとして実装されているか、
WindowsのAPIとして実装されているかの違いなのかな?

strcpy と lstrcpy
strcmp と lstrcmp なんてのもあります。

413 名前:デフォルトの名無しさん :04/02/12 19:54
調べろ

414 名前:413 :04/02/12 19:57
ああ、初心者向けだった
すまん

415 名前:デフォルトの名無しさん :04/02/12 20:08
>>412
WindowsのAPIでプログラムするときはwsprintfを使った方がいいのでしょうか?
>>414
いえいえ

416 名前:デフォルトの名無しさん :04/02/12 20:10
>>384
うーん。やっぱ自分で作ったやつより、
MSの用意した関数は使いやすいわ。
ありがたう!

しかしこういう関数を作るためのWindows側の細かい仕様
をまとめた冊子って出てないのかな。なんとなくは分かっ
ても関数を書くとなると、やっぱ厳密に知らないと書けない。

417 名前:デフォルトの名無しさん :04/02/12 20:10
>>403
OSがXPだったり?

418 名前:デフォルトの名無しさん :04/02/12 20:12
extern について詳しく解説してるサイト教えてください。
実行時エラーで仕事が進みません。

419 名前:デフォルトの名無しさん :04/02/12 20:13
>>415
俺はなんとなく strcmp よりも lstrcmp 使っちゃうねぇ。
sprintf は使ってないからわからんです。
CString 使っちゃうので。

同じ動作をする関数がいくつもあるのを知ったときは
そういうのは混乱するからやめてくれ!と思った。

420 名前:デフォルトの名無しさん :04/02/12 20:14
>>418
コンパイルとビルドはできるわけ?
だったら extern なんて関係あるんだろうか?

421 名前:デフォルトの名無しさん :04/02/12 20:38
ソースを書け。
でないと、わからん。

422 名前:デフォルトの名無しさん :04/02/12 20:44
>>410
ありがとう

423 名前:デフォルトの名無しさん :04/02/12 21:00
ShowWindow(hWnd, nCmdShow);
としても
ShowWindow(hWnd, SW_SHOW );
としてもウインドが表示されるのはなぜですか

ShowWindow(hWnd, nCmdShow);の第二引数にSW_SHOWを指定しなくてもウインドが表示
されるならSW_SHOWの存在意味がないようなきがするのですが


424 名前:デフォルトの名無しさん :04/02/12 21:03
>>423
nCmdShow に SW_SHOW が入ってんでしょ。
SW_SHOWが実は数字だってことは分かってます?

425 名前:デフォルトの名無しさん :04/02/12 21:20
>>424
>nCmdShow に SW_SHOW が入ってんでしょ。
nCmdShowにSW_SHOWが代入されてる行はありませんでした
これはどういうことなのでしょうか?
>SW_SHOWが実は数字だってことは分かってます?
知りませんでした、カーソル合わせると#define SW_SHOW 5って出てきました

426 名前:デフォルトの名無しさん :04/02/12 21:28
>>425
nCmdShow は WinMain の引数になってない?
ここで代入されてんだよ。

ユーザーが引数を設定して関数を呼び出すように、
WinMainもどこからか呼び出されて動作を始める
わけさ。



427 名前:デフォルトの名無しさん :04/02/12 21:38
>>426
WinMain の引数になってました
WinMainがどこからか呼び出されて引数としてnCmdShowを貰うときにには常にnCmdShowの中にSW_SHOW
がすでに代入されているんですか?


428 名前:デフォルトの名無しさん :04/02/12 21:41
if (!RegisterClass(&myProg))
return FALSE;
の中の!RegisterClass(&myProg)はどういう意味なのでしょうか?



429 名前:デフォルトの名無しさん :04/02/12 21:46
>>427
小人さんはだいたいはSW_SHOWを入れるようだが
クライアントの希望によっては他の値も入れることがあるらしい。
nCmdShowは所詮変数。いつも同じ値とは限らない。
SW_HIDEのときもあるだろう。

430 名前:デフォルトの名無しさん :04/02/12 21:48
>>415
体感では分からんかもしれんけど、昔実行速度計った結果によると
 wsprintf > sprintf
 lstrcpy < strcpy
 lstrlen > strlen
だったんで strcpy以外はAPIの方使うようにしてる。ただwsprintfは浮動小数点
が使えないので、そんときだけsprintf。

431 名前:デフォルトの名無しさん :04/02/12 22:33
>>429
>>430
ありがとうございました

432 名前:デフォルトの名無しさん :04/02/12 23:36
>>430
VC++ 6.0 でやってみた。

wsprintf > sprintf
lstrcpy < strcpy
lstrlen < strlen

wsprintf 以外はCランタイムの方が速い。
wsprintf が速いのはバッファが1024byte固定だからか?


433 名前:432 :04/02/12 23:38
遅くても、Win API の方を使ってしまう漏れ。


434 名前:デフォルトの名無しさん :04/02/13 00:48
エディットボックス(m_Day)にyyyy/mm/ddの形で入力するところで困ってます。
yyyyをmmを入力したら自動的に/を入れてくれるようにする為下記のようなものを
作ったのですが/が入ったあとカーソルが自動的にエディットボックスの一番最初
の文字の前に行って困ってます。
どのようにすればカーソルを移動しないようにできるでしょうか?

switch(m_Day.GetLength()){
case 4:
if(m_Day.GetAt(3) != '/'){
m_Day = m_Day + '/';
}
break;
case 7:
if(m_Day.GetAt(6) != '/'){
m_Day = m_Day + '/';
}
break;
default:
break;
}
m_No = m_No.Left(10);

435 名前:デフォルトの名無しさん :04/02/13 02:04
>>434
m_editになってるけどCStringで変数設定してるようだが?
まず「値」でなく「コントロール」でCEditで変数を作る。
値だと中身しかいじれないから。

CEdit m_edit;
m_edit.SetWindowText("0123456");
m_edit.SetSel(7,-1);
m_edit.SetFocus();

436 名前:デフォルトの名無しさん :04/02/13 06:09
a[-1][-1]=1
とかいうように配列にマイナスも使えるのはなんでですか?

437 名前:デフォルトの名無しさん :04/02/13 06:29
>>436
使えなくするほどの積極的な理由がないからじゃないですか?

a[10]; で宣言して a[15] みたいな配列を超えるアクセスも
言語上は許されていますし。


438 名前:デフォルトの名無しさん :04/02/13 06:58

MFCプロジェクトでスレッドからの通信用に
ユーザー定義のウインドウメッセージを定義しようと
思うんですが、BEGIN_MESSAGE_MAP( ) で
ON_WM_USER_DEFINED_MESSAGE( )
のように簡単にハンドリングすることはできるんでしょうか?

また、メッセージマップはどの辺で定義すべきでしょう?
新しいファイルを使うのか、既存のファイルが使えるのか。

アドバイスいただけるとありがたいです。

439 名前:デフォルトの名無しさん :04/02/13 07:19
>>437
>a[10]; で宣言して a[15] みたいな配列を超えるアクセスも言語上は許されていますし。

上の場合a[15]=1;とか数値を代入してしまうと、a[10];の宣言で取ったアドレス
以外のアドレスに1が書き込まれて、暴走してしまうとかもありうるのでしょうか?


440 名前:デフォルトの名無しさん :04/02/13 07:54
>>439
ttp://www.ipa.go.jp/security/awareness/vendor/programming/b06_01.html

441 名前:デフォルトの名無しさん :04/02/13 08:01
int a[10]; // 配列確保
a[0] = 1; // 問題なし
a[9] = 1; // 問題なし
a[15] = 1; // アクセス違反 暴走の元
a[0] = 1; // 問題なし だが、上でアクセス違反をしているので 保証はしない。

この程度なら 暴走まではいかないが やっかいなバグの原因になる。(発見しにくい)
文法上問題ないのでコンパイルは通る。
実行もできる。
ただ、何が起こるか保証しない。

442 名前:デフォルトの名無しさん :04/02/13 09:21
>441
ローカル変数なら暴走しない事の方が多いけど、
引数でそれをやると、暴走する事の方が多いと思う。

443 名前:デフォルトの名無しさん :04/02/13 09:44
>>436
他の言語と違って[]は演算子だから。


444 名前:デフォルトの名無しさん :04/02/13 09:52
暴走というより、他の変数とかぶって
いつのまにか値が変わったりするんでやっかいなバグが出るな

445 名前:デフォルトの名無しさん :04/02/13 10:21
CPPファイルを機能単位に分割してるんですが
common.hに記述するのはほとんど全部のCPPファイルで共有されている
ののだけでいいのでしょうか?

たとえば、5つのCPPファイルに分割されてる場合
その中の2つのCPPファイルにしか共有されてないもの
であってもcommon.hに書いといたほうがいいのでしょうか?

446 名前:デフォルトの名無しさん :04/02/13 10:36
>common.hに記述するのはほとんど
とりあえず型宣言とかそーゆー類だと仮定しておく。

で、特に問題ないんじゃね?
あくまでも、ソースの中に○○が出てきたらxxしてね、っていう注意書きみたいなもんだし
問題あるようなら、2つだけからしか参照しないヘッダを作ればよし。



・・・というような回答例を
C言語の入門書を読みおえたばかりの俺は思いついたんですが、いかがでしょうか。


447 名前:デフォルトの名無しさん :04/02/13 10:58
参照してるかどうかより、意味的にcommon がふさわしければ入れればよい

448 名前:デフォルトの名無しさん :04/02/13 11:28
>>446
宣言とか変数やインクルードなどの共有です
>2つだけからしか参照しないヘッダを作ればよし。
そういうこともできるんですね
参考になりました
>>447
共有できるのなら入れていいんですね


449 名前:デフォルトの名無しさん :04/02/13 12:05
int a[5][5];

//-----------------------------------------------------------------------------
// 関数名 : GameInit()
// 機能概要: スタート処理初期化
//-----------------------------------------------------------------------------
int i,h;
for (i=0;i<5;i++)
{
for (h=0;h<5;h++)
{
a[i][h]=0;
}
}

a[4][4]=1;

//-----------------------------------------------------------------------------
// 関数名 : StartFrame()
// 機能概要: 画面更新処理
//-----------------------------------------------------------------------------
if (a[4][4]==1)
{

g_FrameNo = START_INIT;

     }

ではStartFrame()内でa[4][4]には1が入っていませんでした

450 名前:デフォルトの名無しさん :04/02/13 12:09
でも

int a[5][5];
//-----------------------------------------------------------------------------
// 関数名 : GameInit()
// 機能概要: スタート処理初期化
//-----------------------------------------------------------------------------
int i,h;
for (i=0;i<5;i++)
{
for (h=0;h<5;h++)
{
a[i][h]=0;
}
}
//-----------------------------------------------------------------------------
// 関数名 : StartFrame()
// 機能概要: 画面更新処理
//-----------------------------------------------------------------------------
a[4][4]=1;

if (a[4][4]==1)
{
g_FrameNo = START_INIT;
}

とするとa[4][4]に1が入ってました

関数をまたぐ間にa[4][4]の内容が変わってしまったのでしょうか?
これ以外のところではまったくa[][]をいじってないのですが…
なんでこんなことになるのですか?


451 名前:デフォルトの名無しさん :04/02/13 12:17
>>450
その記述した行がどこにあるのかわかる様に書いてくれ
関数の中なのか外なのかさっぱりわからん・・・

452 名前:デフォルトの名無しさん :04/02/13 12:45
表示させたビットマップをテンキーで動かすプログラムを作りました
しかしビットマップの動きが早すぎるのでこま送りぐらいのゆっくりした動きにしたいので
ウェイトをかけたいのですがどうしたらよいのでしょうか?

453 名前:デフォルトの名無しさん :04/02/13 12:51
>449
俺俺スレで解決したんじゃねーのかよ。
>448
ファイル間の変数の共有はやめとけ。

454 名前:デフォルトの名無しさん :04/02/13 13:14
>>451
後なにを書けばよいのですか?
わかりにくくてすみません
>>453
a[4][4]=1;をGameInit()ゲーム初期化関数の方に書きたいのですが
そうするとちゃんと1が代入されていないみたいなのでまだ困ってます



455 名前:449 :04/02/13 13:23
>>451
>>453
グローバルにint a[5][5];を書いたあとにGameInit()
内にもint a[5][5];を書いてました
GameInit()内のint a[5][5];を消したらうまいこといきました
どうもお騒がせしました



456 名前:デフォルトの名無しさん :04/02/13 15:40
       ヽ(・ω・)/   ズコー
      \(.\ ノ

457 名前:デフォルトの名無しさん :04/02/13 16:25
HWND_TOP とか HWND_BOTTOM とかSWP_SHOWWINDOW
などの16進数の数値って、どうやって知ることが出来るでしょうか?

以前某所で別のスイッチの16進数を見たことあったんだけど、そこ
つぶれちゃってて・・・
すみません、ご教授お願いします<(__)>

458 名前:デフォルトの名無しさん :04/02/13 16:27
>>457
VC++の話?

459 名前:デフォルトの名無しさん :04/02/13 16:28
>>457
ヘッダ見れ。
ソース中でそれにカーソル置いてF12とかすれば一発でジャンプしてくれるよ。

460 名前:457 :04/02/13 16:37
458様、459様、ありがとうございました。
解決しました。
(459様の手順を使わせていただきました)

461 名前:434 :04/02/13 17:05
>>435
レスありがとう御座います。
おかげで解決できました。
SetSel()の使い方がまだよくわかりませんが勉強します。
ありがとう御座いました。

462 名前:デフォルトの名無しさん :04/02/13 18:41
>>427
最初のShowWindow()呼び出し時のみ引数の値は無視され、デフォルト値が使われる。

463 名前:デフォルトの名無しさん :04/02/13 19:04
>>462 ソースは?

464 名前:デフォルトの名無しさん :04/02/13 19:41
>>462
タブコントロールの子ウインドウで明示的に
はじめから ShowWindow(SW_HIDE) にしてるけど、
ちゃんと隠れてるよ。


465 名前:デフォルトの名無しさん :04/02/13 19:44
>>427
多分、VBのShell関数などでwindowstyleを指定できる。

466 名前:デフォルトの名無しさん :04/02/13 20:10
プロセス呼び出しの際に親プロセスがnCmdShowを指定できるんじゃなかったっけ?
親に該当するプロセスがない場合はSW_SHOWになるんだと思う。

違うかなぁ・・

467 名前:デフォルトの名無しさん :04/02/13 20:13
>>466
日本語でおながいしまつ

468 名前:デフォルトの名無しさん :04/02/13 20:17
親(呼び出し元)がいないって、、、自然発生するプロセスがあるのか

469 名前:デフォルトの名無しさん :04/02/13 20:51

エクスプローラから呼び出す場合ってことだろうけど、
ここで nCmdShow を指定することってできないんだっけ?



470 名前:デフォルトの名無しさん :04/02/13 20:51
>>463-464
MSDN読みませう。
あとMFCの場合、裏で初回のShowWindowが呼ばれていたりする。

471 名前:デフォルトの名無しさん :04/02/13 20:52
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/startupinfo_str.asp
これか?
日本語訳
ttp://yokohama.cool.ne.jp/chokuto/urawaza/struct/STARTUPINFO.html

あとショートカットでも設定できるな。

472 名前:デフォルトの名無しさん :04/02/13 21:15
キーボードフックをしておいて
MSNメッセとかでチャット中に
あるキーを押したら
AAを書いておいたファイルからAAを読み込んで
メッセの現在のカーソル位置にAAを挿入する

ということをしたいのですが
他のプログラムのカーソル位置にテキストを貼り付ける
にはどうすればいいのでしょうか
coutとか標準出力に出力しても何も起こりませんでした

473 名前:デフォルトの名無しさん :04/02/13 21:27
>>471の内容でどうして>>462の文章になるんだ・・・

474 名前:デフォルトの名無しさん :04/02/13 21:49
プロセスの起動方法が違うじゃねーかよ

475 名前:デフォルトの名無しさん :04/02/14 00:29
ビットマップ上の任意の点の色を調べる関数ってあるのでしょうか?

476 名前:デフォルトの名無しさん :04/02/14 00:32
GetPixel

477 名前:デフォルトの名無しさん :04/02/14 00:57
>>475
無い
ビットマップファイルだけなら作ったほうが早そう



478 名前:デフォルトの名無しさん :04/02/14 01:02
??

479 名前:デフォルトの名無しさん :04/02/14 01:26
Win32Consoleプログラムを製作しているものです。

出力をクリップボードにしたいんですが、どうやったらいいんでしょうか?

480 名前:デフォルトの名無しさん :04/02/14 01:53
CopyToClipboard(CString str)
{
HGLOBAL hGlobal;
LPTSTR lpStr;
hGlobal = GlobalAlloc(GHND, str.GetLength() + 1);
if(hGlobal == NULL)
return;
lpStr = (LPTSTR)GlobalLock(hGlobal);
lstrcpy(lpStr, str);
GlobalUnlock(hGlobal);
if(!OpenClipboard()){
GlobalFree(hGlobal);
return;
}
EmptyClipboard();
SetClipboardData(CF_TEXT, hGlobal);
CloseClipboard();
}

こんな感じで適当に改造
BOOL型でTRUEかFALSEで返るようにするとか

481 名前:デフォルトの名無しさん :04/02/14 01:56
Freeしちゃあかんでしょ・・・

482 名前:デフォルトの名無しさん :04/02/14 01:56
あ、インデントつまってただけか。スマソ

483 名前:デフォルトの名無しさん :04/02/14 02:11
>>471こっちです
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_showwindow.asp
>>473解説をまとめただけです、要約のへたれはお許し下さい。
ShowWindow 関数の初めての呼び出しでの nCmdShow パラメータの値は無視されます。
この場合、ShowWindow 関数は、STARTUPINFO 構造体で指定された値を使ってウィンドウを表示します。
以降の呼び出しで、アプリケーションを起動したプログラムが提供した起動情報を使うには、nCmdShow パラメータを SW_SHOWDEFAULT に設定します。


484 名前:デフォルトの名無しさん :04/02/14 02:17
>>479
>>480のに、追加で
#include <windows.h>

VC++はこれだけでいいと思うけど、リンクエラーが出るなら
user32.libのリンクも追加

485 名前:デフォルトの名無しさん :04/02/14 04:03
>>476
ありがとうございました
>>477
GetPixelでいけそうです

486 名前:デフォルトの名無しさん :04/02/14 04:33
Wizardでデフォルト設定のまま作ったSDIプロジェクトで
CMainFrame::PreCreateWindowが起動時に二度呼ばれてみるみたいなのですが
何のためにどこから呼ばれてるのでしょうか?

感覚的にウィンドウ毎に一度しか呼び出されないと思ってたので意外で・・・。

487 名前:デフォルトの名無しさん :04/02/14 06:45
COLORREF GetPixel(
int x,
int y
) const throw( );
は、ピクセルの RGB 値 (赤、緑、青の成分値) を返すそうですが
かえされたRGB値を画面に表示するにはどうしたらいいのですか?
RGB値の受け渡す方法がよくわからないです

488 名前:デフォルトの名無しさん :04/02/14 07:00
#include <wingdi.h>

BYTE red,blue,green;
COLORREF col;
HDC hdc;
...
col = GetPixel(hdc,x,y); // WINAPI32
red = GetRValue(col);
green = GetGValue(col);
blue = GetBValue(col);

col = RGB(red ,green, blue );
...


489 名前:デフォルトの名無しさん :04/02/14 07:50
...
HDC PaintDC;
BYTE red,blue,green;
COLORREF col;
col=GetPixel(PaintDC,0,0);// WINAPI32
red = GetRValue(col);
green = GetGValue(col);
blue = GetBValue(col);
char str[100];
sprintf(str,"%d", red);
...
とするとchar str[100];のところで構文エラー : ';' が '型' の前にありません
というエラーがでます
...
HDC PaintDC;
BYTE red,blue,green;
COLORREF col;
//col=GetPixel(PaintDC,0,0);// WINAPI32
//red = GetRValue(col);
//green = GetGValue(col);
//blue = GetBValue(col);
char str[100];
sprintf(str,"%d", red);
とするとエラーが出なくなります
なぜでしょうか?
...


490 名前:デフォルトの名無しさん :04/02/14 10:34
拡張子を.cppにしろ

491 名前:デフォルトの名無しさん :04/02/14 10:47
>>490
.ccpにしてますよ

492 名前:デフォルトの名無しさん :04/02/14 10:55
ccb

493 名前:デフォルトの名無しさん :04/02/14 13:14
ここある意味いい問題集だな

494 名前:472 :04/02/14 13:19
>>480
ありがとうございます
非常に参考になりました

495 名前:デフォルトの名無しさん :04/02/14 14:01
>>490
すいません.cppにしてませんでした
.cppに変更したら
Winmain.obj : error LNK2019: 未解決の外部シンボル _WindowProc@16 が関数 _WinMain@16 で参照されました。
.\Debug/chap38.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と出てきました



496 名前:デフォルトの名無しさん :04/02/14 14:01
ヘッダを読み込んでない。
かっこの対応がとれていない。
関数が悪い。
のどれか。


497 名前:デフォルトの名無しさん :04/02/14 15:10
>>496
ありがとうございました、ちゃんとできるようになりました

あとGetPixel(PaintDC,0,0);を

PaintDC=BeginPaint(hwnd,&ps);
GetPixel(PaintDC,0,0);
BitBlt(PaintDC,0,0,200,200,MemoryDC,Ac*200,0,SRCCOPY);
このようにすると色の値が取れてないようで
PaintDC=BeginPaint(hwnd,&ps);
BitBlt(PaintDC,0,0,200,200,MemoryDC,Ac*200,0,SRCCOPY);
GetPixel(PaintDC,0,0);
このように並べ替えるとちゃんと色をとるようになったんですがなぜでしょうか?


498 名前:デフォルトの名無しさん :04/02/14 15:34

MFCでプログラミングしてます。

憂鬱なんかだとクラスを作って、そのクラス間の
連携をしながらプログラミングをしていくみたいな
ことが書いてあったんで、できるだけそれを
意識してやってるんですが、なかなかそういう
理想通りにはいかないなぁという印象。

特に気になっているのが、関数のアドレスを引数に
取る関数で、ファイルコンペアとか、AfxBeginThread
なんかがそうですが、関数のアドレスを渡すとなると
クラス内でstaticで関数を宣言するか、グローバル関数
にするしかなくなってしまいますよね。

なんとかうまくクラスとして使うコツなんてないんですかね。
クラスのstaticメンバ関数だと名前空間で宣言したのと
大差がなくなって、通常の非staticメンバ関数へのアクセスが
容易じゃなくて使いづらい。

なんとかすっきりと解決する方法ないのかな。



499 名前:デフォルトの名無しさん :04/02/14 17:33
>>498
私はthreadの場合はこうしている。
#ありえないコードだけどわかるよね。

class CAnyDlg : public CDialog
{
CAnyDlg() {AfxBeginThread(someThread, this);}
static UINT someThread(LPVOID pParam);
int someMember;
};

UINT CAnyDlg::someThread(LPVOID pParam)
{
CAnyDlg * pThis = (CAnyDlg *) pParam;
return pThis->someMember;
}


500 名前:デフォルトの名無しさん :04/02/14 18:35
>>499
なるほど。ありがとうございます。
staticメンバ関数にthisを渡すのは良い方法かもですね。
参考になりました。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.