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


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

★初心者にVisual C++を教えるスレ★ Part10
501 名前:デフォルトの名無しさん :04/02/14 19:03
VC7ではstaticでないメンバ関数を渡せるみたいなことをどっかで見たことがあるが...

>>500
>>499みたいに別スレッドにMFCオブジェクトの thisを渡す方法はイリーガル。という
か、動作自体しないことがあったり、不可解な動作をしたりなので、全く良い方法では
ない。CWnd関係のポインタなんか、特にそうじゃないかと。

詳細はMSDNの「マルチスレッド : プログラミングのヒント」参照

502 名前:デフォルトの名無しさん :04/02/14 19:41
>>501
>499だけど、それは承知している。
あくまでもオブジェクトからその他のクラスに紐付けるために使っているから安心してくれ。

503 名前:デフォルトの名無しさん :04/02/14 22:13
CD-ROMに存在するテキストファイルを fopenします。
CDを取り出します。
この状態で fgetsしても文字列が取得できるんですけど
なぜなんでしょう?


504 名前:デフォルトの名無しさん :04/02/14 22:26
>>503
入力バッファに読み込まれてるからだろ。
fgets() するたびにデバイスから読んでたら遅くなるから、適当な単位で (物理ブロックサイズ) で読み出して必要部分だけをユーザープログラムに渡すのが普通。

505 名前:デフォルトの名無しさん :04/02/14 22:31
>>504
それって一回でも入力処理を行わないといけないんじゃないの?

506 名前:503 :04/02/14 22:43
>>504
ありがとうございます。
ただ、>>505さんのいわれるとおり、一度も読み出していない
ものまで読めるのが不思議なんです。
fopenの時点でバッファリングされるのかな?

507 名前:デフォルトの名無しさん :04/02/14 22:49
autorun.infみたいにマウント時に自動的に読んでいたりして。

508 名前:デフォルトの名無しさん :04/02/14 23:19
fopenはファイルをstream結びつけて読み書きできるようにする関数。
fseekしたり、freadや、fgetsで、streamのバッファを読み書きしてる。
fopenした時点でバッファリングされてます。

openだと、ファイルハンドルで読み書きする。
こっちはlseekして、readで読み書きする。
openしただけではバッファリングされません。

DOSだとこんな感じだったけど。処理系依存かも。

509 名前:503 :04/02/14 23:32
>>508
ありがとう。なるほどーっす・・・
バッファリングって、概念としてはなんとなくわかるけど
実体がよくわかりません。詳しく解説してる書籍などありますか?

510 名前:デフォルトの名無しさん :04/02/15 00:49
Win32コンソールプログラムで

ドラッグアンドドロップでファイルを開く機能を実装するにはどうしたらよいでしょうか?

511 名前:デフォルトの名無しさん :04/02/15 01:00
>>509
ソースに勝る解説書無し

512 名前:デフォルトの名無しさん :04/02/15 02:44
ビルドしようとすると、ウィンドウプロシージャ内のデフォルト処理、
default:
 return DefWindowProc(HWND, UINT, WPARAM, LPARAM);
の部分で、
error C2275: 'HWND' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
というエラーメッセージが出ます。これがどういうエラーなのかが分かりません。
色々いじってみましたが、一向にエラーは消えません。健闘がつかなくなりました。
分かる方いらっしゃいましたら、ご教授お願いします。

環境は、VC++6.0です。

513 名前:デフォルトの名無しさん :04/02/15 02:58
君は2の平方根を計算したい時に a = sqrt(double); と書くのか

514 名前:512 :04/02/15 03:06
>513
それは書きませんが…。どういうことなのでしょうか。
変数名がおかしいということですか?

515 名前:デフォルトの名無しさん :04/02/15 03:31
どうしてこのスレの人たちはイジワルな答え方ばかりするの?(つД;)えーん

516 名前:デフォルトの名無しさん :04/02/15 03:31
CWndの派生クラスをnewしてもそれはスレッドを生成したことにはならないんですよね?
なんかウインドというとスレッドがおまけについてくるみたいに思ってました。


517 名前:デフォルトの名無しさん :04/02/15 03:34
>>512
HWNDなどは型です。
型を引数にして関数呼び出しはできないよ。


518 名前:デフォルトの名無しさん :04/02/15 05:42
CreateProcess()からrshコマンドを呼び出しています。
一応動作するのですが、処理時間が長いと
3分程でreadエラーと標準出力に表示され
rshコマンドの接続が切れます。
なぜかrshコマンドに-nオプションをつけると無問題です。
これってCreateProcess()の呼び出し方が悪いんですかね?


519 名前:デフォルトの名無しさん :04/02/15 06:00
ビットマップファイルから直接、任意の座標のRGB値を読み込むにはどうすればいいのですか?

520 名前:デフォルトの名無しさん :04/02/15 09:11
・・・自前でファイル読み込み?

521 名前:デフォルトの名無しさん :04/02/15 09:48
ヘッダ読めば任意の座標のRGB値がどこにあるかわかる
パレット使った256色や、上下ひっくりかえってないマイナスの高さのやつに注意

522 名前:デフォルトの名無しさん :04/02/15 10:35
すみません、なんか昨日から謎の現象が起こるようになったので
質問させてください。環境はVS.NET 2003です。
プロジェクトに.cppファイルを追加してコンパイルしようとすると

