■過去ログ置き場に戻る■
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が入ります。
>000
A 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行目から数字データが並んでます。
問題なのは、データとデータの間が半角スペースで埋まっていることと、
(テキストエディタで見たとき各列が揃うようにスペースが入ってる、
測定装置屋が見栄えよくするためにやったと思われ)
データファイルのサイズがバカでかいということです。
(データ行数が
>300
k行、ファイルサイズ
>10
MB)
ド初心者なので勉強しながらやってますが、とりあえず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.