hoge.cpp(1) : warning LNK4017: #include 文はターゲット プラットフォームでサポートされていません。無視しました。
hoge.cpp(3) : warning LNK4017: int 文はターゲット プラットフォームでサポートされていません。無視しました。
hoge.cpp(4) : warning LNK4017: { 文はターゲット プラ(ry

と、警告が大量に(っていうか行数分)発生するのでつ。
警告だけで実行には問題ないっぽいのですが、大量すぎて気持ち悪すぎるので。

コンソールだろうが、Win32だろうが、MFCだろうが関係なく発生します。
何故かプロジェクト作成時に自動生成されたファイル構成のままの時は
リンカもおとなしくしてくれてるんですが。。。謎。
どなたか原因or治療法をよろしくです。

ちなみに関係ないかもしれないですが、
昨日DirectXのSDKを入れた前後くらいから起こりだしたです。

523 名前:デフォルトの名無しさん :04/02/15 12:02
>>520
はい、自前でしたいんです
>>521
http://www.kuwalab.net/technics/bitmap/
>BITMAPFILE HEADER
>BITMAPFILE HEADERの内容
>オフセット バイト数 構造体フィールド名  説明
>0000     2    BfType        ファイルのタイプ、ビットマップを示すBM(0x424d)が入ります。
>0002     4    BfSize        ファイルのバイト数。ファイルのサイズの情報が入ります。
>0006     2    BfReserved1      予約域。値は、0x00が入ります。
>0008     2    BfReserved2      予約域。値は、0x00が入ります。
>000A     4    BfOffBits       ファイルの先頭から、画像情報までのオフセット。普通は0x36が入っています。
http://www.kk.iij4u.or.jp/~kondo/bmp/
>32 bit (1677万色) Bitmap
>このフォーマットにはカラーパレットがありません。
>1画素あたり 32bit (4byte) で,Blue(8bit), Green(8bit), Red(8bit), Reserved(8bit)
>の順番で色の値が記録されています。Reserved には '0' が入ります。

ビットマップファイルの000Aで画像情報の開始アドレスを取得して
そのアドレスから4byteごとにピクセル情報を見ていけばいいのでしょうか?
初心者なのでまだファイルの読み出し方法がわからないのでもう少し調べてみます

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






524 名前:デフォルトの名無しさん :04/02/15 15:26
リンカ ツールの警告 LNK4017
keyword 文はサポートされていません。無視されます。
モジュール定義ステートメントは、このバージョンの リンカ ツール
ではサポートされていません。.DEF ファイル内のこのステートメントは
無視されました。


525 名前:天野 :04/02/15 15:34
天野っす。

VCってリアルタイム処理したら、
どのくらいの周波数まで保障されますか?

526 名前:デフォルトの名無しさん :04/02/15 16:09
OS と 実行するマシンによる。

527 名前:天野 :04/02/15 16:50
>526
天野っす。

OS:98で、スペックは2.0GHz
それか
OS:XPで、スペックは2.0GHz
です。


528 名前:デフォルトの名無しさん :04/02/15 17:38
質問なんですが
分割コンパイルをするにはどうしたらいいんでしょうか?
コンパイラはvisual C++6.0です。

529 名前:デフォルトの名無しさん :04/02/15 17:54
ソースファイルを分ける
-c つけてコンパイルする

530 名前:デフォルトの名無しさん :04/02/15 18:00
ワークスペースのファイルの上で
右クリックメニューを出して
コンパイル


531 名前:デフォルトの名無しさん :04/02/15 18:04
>>527
CE を除く Windows では、その手の「保証」はない。
また、あんたや俺の生活を「保障」してくれるわけも無い。
ましてや、「補償」なんて考えることすらできない。

532 名前:522 :04/02/15 18:07
>>524
LNK4017の説明はMSDNで読んだんですが、プロジェクトに.defは無いんですよ。
ていうか、.cppで警告されてるんでなお意味が分からず。
つか、以前に正常にビルドした他のプロジェクトを試しにリビルドしてみたり、
他人のソースコードをビルドした時にも発生するんで、謎が深まるばかりで。

533 名前:デフォルトの名無しさん :04/02/15 18:18
>529-530
出来ました。ありがとうございます。

534 名前:523 :04/02/15 23:59
FILE* fp;
fopen("mapdata.bmp","rb");
char a ;
if (fp==NULL)
{
return -1;
}
fseek(fp,0,0);
fread(&a,4,1,fp);
fclose(fp);

とすると
sample.exeの0x004017feでハンドルされていない例外が発生しました:0xC0000005:
場所0x77cf5ca0に書き込み中にアクセス違反が発生しました。。

とエラーがでましたどうしてでしょうか?

535 名前:デフォルトの名無しさん :04/02/16 00:02
FILE* fp = fopen("mapdata.bmp","rb");

最初の2行だけ読んで即レスしてみるテスト。


536 名前:デフォルトの名無しさん :04/02/16 00:16
>>535
変更してみましたが実行中に

sample.exeの0x00401506でハンドルされていない例外が発生しました:0xC0000005:
場所0x0000000cに書き込み中にアクセス違反が発生しました。。

と出てfclose.cの

/* Init near stream pointer */
stream = str;

if (stream->_flag & _IOSTRG) {
stream->_flag = 0;
return(EOF);
}
にカーソルが表示されます

537 名前:デフォルトの名無しさん :04/02/16 00:19
fread(&a,4,1,fp);
aは一バイトだろ

538 名前:デフォルトの名無しさん :04/02/16 00:20
>>534
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fseek.3.html

539 名前:デフォルトの名無しさん :04/02/16 00:20
>>535
あと、char a ;をint a;に変えたらできました

ありがとうございました


540 名前:デフォルトの名無しさん :04/02/16 00:21
>>537
>>538
ありがとうがざいます

541 名前:デフォルトの名無しさん :04/02/16 00:23
Perlじゃねーんだから、きちんとSEEK_SETマクロを使えよな。つーか無意味。

542 名前:デフォルトの名無しさん :04/02/16 00:24
win2kのあるシステムファイルが
ほかのどのdll等を使用しているのか
調べるにはどうしたらいいですか。
昔vc++6を買ったもののすぐに飽きて
押し入れに入れっぱなしになってますが
これで調べられますか。

543 名前:デフォルトの名無しさん :04/02/16 00:25
並列処理プログラムをVisualC++でやりたいのですがどうすればできるのでしょうか?
参考書などあればお願いします。

544 名前:デフォルトの名無しさん :04/02/16 00:32
>>542
Dependency walker を使うですよ。
ダイナミックロードしてるDLLは出ませんですが。


545 名前:デフォルトの名無しさん :04/02/16 00:35
>>544
ありがとです
あとは検索してみます

546 名前:デフォルトの名無しさん :04/02/16 01:12
http://www.dependencywalker.com/
VCについてるツールの最新版
ダイナミックロードしているファイルも解析できます


547 名前:デフォルトの名無しさん :04/02/16 02:53
FILE* fp;
fp=fopen("mapdata.bmp","rb");
char str[100];
int a ;
if (fp==NULL)
{
return -1;
}
fseek(fp,54+(40*29)*3,0);
fread(&a,1,1,fp);
fclose(fp);
sprintf(str,"%d", a);
TextOut(PaintDC, 300, 300, (LPCSTR)str, strlen(str));

FILE* fp;
fp=fopen("mapdata.bmp","rb");
int a ;
char str[100];
if (fp==NULL)
{
return -1;
}
fseek(fp,54+(40*29)*3,0);
fread(&a,1,1,fp);
fclose(fp);
sprintf(str,"%d", a);
TextOut(PaintDC, 300, 300, (LPCSTR)str, strlen(str));

ではaの値が違うのはなぜでしょうか?



548 名前:デフォルトの名無しさん :04/02/16 02:59
>>547
a はint だな?
int だから4バイトの領域があるのに、1バイトしか読み込んでない。
残りの3バイトはゴミが入ってる。
場所を変えたらゴミの内容も変わる

549 名前:デフォルトの名無しさん :04/02/16 03:15
>>548
547の後者の方には正しい値が入っているのですが
前者は全く違う値が入っています

1バイト分のデータしか必要ないので1バイト分しか読み込んでないのですが
どうすればint aの位置を変えても常に正しい値が得られるのでしょうか?


550 名前:デフォルトの名無しさん :04/02/16 03:19
>>549
事前にゴミを消す。int a = 0; で初期化する
というのが答えだが、そもそも1バイト読むなら unsigned char にすべきかな
目的と違うからわかりにくいし、cpuのエンディアンに依存したやりかたはよくない

seek も、0じゃなくて SEEK_SET と入れような

551 名前:デフォルトの名無しさん :04/02/16 03:38
>>541
>>550
ありがとうございます
うまいこといきました

552 名前:デフォルトの名無しさん :04/02/16 09:36
http://www.42ch.net/UploaderSmall/source/1076891520.cpp

553 名前:デフォルトの名無しさん :04/02/16 09:52
>>546
ささささささんきゅうでっす!!!!!!!!

554 名前:542 :04/02/16 10:58
さっそくやってみました。気になるのは
win2k sp4 の internat.exe なのですが
ふたつエラーが出ます。アイコン見ると
APPHELP.DLL が Missing
MPR.DLL が warning です。
warning の詳しい内容はわかりません。
これって普通のことですか?

555 名前:542 :04/02/16 11:13
検索してみると
APPHELP.DLL は存在しませんですた。で

mpr.dll
size=55056byte
CRC16=592C
CRC32=DA09F811
MD5=28d727048fd45b14f32fc2f3434bac24

て出たんですけどこれはこれでOKでしょうか?

556 名前:デフォルトの名無しさん :04/02/16 11:26
C言語をどのくらい理解したらC++に移行したほうがいいのですか?
基礎編を終わらした程度では厳しいでしょうか?

557 名前:デフォルトの名無しさん :04/02/16 11:27
関数が書けたらもういいんじゃないか

558 名前:554 :04/02/16 12:50
ううう。すみませんがどなたか win2k sp4 な方
Dependency walker で internat.exe をチェックして
結果を教えてくれませんか。具体的には
APPHELP.DLL : missing
MPR.DLL: warning
というエラーが出るかどうか、です。

559 名前:デフォルトの名無しさん :04/02/16 13:39
>>556
malloc/freeを使った動的なリストと、再帰関数くらいは
書けるようになってからがいいと思われ。

560 名前:デフォルトの名無しさん :04/02/16 15:20

MFCで副スレッドからメインスレッドに仕事の進行状況を
メッセージで送っているんですが、WM_TIMERみたいに
メッセージキューに1つだけメッセージが置かれるように
したいんですが、そういうことって簡単にできるでしょうか?

同じメッセージで進行状況を伝えようと思うのですが、
メッセージすべてに反応して欲しいわけじゃないので
同じメッセージがメッセージキューに複数溜まるのを
防止したいのです。何かいい方法ないですか?




561 名前:デフォルトの名無しさん :04/02/16 15:54
HDC hdc;
LPTSTR lptStr = TEXT("表示テスト");
hdc = GetDC(hWnd);
TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr));
ReleaseDC(hWnd , hdc);

とすると

'hWnd' : 定義されていない識別子です。
'hWnd': 識別子は、引数依存の照合を使用しても見つかりません。

というエラーが出ます
なぜでしょうか?


562 名前:デフォルトの名無しさん :04/02/16 15:56
>>561
hWndが見えないから

563 名前:デフォルトの名無しさん :04/02/16 15:58
>>562
どうすれば見えるようになるのでしょうか?

564 名前:デフォルトの名無しさん :04/02/16 16:01
>>563
どっかでウインドウ作ってるんなら、hWndがあるはずだろ。
それを何とかして、>>561のコードのところから見れるようにしないと。

565 名前:デフォルトの名無しさん :04/02/16 16:02
#include <windows.h>

566 名前:デフォルトの名無しさん :04/02/16 16:04
HWND hWnd;
↑これはどこで宣言してるん?

567 名前:デフォルトの名無しさん :04/02/16 16:14
>>558
出るよ

568 名前:デフォルトの名無しさん :04/02/16 16:16
"表示テスト"と表示したいウィンドウのハンドルだよ

569 名前:デフォルトの名無しさん :04/02/16 16:20
>>562
>>564
>>565
>>566
winmain.cppのみで宣言してました

@関数の引数にHWND hWndを指定したらできました
あと
A561が書いてある.cppにextern HWND hWnd; を書いてもできました
なぜ@の場合でもできるんですか?


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

570 名前:デフォルトの名無しさん :04/02/16 16:27
>>560
PeekMessageで特定のメッセージを覗いて見て
無かったら放り込めばいけるかも

571 名前:デフォルトの名無しさん :04/02/16 16:28
>>569
Cからやり直したほうがいいかと…。

572 名前:デフォルトの名無しさん :04/02/16 16:38
基礎は大切だよ

573 名前:デフォルトの名無しさん :04/02/16 16:54
>>567
ありがとうございました(・∀・)

574 名前:デフォルトの名無しさん :04/02/16 17:31
vc6.0 mfcでd&dによるファイルパスの取得をしたいのですが。
教えてください。

575 名前:デフォルトの名無しさん :04/02/16 17:34
>>574
http://www2m.biglobe.ne.jp/~jikyu/prog/mfc12.html

576 名前:574 :04/02/16 17:41
BEGIN_MESSAGE_MAP(CFoo, CDialogなど)
()の中は何を指定すればよいのですか?


577 名前:デフォルトの名無しさん :04/02/16 17:56
>>560
そーゆーのはメインスレッドが定期的にサブスレッドの
状況を見に行けばいいんじゃねぇか?

578 名前:デフォルトの名無しさん :04/02/16 18:43
>>570
なるほど。PeekMessageで特定のメッセージの
フィルタリングできるのですね。
参考になりました。

>>577
現在そちらの方針で行っている処理もありまして、
色んなやり方でやってみようと思ったんですが、
たしかにそちらの方が簡単かも知れない。
ただ、SetTimerを使わない場合は、PeekMessageも
使えそうです。

579 名前:デフォルトの名無しさん :04/02/16 21:25
文字列の比較にはstrcmp関数を使うと思うんですが、
日本語の文字列を比較したいときはどうすればいいのでしょうか。
全く同じかどうかを比較するならstrcmpでいけると思うんですが、
例えば、3文字目から"あいうえお"と並んでいる場合などを調べるときの方法が分かりません。
初歩的なのかもしれませんが、教えてください。よろしくお願いします。
環境はVC++6.0です。

580 名前:デフォルトの名無しさん :04/02/16 21:32
>>558
日本語や空白を含むパスのファイルだとうまく動かんよ。

ロードしているDLLが見たいのならこれの方が便利でつよ。
http://www.sysinternals.com/ntw2k/freeware/procexp.shtml

581 名前:デフォルトの名無しさん :04/02/16 21:45
>>579
必要部分をユニコードにしては伺か?
wstring か CString のユニコード版を使うと
簡単かと思われ。

582 名前:デフォルトの名無しさん :04/02/16 23:39
>>579
APIに CompareString() があります。
これはひらがな/カタカナの区別なしに整列させたりできます。

>例えば、3文字目から"あいうえお"と並んでいる場合などを調べるときの方法が分かりません。

この例えはよく分かりませんが。

583 名前:デフォルトの名無しさん :04/02/17 03:34
if (KeyTbl[VK_LEFT] & 0x80)
{
tile_x--;
x = TILE_WIDTH*(tile_x-1);
}
if (KeyTbl[VK_RIGHT] & 0x80)
{
tile_x++;
x = TILE_WIDTH*(tile_x-1);
}

右と左の矢印キーを同時に押してると上のイフ文の両方を実行するのですか?
どうもそれらしい動きをするので困っています

584 名前:デフォルトの名無しさん :04/02/17 03:50
>>583
期待通りに両方実行されると思いますが?

585 名前:デフォルトの名無しさん :04/02/17 04:06
>>584
そうだったんですか…
疑問がやっと解決しました
どうもありがとうございました

586 名前:デフォルトの名無しさん :04/02/17 04:14
int a=0;
scanf("%d",&a);
を、キーボードからの入力があるまで止めるためにかいたのですが
なぜか入力待ちの状態がなくそのままプログラムが進行してしまいます
どうしてでしょうか?

587 名前:デフォルトの名無しさん :04/02/17 07:42
>>586
scnaf()なんかを使うから。

はい、次の方。

588 名前:デフォルトの名無しさん :04/02/17 07:58
>>586
scanf はよくわからんが
getchar() でも止まったから、一時停止だけなら
そちらを使ってみては?

589 名前:586 :04/02/17 08:51
>>587
なぜscanfをつかったらだめなんですか?
>>588
getchar() でもだめでした
入力があるまでプログラムが停止するんですよね?
sprintfで入力状況確認してもなにも入ってないしなんででしょうか?

590 名前:デフォルトの名無しさん :04/02/17 08:55
 スクロールバーでつまみを移動させると
再描画が2回行われてしまいます。
一回再描画したら数秒間は再描画しないように
フラグを立ててもだめです。
再描画するとき、つまみの位置を移動させないときは
再描画は1度きりです。
どうすれば再描画を1度きりにできるのでしょうか。
 また、100MBのデータを読み込むとき、メモリを100MB
使用してしまうのですが、どうすれば、メモリを少なくして
データを利用することができるのでしょうか。データを少しづつ
読み込むという方法があると思いますが、それだと、
すごく時間がかかってしまいそうで・・・

591 名前:574 :04/02/17 09:46
>>574
>>575
foo.hでそのまま宣言したがクラス内で宣言していないと
エラーが生じ、クラス内で宣言すると
オーバーロードされたメンバ関数が '<Unknown>' にありません
といったエラーがでるのですが。
どうか教えてください。

592 名前:デフォルトの名無しさん :04/02/17 09:51
>>589
未取得のキー入力(たぶんリターンだけ)があったんだろう
scanfで、%dだと数字以外は読んでくれないしキーバッファもそのまま

>>590
どういうメッセージが来てどういう反応してるか調べてみて
大きいデータならファイルマッピングがお勧め。用途にもよるが

593 名前:デフォルトの名無しさん :04/02/17 09:53
>>591
いったいどういう書き方をしたんだ?

594 名前:574 :04/02/17 09:57
>>590
>>591 のエラーはニアミスでした。
しかし、クラス内で宣言していても
'CAboutDlg' クラス内で宣言されていません
とでるのですが。


595 名前:デフォルトの名無しさん :04/02/17 10:07
>>598
scanfの前にfflushで標準入力バッファクリアしとけ

596 名前:デフォルトの名無しさん :04/02/17 10:16
>>594
なんか根本的にVC++(MFC)の使い方を間違ってる気がするんだが・・・
やりたい事と、何をやったかを詳しく書いて見ろ

597 名前:574 :04/02/17 10:23
>>596
〜略
class CVcreigaiDlg : public CDialog
{
〜略
afx_msg void OnButton7();
afx_msg void OnDoubleclickedButton7();
afx_msg void OnDropFiles(HDROP hDropInfo);
〜略
};
今作成しているソフトにソースを組み込んでみたのですが、
宣言している内、他の関数は使えるがOnDropだけ
宣言されていないとエラーが生じます。
とりあえず、cppの部分はそれだけエラーがでました。
ほかは何も引っかかってはいません。
やりたいことはd&dによるファイルパスの取得です。
よろしくお願いします。

598 名前:デフォルトの名無しさん :04/02/17 10:24
>>589
getchar();

俺のコンソールプログラムはこれで止まってるが、おかしいな?

ちゃんと実行されてないんじゃないの?
ブレークポイント設定してデバッグしてみたら?


599 名前:590 :04/02/17 10:25
> >>590
> どういうメッセージが来てどういう反応してるか調べてみて
> 大きいデータならファイルマッピングがお勧め。用途にもよるが

ありがとうございます。ぜひファイルマッピングについて
勉強をしてみます。
あと、スクロールバーですが、すごくツマミの範囲が大きい(0〜1000000)のとき、
ツマミをマウスで移動させていくと、ある一定の位置で急に0に戻ってしまいます。

デバッグをしてもわかりません。スクロールバーの範囲を変えても特に
変化はありません。一体どうすればいいのでしょうか。

600 名前:デフォルトの名無しさん :04/02/17 10:31
>>599
Winの仕様。
俺は範囲が大きくなったらスクロールの単位も大きくするようにして回避してる。

601 名前:574 :04/02/17 10:35
>>597
引数間違っていました。
解決です。
お手数掛けました。

602 名前:デフォルトの名無しさん :04/02/17 10:57
>>599
たしか、16bitの頃の数字ひきずっててMFCだと16bitの
数値しか通知してこないいんだと思った。
メッセージハンドラの中でGetScrollInfo() 呼び出せば正しい数値が取れるはず

603 名前:デフォルトの名無しさん :04/02/17 11:44

CFileのGetLength() ってDWORD返すけど、これって
最大でも2GB程度しか表せないみたいなんだけど、
これを超えるサイズのファイルの場合はどうなるんでしょう?
今って4GB程度のファイルはあるんじゃないですっけ?


604 名前:デフォルトの名無しさん :04/02/17 11:53
DWORD で4GBでは。
って、VC++7のヘルプ見て見たらCFile::GetLength() はULONGLONG を返してた・・・

605 名前:デフォルトの名無しさん :04/02/17 12:20
>>604
signed だと2GBになりません?
計算違いかも知れないけど。

VC++7だと拡張されてるみたいですね。
うちはVC++6なので。7に乗り換え必要なのかな。
DWORD は 4バイトですよね。
ULONGLONG は 8バイトでいいんかな?

606 名前:デフォルトの名無しさん :04/02/17 12:25
typedef unsigned long DWORD;では
APIは最初から対応してますけどね。NTFSがあったから当然だけど
Seekをカレントからにして扱う数値が32bit超えないようにすれば
現行のものでも使えますし。

607 名前:デフォルトの名無しさん :04/02/17 12:38

DWORDは unsigned でしたか。
失礼しますた。

Seek を使って、GetLength をオーバーライドできそうだけど
うちはFAT32だからうまく試せるかな。



608 名前:デフォルトの名無しさん :04/02/17 17:57
他人の書いたソースの修正を、VC++でやってます。
VC++触るのはこれが初めて。

ツールバーを1個増やすため、ツールバーを形成しているBMPを探し、
編集してコンパイルしたら、24bit環境のツールバーが真っ黒になりました。

なんでだろうと思ったら、
オリジナルのBMPが40KBなのに、編集して数を増やしたのに33KB。
Windowsペイントで開いて上書き保存しただけでは同サイズ40KBなのに、
キャンパスを広げて保存すると30KBに。

同じ非圧縮24bit BMPに種類があるんでしょうか・・・。


609 名前:デフォルトの名無しさん :04/02/17 18:33
>>608
非圧縮BMPには基本的には種類は無いが比率的に32bitBMPなんてことは、、
VC++のバージョンは何?

610 名前:デフォルトの名無しさん :04/02/17 18:49
>>609
あ、32bitか。
手持ちのグラフィックツールが対応してないから、
そのプロパティで24bitと出てただけだけ。
素直に、エクスプローラのファイルプロパティで見たら32bitでした。

32bit BMP保存できる道具、探さなきゃ・・・
ありがとうございました。

611 名前:デフォルトの名無しさん :04/02/17 18:50
オイ、初心者ども。↓を実践しろ。

ロリータ指向プログラミング
http://www.entis.jp/doc/lolita_programing/lolita1.html

612 名前:デフォルトの名無しさん :04/02/17 19:09

VC++6.0のリソースエディタで16色以上のBMPやアイコンを
編集することはできるんですか?



613 名前:デフォルトの名無しさん :04/02/17 19:14
べつに、なんでもVCのものを使う必要も無いだろうに。

614 名前:デフォルトの名無しさん :04/02/17 19:19
6は無理だな。7はできる

615 名前:デフォルトの名無しさん :04/02/17 19:33
256色なら6でもできる。

616 名前:デフォルトの名無しさん :04/02/17 19:47

VC7 ってのは VC++.NET 2003 のことなんですか?

VS.NET 2003 academic を買おうと思ってるんですが、
商用利用の制限はあるんでしょうか?
通常のProfessional が10万でacademic が2万くらい
なんですが、価格差がめちゃ大きいのでなんか
機能制限があると思うんですが、どういった違いがあるんでしょう?

617 名前:デフォルトの名無しさん :04/02/17 19:57
お前、アカデミックの意味が全然わかってないな。
どこの学生だ?
頼むからプログラマにはならないでくれよな。

618 名前:586 :04/02/17 20:14
>>595
fflushで標準入力バッファクリアしてもだめでした
>>598
コンソールではなくてアプリケーションプログラム上に書いてます
ブレイクポイントを設定しても代入されてなくて
入力待ちにはならず素通りしてるようです

619 名前:デフォルトの名無しさん :04/02/17 21:02
%dヤメロ

620 名前:586 :04/02/17 21:13
>>619
char a;
scanf("%c",&a);
にしてもだめでした
入力待ちにすらならずにそのままプログラムが進行してしまいます
コンソールプログラムのときはちゃんとできるんですけど
ウィンドウズプログラムのときは使えないのかな…

621 名前:デフォルトの名無しさん :04/02/17 21:21
>>620
諦めるなッ

622 名前:586 :04/02/17 21:30
>>621
励ましの言葉ありがとうございます
もう少し考えてみます

623 名前:デフォルトの名無しさん :04/02/17 21:35
>>618
ウインドウズプログラムのときは無理じゃないの?
右上のボタンで終了するのに、なんで
scanf で一時停止する必要があるの?

624 名前:デフォルトの名無しさん :04/02/17 21:47
>>620
Winかよ!
スタートアップがWinMain で標準入力があるかよ

625 名前:586 :04/02/17 21:52
>>623
directXのフルスクリーンモードでやってるのでブレイクポイントとか設定してもうまくいかないし
ctrl+alt+deleteで切り替えるの面倒なんで
プログラムの怪しい挙動するところで一時停止させながら変化を見たいんです

ウィンドウアプリでは無理だったんですか
画面に文字表示するときもコンソールとはちがってデバイスコンテキストが必要になったみたいに
入力も複雑になってるんでしょうか?

626 名前:586 :04/02/17 21:55
>>624
そうですWinです
Winではできないんですか…
ほかの方法探してみます

627 名前:デフォルトの名無しさん :04/02/18 00:52
なんかネタとも釣りともつかないレスで進行中のスレは
ここですか?

AllocConsole(); シレ、とか言ったら紙だろうか。

628 名前:デフォルトの名無しさん :04/02/18 02:10
リモートデバッグするのが一番いいんじゃなかろうか。

629 名前:デフォルトの名無しさん :04/02/18 08:41
例外処理 (初回) は test.exe にあります: 0xC00000FD: Stack Overflow。

というエラーがでたのですが考えられる要因としては
どのようなことがあるでしょうか・・・?
ボタンを押したらなるのですがブレークポイントをボタンのところに設置しても
とまってくれないのです・・・。

630 名前:デフォルトの名無しさん :04/02/18 09:14
スタックオーバーフローって書いてあるじゃん
無限再帰か巨大なスタック変数を取ったか

631 名前:629 :04/02/18 10:05
ありがとうございます。
ブレークポイント以前には何もないのですが、
ブレークポイント以降に60000個を配列に入れる動作があります。
そこが原因の場合、ブレークポイントでとまらずにStack Overflowするのですか?

632 名前:デフォルトの名無しさん :04/02/18 10:20
ソース見てないしなんともいえないけど
60000個の配列をスタックに取ってるの?
型分からないからなんともいえないけど
それでも6万ってのは多いな

633 名前:629 :04/02/18 10:48
>>632
ありがとうございます。
int型の配列でとってます。

634 名前:デフォルトの名無しさん :04/02/18 11:16
というか、スタック溢れさせたら動かないから。
静的な配列はスタックを消費されるので、あんまりでっかいのは動的配列かなんかにした方が良い。
一時凌ぎ的な考えなら、プロジェクトの設定でスタックサイズ(「スタックアロケーション」)決められるから
そこを適当に大きな数字入れとく。デフォルトが1MB

635 名前:デフォルトの名無しさん :04/02/18 11:30
>>633
関数の入口でスタック上の領域は確保されるから、
その配列にアクセスしなくてもその後に確保される変数や
関数呼び出しなんかでオーバーフローするよ。

いい機会だから動的確保の仕方覚えた方がいいんじゃね?


636 名前:デフォルトの名無しさん :04/02/18 11:43
あんましよくないけど、対処療法的な解決方法としては
関数から追い出してファイルスコープのグローバル変数にでもすることだ。

637 名前:629 :04/02/18 11:57
ひとまず動的確保について調べてみようと思います。
その後、>>636についてやってみます。

ありがとうございました。またよろしくお願いします。

638 名前:デフォルトの名無しさん :04/02/18 13:25
ファイルから一行読み込んで、
その行が正しいフォーマットかどうかのチェックで、
WinXP Pro(日)では意図した動きをするのに、
Win2000Server(英)で同じモジュールを実行させた時、
チェックに引っかからないはずの行がチェックに引っかかってしまい、
チェックに引っかかるはずの行がチェックを抜けてしまいます。
どうしてこんなことになるんでしょうか?

639 名前:デフォルトの名無しさん :04/02/18 13:27
2000には存在しないAPIを使っている。

640 名前:デフォルトの名無しさん :04/02/18 13:33
>>639
( ´ー`).。oO(それだとランタイムエラーにならないか?)

641 名前:デフォルトの名無しさん :04/02/18 13:36
narannyo
mushi sarerudake

642 名前:デフォルトの名無しさん :04/02/18 13:47
新しいほうに無いならエントリだけ置けるけど
古いほうに無いのはエラーになる可能性高いっしょ

643 名前:デフォルトの名無しさん :04/02/18 13:51
>>638
デバッグしてからこい。
アタリをつけるとすると、ランタイムの挙動の違いとなると環境によって変わることがあるな。
ロケールとか。少なくとも、デフォルトは違ってそうだ。英語版w2kserverなんて入れるんのもめんどいんで調べないけど。

644 名前:638 :04/02/18 14:43
なるほど。
うっかりしてました。>>639
出直してきます。。。>>643


645 名前:デフォルトの名無しさん :04/02/19 09:40

Path Function なんかで使う、MAX_PATHが
260で定義されているんですが、これって
短すぎないですか? たしか、パスって
1024バイトまで許容されていたと思うのですが。

そのまま使って大丈夫なのかな?
VC++6.0 + Win2K です。

646 名前:デフォルトの名無しさん :04/02/19 09:51
>>645
ファイルシステムによるんじゃないか

647 名前:デフォルトの名無しさん :04/02/19 09:52
みんな使ってるからいいや、なんちゃって^^;
http://www.google.co.jp/search?q=MAX_PATH&hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&start=0&sa=N

648 名前:646 :04/02/19 09:52
パスよりもファイル名そのものの制限がきつそう

649 名前:デフォルトの名無しさん :04/02/19 10:07
>>646
ファイルシステムっつーのは、FATとかNTFSとか?
Windows環境に限って言えばフルパスで
1024じゃなかったっけ? 少なくとも256というのは
ちっと短すぎじゃない? 大丈夫なのかな?


650 名前:デフォルトの名無しさん :04/02/19 10:09
>>647
http://risky-safety.org/~zinnia/doc/maxpath.html

これはなかなか興味深いですね。

651 名前:デフォルトの名無しさん :04/02/19 10:32
>>649
確かWin95だと256じゃなかったか?98もそうだった気がするが・・・

652 名前:デフォルトの名無しさん :04/02/19 10:37
256ってそんなに短いか?

653 名前:デフォルトの名無しさん :04/02/19 10:49
フロッピーディスクだとどうよ?

654 名前:デフォルトの名無しさん :04/02/19 11:32
>>651
ども。そうみたいですね。
エクスプローラで試してみました。

ルートに254文字のファイルを作成することができました。



655 名前:デフォルトの名無しさん :04/02/19 17:06
ウインドウスタイルを駆使して、タイトルバーの右側に表示
されるボタンを「最小化ボタンのみ」にしたいのですが、
どなたか教えてください。

(最大化ボタンと終了ボタンは無効化ではなく表示自体を消したい)
よろしくお願いします。

656 名前:デフォルトの名無しさん :04/02/19 17:13
研究室の仕事で、測定装置が吐き出したテキストを読み込んで、座標変換を
してファイルに出力するプログラムを書こうと思っています。
仕様は、1行目に「X Y Z data」とかいうタイトル行みたいなのがあって、
2行目から数字データが並んでます。
問題なのは、データとデータの間が半角スペースで埋まっていることと、
(テキストエディタで見たとき各列が揃うようにスペースが入ってる、
 測定装置屋が見栄えよくするためにやったと思われ)
データファイルのサイズがバカでかいということです。
(データ行数が>300k行、ファイルサイズ>10MB)
ド初心者なので勉強しながらやってますが、とりあえずwhileとgetlineで
読み込みのテストしようとしたところ、大方の予想通りdjになりました。
こーゆー巨大なデータを扱おうと思ったときはどうすればいいのでしょうか?

657 名前:デフォルトの名無しさん :04/02/19 17:20
>>656
どういうエラーが出るの?
getline は STLかな?



658 名前:デフォルトの名無しさん :04/02/19 17:22
>>656
エラーも何も(応答なし)→タスクマネージャーのお世話に・・・

659 名前:デフォルトの名無しさん :04/02/19 17:27
気が短いのか

660 名前:デフォルトの名無しさん :04/02/19 17:27
データベースにファイルのパスを格納するときには、フィールド長は260文字でいいのかな。
教えてエロい人。

661 名前:デフォルトの名無しさん :04/02/19 17:29

俺は CFile 使ってるけど、数百メガのファイルを
読み込んでも別にエラーは起きてないけれど。
デバッグで1つ1つ動作を追って、どうして
暴走するのか確認してみては?

現状ではほんとにgetlineでエラーになっているのかどうかも
分からないし。

662 名前:デフォルトの名無しさん :04/02/19 17:35
>>661
ネットで転がってたテキスト(おそらくどこかの大学の講義用資料と思われ)
みて作ってたので、CFile知らなかったです。
そのテキスト見てやってたんですが、ifstreamとか使ってるのが問題なのかな…?

663 名前:デフォルトの名無しさん :04/02/19 17:40
VC初心者ならMFC使った方が簡単で無難じゃないかと思う

664 名前:デフォルトの名無しさん :04/02/19 17:55
>>655
WM_NCPAINT のハンドラを作ったらどうか

665 名前:デフォルトの名無しさん :04/02/19 17:57
>>662
とりあえずどこで永久ループしてるのか
デバッグしてみるのが吉。


666 名前:デフォルトの名無しさん :04/02/19 18:12
実行するときに時々タイトルバーに[停止]って出るのはなに?
これって何か駄目なことが起こってる?

667 名前:664 :04/02/19 18:19
>>655
つーか、たしかsysmenuの項目を抜くとボタンも消えると思った

668 名前:デフォルトの名無しさん :04/02/19 18:31
>>667
pSysMenu->DeleteMenu(SC_MAXIMIZE,MF_BYCOMMAND);
だと無効化になるが消えない

669 名前:デフォルトの名無しさん :04/02/19 20:10
>>655
無理だろ。
クローズボックス単体の指定がウインドウスタイルにない。
独立して指定できるのは最大化と最小化だけ。
システムメニューを消せば全部消えるし。

670 名前:デフォルトの名無しさん :04/02/19 23:40
>>645
それってPath関連のAPIで使える長さの制限ってことだろう
UNCを使えば32k文字まで可能になる。

671 名前:デフォルトの名無しさん :04/02/20 00:19
あの、ウインドウのハンドルを取得するのってどうするんでしょうか?
ウインドウは1つしかなくて、

while (1) { //メインループ
  if (PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) {
    if (!GetMessage (&msg,NULL,0,0))
      break;
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }else{
    Loop();
  }
}

で、Loop()から呼び出す関数の中で、
LRESULT CALLBACK WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
↑このhWndと同じウインドウハンドルの値が欲しいです。

一応調べてみたんですが、GetParentとかGetWindowとか、いまいちよく分かりません・・・。

672 名前:デフォルトの名無しさん :04/02/20 00:20
CreateWindowで作った時にHWNDを返してくれてるじゃん。

673 名前:671 :04/02/20 00:26
>>672えーと、最初はそれをグローバル変数に入れてたんですが、
なんかグローバル変数がたくさんすぎて、管理ができなくなってきたので
減らそうと思って・・・素直にグローバルにした方がいいですかね・・・

674 名前:671 :04/02/20 00:33
あっ、今気づきました。Loop関数にハンドルを渡せばいいんですね。
ウインドウ作成を関数化してたから気付かなかった・・・
お騒がせしまつたスマソ。

675 名前:デフォルトの名無しさん :04/02/20 01:37
質問でございます。

A →→→→→→→
           ↓
←←←←←←←←

→→→→→→→→


Aをこの様に動かすにはどうすればいいでしょうか?
なお、Aの座標は(0、0)とし、右端を(7,7)します。
端までくるとY軸に1つ下がります。
ようは、インベーダーの動きです。
自分なりに考えてプログラムを組んでみたのですが
合ってると思うのにちゃんとY軸に下がってくれません。
どうぞ、もし、よろしければお教え願います。


676 名前:デフォルトの名無しさん :04/02/20 01:41

while(1)
{

int X , Y;

if (X <=7)
{
X += 1;
}

if (X == 7)
{
Y -= 1;
}
}


677 名前:676 :04/02/20 01:45
あ、書き忘れましたが、Aの座標は(X,Y)という変数に格納します。
う〜ん。難しい。

678 名前:デフォルトの名無しさん :04/02/20 01:58
__declspec(align(16))というものがあるのですがVC++6.0でコンパイルすると拡張なんたらが無効ですとか
怒られます。SPを当ててないからでしょうか???


679 名前:デフォルトの名無しさん :04/02/20 02:17
>>676 実に興味深い。
・Yから1引くのか?
・Xが1→7まで1足していったら、次は7→1まで1引いていかなあかんて


680 名前:デフォルトの名無しさん :04/02/20 02:51
if (X == ((1 - Y % 2) * 7)) Y++;
else X += 1 - (Y % 2) * 2;

681 名前:デフォルトの名無しさん :04/02/20 03:02
y%2 ? x==0 ? y++ : x-- : x==7 ? y++ : x++;

682 名前:デフォルトの名無しさん :04/02/20 03:09
>>679しかも終わらないw

683 名前:デフォルトの名無しさん :04/02/20 03:12
if(y%2==0) ++x; else --x;
if(x==0 || x==7) ++y;

684 名前:デフォルトの名無しさん :04/02/20 03:17
ナナメに動くのはありなの?

685 名前:676 :04/02/20 03:26
皆様ありがとうございます。
かなり参考になります!

感謝!ほんと感謝!

686 名前:676 :04/02/20 03:58
実際は、

float teki_x = -16.0; //敵キャラのX座標初期位置
float teki_y = 10.0; //敵キャラのY座標初期位置

while(1)
{

kiai = (int)teki_y%2;

if(teki_x <=18.0 && kiai == 0 ) //X座標が右隅まで かつ kiaiが0ならば以下の処理
{
teki_x += 0.1;
if(teki_x == 18.0) //右隅まできたらY軸に1.0つ下がる
teki_y -= 1.0;
}
if(teki_x <=18.0 && kiai == 1 ) //X座標が左隅まで かつ kiaiが1ならば以下の処理
{
teki_x -= 0.1;
if(teki_x == -16.0) //左隅まできたらY軸に1.0下がる
teki_y -= 1.0;
}

if(teki_y == 0.0) break;
}


色々な方法を試しましたが、なぜかX軸には動いてもY軸には動かない。。
ピクリともしません。このプログラムだめなんですかね・・
完璧だと思うのに。。

687 名前:676 :04/02/20 04:00
あ、変数 kiai はint型で本文では宣言してあります。

688 名前:デフォルトの名無しさん :04/02/20 04:10
y下がってる?

突っ込みどころ満載だが、とりあえず、
> kiai = (int)teki_y%2;
yを float ではなく、int にしたらどうか

689 名前:デフォルトの名無しさん :04/02/20 04:11
>>678
7からじゃないかな?
アラインメントの指定なので #pragma で代用するか取っちゃっていいのでは

690 名前:676 :04/02/20 04:16
>>688
あ、これはフロート型じゃないとダメポなんです。
ドットネットでコンパイルしてるのですが
エラーは起きないです。表示もされて動きもします。
ただ、Y軸にすんともくんとも動かないのです。

teki_y++;

とかやると動くのですが、中身のif文がおかしいのでしょうか。。


691 名前:676 :04/02/20 04:22
今日の18時までに提出だと言うのに。。。
かれこれ、この動きで2日寝ずに悩んでる。

プログラマーとしての才能が無いのは元より
理解力著しく欠けてるんだろうなぁ
周りの奴らは、この動きは30分で出来たのに。
私だけ、もうかれこれPCの前で30時間以上考え込んでる。。
あははぁ。もうダメポ・・・orz

692 名前:デフォルトの名無しさん :04/02/20 04:30
if(teki_x >= 18.0) //右隅まできたらY軸に1.0つ下がる
こうしてみたら?よくわかんないけど。

693 名前:676 :04/02/20 04:36
皆様、スレ汚しごめんなさい。・゚・(ノД`)・゚・
こんな低レベルな質問でスレの進行を妨げるのは良くないですね。。
もうプログラマになるのは諦めます。。
ありがとございました。(VΛV)カンシャ

って文を書いて、退学届けの準備をしてたら・・・
>>692さん!動いた!下に動いたょ! \煤i゜∀゜)/ヤッタョ
うわーいうわーい!!



694 名前:デフォルトの名無しさん :04/02/20 04:49
おめでたう。今、ちょこと調べてみたら
if((int)teki_x == 18.0)
でもいいのかな?
評価するときには型を揃えた方がよろしかも。
>>688タンの言わんとしてるのもそれだね。

695 名前:デフォルトの名無しさん :04/02/20 04:50
だからfloatは使うなとあれほど言ったのに……

696 名前:676 :04/02/20 04:56
よーし!あと13時間。がんばるぞー!
本当にありがとございます。
floatはすっごく嫌な型だって分かった!
== を >= この一文字の差が30時間って重いね。。

ぁ、このスレの方は命の恩人です。。
ほんと、うれしいです・゚・(ノД`)・゚・
 
アド乗せて置いたので、インベーダー完成したら送りますよ〜\(*´∀`)/
欲しい人はメッセ登録よろ〜♪



697 名前:デフォルトの名無しさん :04/02/20 06:37
他スレより誘導されてきました。マルチポストご容赦ください。
複数のモードレスダイアログボックスにWM_PAINTなどのメッセージを送ろうと
考えています。今、親となるCWndにポインタ配列をメンバ関数として持たせ、
ここに登録したCDialogへのポインタに一つずつメッセージを送っていますが、
いまいち美しい方法とはいえないと思います。
SendMessageToDescendantsを使えばすべての子孫ウインドウに対してメッセージを
送ることができるようなことが書いてあったのでやってみましたが、いまいち
うまくいきません。何かよい方法はないでしょうか?


698 名前:デフォルトの名無しさん :04/02/20 06:41
ふつーに前者で良いようなきがするが…。

699 名前:デフォルトの名無しさん :04/02/20 07:29
いままで6.0を使っていて
.netの方にも手を出してみたんですが
クラスウィザードってなくなったんですか?
OnDestroyとか編集したい時どすればいいんですか

700 名前:デフォルトの名無しさん :04/02/20 08:23
>>697
SendMessageToDescendantsでもできそうな気はするんだけど
WM_PAINTを送るなら pSubWnd->InvalidateRect(NULL) を
やらないと駄目なので、結局ポインタが必要になるのでは?

701 名前:デフォルトの名無しさん :04/02/20 09:57
.netに変えてからCScrollBarのHScrollイベントができなくなりました。
なぜでしょうか?

702 名前:デフォルトの名無しさん :04/02/20 10:09
ユーザーに開くファイルを選ばせてそのファイルに対して処理する。
という風にするにはどうしたらいいんですか?

703 名前:デフォルトの名無しさん :04/02/20 10:27
どうも.NETと略されるのには違和感があるな。

704 名前:デフォルトの名無しさん :04/02/20 10:31
>>702
CFileDialog?

705 名前:デフォルトの名無しさん :04/02/20 11:37
m_Birth(edit)にyyyy/mm/ddの形で日付を入力すると誕生日を計算してm_Age(edit)に
出力したのですがCTimeSpenで年での出力がわからなかったので下記の用な方法でAge
を計算しました。
この方法だと356で割っているだけなので閏年が無視されてやはり問題があると思うのですが
閏年を計算してくれる良い手はないでしょうか?

if(m_Birth.GetLength() == 10){

time_t myTime;
time(&myTime);
CTime tm_Now(myTime);
CTime tm_Birth;
CTimeSpan ans;
int y, m, d;

y = atoi(m_Birth.Left(4)); //年を習得
m = atoi(m_Birth.Mid(5, 2)); //月を習得
d = atoi(m_Birth.Right(2)); //日を習得

tm_Birth = CTime(y, m, d, 0, 0, 0);

ans = tm_Now - tm_Birth;

m_Age = ans.Format("%D");

m_Age.Format("%d", ((atoi(m_Age)) / 365));
}

706 名前:デフォルトの名無しさん :04/02/20 12:53
>>699
ここまで変わると覚えるの大変だよな
やりたい事が操作より先にわかってしまうだけに..
2002 -> 2003 もえらいかわっとるし

メッセージハンドラはクラスビューでプロパティ出してメッセージボタン
ひさしぶりに操作でヘルプ読むようになったよ。

707 名前:デフォルトの名無しさん :04/02/20 13:06
>>705
普通に計算するのはダメ?
int u=(y%4==0 && y%100!=0 || y%400==0);

708 名前:デフォルトの名無しさん :04/02/20 14:18
みなさんはWindowsアプリを作る際にwindowsx.hのマクロって使っていますか?
いまWINAPIの基礎を勉強しているんですがマクロを使わずにやったほうがいいのか
マクロを使ったほうがいいのか悩んでいます。
使わないほうが勉強になるとは思うんですが、マクロのほうが感覚的に覚えやすいのは確かです。
マクロに頼ると他の環境(VC以外)で困る、ということはあるんでしょうか?

709 名前:デフォルトの名無しさん :04/02/20 15:12

windowsx.h って何?

なんかMFCで見たことのあるような関数が並んでたが。

710 名前:デフォルトの名無しさん :04/02/20 15:19
なつかしいな、windowsx.h
まだあったのかよこれ

711 名前:708 :04/02/20 15:30
>>709,710
ってことは使わないほうがよさそうですね、、、。

712 名前:デフォルトの名無しさん :04/02/20 15:36
>>711
俺はAPIじゃなくて、MFCだから参考にならんと思うよ。
windows.h なら使ったことあるんだが、どう違うんだろ?

713 名前:デフォルトの名無しさん :04/02/20 15:37
>>711
HANDLE_MSGは使ってるけど。

714 名前:デフォルトの名無しさん :04/02/20 15:48
>>711
マクロ集だしあんまり気にすることもない
いざとなれば自分で定義できるし。
しかしもう生でAPI使ってるほうが少数派なのかもしれんなあ

715 名前:708 :04/02/20 15:49
windows.hはWINAPIの関数を記述したもの
windowsx.hはWINAPIで使うマクロを記述したもの

だと思ってたんですが。
結局、使う使わないは個人の好き嫌いみたいですね。
とりあえず使わずに記述してやってることをしっかり理解することにしてみます。
ありがとうございました。


716 名前:デフォルトの名無しさん :04/02/20 16:19
AdvancedWindowsくらいしか使ってる書籍みたことないな

717 名前:705 :04/02/20 17:59
閏年を考慮したものはVC++には無くやはり計算で出すしかないのでしょうか?

718 名前:デフォルトの名無しさん :04/02/20 18:26
考えろ!
考えるんだ!
他の奴に出来てお前に出来ないはずはない!

719 名前:デフォルトの名無しさん :04/02/20 19:31
>676
遅レスだがfloat(浮動小数点)は、
値によって誤差が発生するので == は基本的に使ったら駄目。

720 名前:デフォルトの名無しさん :04/02/20 19:44
>676
#include "stdio.h"

void main()
{
  float n = 0.0;
  int i;

  for( i = 0; i < 10; i++ )
    n += 0.1;

  if( n == 1.0 )
    printf ( "sum:1.0\n" );
  else
    printf ( "not 1.0\nsum:%f\n", n );
}


こんなかんじかな?
がんばれ。

721 名前:デフォルトの名無しさん :04/02/20 19:53
#include <stdio.h>

int main (void)
{

printf ("(′・ω・)<ショボーン\n");
return 0;
}
コマンドまたはファイル名がただしくないとでるんでつがどうしたら?

722 名前:デフォルトの名無しさん :04/02/20 20:04
>>721
もまいが実行ファイルを作ったディレクトリに
移動してから実行シレ。

723 名前:デフォルトの名無しさん :04/02/20 20:37
>698 >700殿
早速のお答え、ありがとうございます。そうですか、やはりポインタ配列は
持っていないといけないのですね。現在のまま進めていこうとおもいます。

どうもありがとうございました。


724 名前:デフォルトの名無しさん :04/02/20 22:14

Winアプリからコンソールアプリを起動して、
その出力をWinアプリで取り込むには
どうしたらいいのでしょう?

VC++はコンパイル結果を
IDEの方で取り込んでますよね?

725 名前:デフォルトの名無しさん :04/02/20 22:20
STARTUPINFOをみれば分かるだろう

726 名前:デフォルトの名無しさん :04/02/20 22:27
>>724
やったことないからしらんけど、

::ReadFile( ::GetStdHandle( STD_INPUT_HANDLE ),
      (const char *)buf, strlen( buf ), &dwWritten, NULL );

とかでいけたりするんかも?
知らんけど。知らんけど。

727 名前:デフォルトの名無しさん :04/02/20 22:29
ファイルの削除(ゴミ箱に入れる)をしたいのですが、::remove(filename);
ですともちろんゴミ箱に入るはずなどなくいきなり消えてしまい困ってます。
ゴミ箱に入れる方法を教えてくださいませ。


728 名前:デフォルトの名無しさん :04/02/20 22:31
SHFileOperation

729 名前:デフォルトの名無しさん :04/02/20 22:33
>>715

> とりあえず使わずに記述してやってることをしっかり理解することにしてみます。

これは違うだろ。
どちらも同じAPIで、形態が関数かマクロかの違いに過ぎない。
ってゆーか普段関数のつもりで使ってるAPIのほとんどはマクロだろ。
今までマクロだったものが次のバージョンでは関数として提供されることもある。
逆は互換性の面から言ってまず無いけどさ。
関数を使えば「やってることをしっかり理解」だとか思ってたら大間違い。

むしろ何のためにマクロを定義するのかを考えれば使えるところではマクロを使う方が望ましい。

# しかし Long-Horn でごっそり入れ替わることがわかってる WinAPI をいまさら勉強するのってむなしいな・・・。

730 名前:デフォルトの名無しさん :04/02/20 22:38
>>728
ありがとうございます。


731 名前:デフォルトの名無しさん :04/02/20 23:00
>724
CreatePipe() DuplicateHandle()

ちなみに猫のはDuplicateHandle()の使い方が間違ってるから。

732 名前:デフォルトの名無しさん :04/02/20 23:11
現在ネトゲを作ってるのですが、常に鯖を起動することは出来ないので
HP上の奥底にテキストデータを用意して、そこにホストはIPを保存、
クライアントはIPを読み込むということをしたいのですが、
HP上のテキストを読み書きするにはどうすればいいのでしょうか?

733 名前:デフォルトの名無しさん :04/02/21 01:47
>>732
そこらに転がってるクラスを使うか自作するか

734 名前:デフォルトの名無しさん :04/02/21 03:14
よくアプリケーションでネット回線を使って最新バージョンの情報を取得するものがよくありますが、それはどうやるのですか?

735 名前:デフォルトの名無しさん :04/02/21 03:18
ネットに繋いで、最新バージョンがあるか調べて
通知するなり自動パッチを当てるなりしてるだけですが?

736 名前:デフォルトの名無しさん :04/02/21 04:09
>>735
どのようなAPIを使用して最新バージョンがあるか調べるのでしょうか?

737 名前:デフォルトの名無しさん :04/02/21 04:25
Winsock APIを使ってHTTPなりFTP、もしくは独自プロトコルなりを使って
サーバーに問い合わせてるだけ

738 名前:デフォルトの名無しさん :04/02/21 04:37
>>737
ありがとうございました

739 名前:デフォルトの名無しさん :04/02/21 05:17
次から次へとバグが出てくるので正直疲れました、さようなら…

740 名前:デフォルトの名無しさん :04/02/21 05:59
>>739
サヨウナラ…。

でも目の前にあるバグだけは直してから逝け。
そうすれば見える世界も変わるかもしれない。

741 名前:デフォルトの名無しさん :04/02/21 09:49
>>740
新たなバグの世界が開けるかもしれんぞ

742 名前:デフォルトの名無しさん :04/02/21 10:15

.NET2003だと

void unco()
{
for(int i=0;i<4;i++) cout << "hoge";
for(int i=0;i<10;i++) cout << "hage";
}

このコードのコンパイルできるようになりましたか?


743 名前:デフォルトの名無しさん :04/02/21 10:18
>>742
なってるよ

744 名前:デフォルトの名無しさん :04/02/21 10:19
iなんてどこでも使うんだから

int i;

void unco()
{
for(i=0;i<4;i++) cout << "hoge";
for(i=0;i<10;i++) cout << "hage";
}

にすればいいよ。俺って天才!

745 名前:デフォルトの名無しさん :04/02/21 10:28
>>743
サンクス。
そろそろVC6から移る時期かなー。

>>744
forループ内の関数で i使ってたら誤動作起こすべ。

746 名前:デフォルトの名無しさん :04/02/21 10:37
>>744
void foo(vector<int> & a, vector<double>& b)
{
for (vector<int>::iterator it = a.begin(); it != a.end(); ++it) {
cout << * it;
}
for (vector<double>::iterator it = b.begin(); it != b.end(); ++it) {
cout << * it;
}
}


747 名前:デフォルトの名無しさん :04/02/21 12:07
>>742
C++ だと、そんな事が出来るのか。。。
i のスコープが、ウァァァァァァン

748 名前:デフォルトの名無しさん :04/02/21 12:09
>>747
今までのVSはint iの多重宣言だ、と怒られた

749 名前:デフォルトの名無しさん :04/02/21 12:24
VC++のリソースエディタを使ってるんですが、ダイアログを作るときに、
コントロールを配置するためにツールバーが表示されなくなりました。
さんざん設定をいじってみたのですが、一向に表示されません。
解決する方法をご存じの方は教えてください。お願いします。
環境はVC++6です。

750 名前:デフォルトの名無しさん :04/02/21 12:31
>>749
ツール > カスタマイズ > ツールバー
じゃなかったかな。
違うかも知れんけど。


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