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


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

★初心者にVisual C++を教えるスレ★ Part11
1 名前:デフォルトの名無しさん :04/02/28 19:46
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。

  質問の仕方については次のページが大変参考になります。
  http://www.hyuki.com/writing/techask.html
  http://www.geocities.co.jp/Beautycare/4965/public/template.html

■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
 (MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。

満員電車で携帯なんか使うなよ

2 名前:デフォルトの名無しさん :04/02/28 19:48

>満員電車で携帯なんか使うなよ

???



3 名前:デフォルトの名無しさん :04/02/28 20:09
3

4 名前:デフォルトの名無しさん :04/02/28 22:25
繰り返しのforの文ですが1ずつ増やす場合はfor(i=0;i<=10;i++)
って感じで書きますが5ずつ増やしたりするばあいはどうやってかいたらいいんでしょうか?
おしえてください。

5 名前:デフォルトの名無しさん :04/02/28 22:30
for(i=0; i<=10; i+=5)

6 名前:デフォルトの名無しさん :04/02/28 22:32
for(i=0;i<=10;i=i+5)

7 名前:デフォルトの名無しさん :04/02/28 22:36
for (i=0;i<=10;i+5)

8 名前:デフォルトの名無しさん :04/02/28 22:38
>>1
優先座席以外ではいくらでも使っていいんだよ

9 名前:デフォルトの名無しさん :04/02/28 22:41
>>8
電波脳に屁こかれて鼻詰まりながら氏ね

10 名前:デフォルトの名無しさん :04/02/28 22:46
せんきゅーです
本にはのってないのでわかりませんでした。

もうひとつあるんですけど論理演算子の
左辺と右辺がtrueの場合にtrueになる縦棒2本
みたいなやつってどうやって出したらいいんでしょうか?
ちなみにC++です。

11 名前:デフォルトの名無しさん :04/02/28 22:48
>>10
シフト押しながら|

12 名前:デフォルトの名無しさん :04/02/28 22:48
間違った
シフト押しながら\を押す
バックスペースの1個右

13 名前:デフォルトの名無しさん :04/02/28 22:52
キーボード次第では、¥もありえるかも。

14 名前:デフォルトの名無しさん :04/02/28 22:53
>>8>>9
どちらも偏ってるしスレ違いだからいい加減にしとき。

15 名前:デフォルトの名無しさん :04/02/28 22:54
CImageList クラスで、

BOOL GetImageInfo( int nImage, IMAGEINFO* pImageInfo ) const;

 nImage :イメージの 0 から始まるインデックス。

を用いて、たとえばリストの3番目のIMAGEINFOを得ようと、 nImage に2といれても、
イメージリスト全体の情報が取られるようで、
そこから得られた HBITMAPを描画すると、イメージリストの全体の画像が表示されます、
リストの特定の番目の IMAGEINFO が得られるような雰囲気がある関数なんですが、
そうなってくれません。
任意の IMAGEINFO が欲しいときはどうしたらいいでしょうか?

16 名前:デフォルトの名無しさん :04/02/28 23:06
エディタ画面でフォントを大阪にするにはどうすればいいんでしょう?
vs2003です。

17 名前:デフォルトの名無しさん :04/02/28 23:22
フォントエディタで、タイプセットー大阪でんねんとやればよろし。

18 名前:デフォルトの名無しさん :04/02/28 23:25
>>16
WM_SETFONTでしょ

19 名前:デフォルトの名無しさん :04/02/29 00:06
STLのlistで前から5番目の要素にアクセスしたいときって
順番にたどっていくしかないのでしょうか?

20 名前:デフォルトの名無しさん :04/02/29 00:18
for(i=0;i<=10;)
{ i+=5; }
もあり

21 名前:デフォルトの名無しさん :04/02/29 00:41
>>20
とりあえずこんなこと(※)してみたら怒られました。

ite += 5;

※↑こんなこと。

22 名前:デフォルトの名無しさん :04/02/29 00:43

*(ite+5)

これでアクセスできんじゃないの?
駄目なん?


23 名前:デフォルトの名無しさん :04/02/29 00:52
>12
せんきゅーです。
よく見たらありますね。
使ったことないんでわかりませんでした。

24 名前:デフォルトの名無しさん :04/02/29 00:54
>>22
error C2678: 二項演算子 '+' : 型 'std::list<_Ty,_Ax>::iterator' の左オペランドを扱う演算子が見つかりません
というエラーがでてしまいます。

25 名前:デフォルトの名無しさん :04/02/29 01:05
>>24
ポインタと同じには使えないのか。

for(int i=0; i<5 ; i++) ite++;
*ite;

これはどーだ?

26 名前:デフォルトの名無しさん :04/02/29 01:09
>>22
これもオペレータオーバーロードで
簡単に実装できるんだから、STLで実装してくれれば
いいのになぁ。



27 名前:デフォルトの名無しさん :04/02/29 01:11
>>25
それならいけます。
ただちょっと面倒なのでなんとかならないものかと考えていました。
やはりみんなfor文書いて苦労しているのでしょうか?

28 名前:デフォルトの名無しさん :04/02/29 01:48
それがリスト

29 名前:デフォルトの名無しさん :04/02/29 02:57
>>27
For eachでひとつの文でできる言語もあるよ。

30 名前:デフォルトの名無しさん :04/02/29 07:03
>>29
何か勘違いしてないか?

31 名前:名無し@沢村 :04/02/29 13:04
>>19-28
ヌヒ等は、std::advance()も知らんのか

32 名前:デフォルトの名無しさん :04/02/29 13:18
template<class InIt, class Dist>
void advance(InIt& it, Dist n);

このテンプレート関数は、it を n 回インクリメントして前に進めます。
InIt がランダム アクセス反復子型である場合は、式 it += n を評価
します。それ以外の場合は、各インクリメントを実行するのに ++it を
評価します。InIt が入力反復子型または前方反復子型である場合、
n は負でないものとします。


なるほど。


33 名前:デフォルトの名無しさん :04/02/29 14:39
オーナードローでリストボックスのアイテムをカラフルに描画(テキストあり)してみたのですが、
フォーカス位置にオーナードローしなかったときに出てくる
点線枠(みたいなのでちょっと色が変)も出てきやがるんです。
そしてもう一度フォーカスを当てるとその枠は消えるんですけど、
それまではずっと描画されたまま・・・

VC++6.0 sp5 MEでコンパイルしたものは上の現象が起きます。
でも、VC++6.0 XPでコンパイルしたものは正常です。

コンパイル環境というより、実行するときのOS依存かな?

どこをどうしたら出なくなるのかさっぱりわけ分からんです。
心当たりのほどをお伝えください。

34 名前:デフォルトの名無しさん :04/02/29 15:06
隣にいる友人に伝えました。

35 名前:33 :04/02/29 15:47
WM_DRAWITEM の処理をすべてコメントアウトしても点線枠が出てきます。

WM_SETFOCUS あたりでなにかすればいいのかと思って調べましたが、
HideCaret() とかでは消えないし、
かといって WM_SET(KILL)FOCUS で return すると、
点線枠は消えるけど WM_DRAWITEM も親ウィンドウに届かないみたいだし。

>>34 僕にも伝えてください(泣

36 名前:デフォルトの名無しさん :04/02/29 16:01
>>33=35
その枠はFocusRectかな?
DrawFocusRectで無理やり消すとかはどうでしょ。
2回目の描画でXORされるはずだが。


37 名前:デフォルトの名無しさん :04/02/29 16:02
>>31-32
おお!ありがとうございます。
でもなんで戻り値ないんでしょうねw
advance(ite,5);
*ite;
これじゃ
for(int i=0;i<5;i++)ite++;
*ite;
と変わらない気が・・・
STL作った人センス悪いんですかね。

38 名前:33 :04/02/29 17:35
>>36
ブラボー!!

消せました。
逆にXPの方で出てきたりしないのかが心配・・・ですが
ありがとうございます。

39 名前:デフォルトの名無しさん :04/02/29 19:59
advance(ite,5);

for(int i=0;i<5;i++)ite++;
が変わらないと思うセンスが信じられん

40 名前:デフォルトの名無しさん :04/02/29 20:04
質問です。配列の要素数の大きさを大きくすると
例外 unknown software exception 〜とでてしますのですが、配列の大きさは限度があるのでしょうか?
メモリは1Gが積んでいて、メモリ以内の大きさにはしてあるのですが。

41 名前:デフォルトの名無しさん :04/02/29 20:07
まぁVC++特有ではない、STLの質問をするような奴ですから

42 名前:デフォルトの名無しさん :04/02/29 20:08
>>40
限度があります。

43 名前:デフォルトの名無しさん :04/02/29 20:09
>>40
で、いくらにしたのよ?


44 名前:デフォルトの名無しさん :04/02/29 20:42
>>42-43
とりあえず20000あたりでエラーが発生しました、希望としては100000ぐらいまでとりたいのですが
callocで出来ない物かとやってみてはいるのですが使い方がさっぱりと・・・

45 名前:デフォルトの名無しさん :04/02/29 20:43
30過ぎたらC言語
40過ぎたらD言語!

46 名前:デフォルトの名無しさん :04/02/29 20:45
>>44
その動かないコード晒してみ

47 名前:デフォルトの名無しさん :04/02/29 20:49
>>40
オブジェクトのサイズも言ってみよう

48 名前:40 :04/02/29 21:01
>>46-47
#include <stdio.h>
#include <math.h>

#define NUM 20000

int main()
{
int i;
double x[NUM], y[NUM], z[NUM];

for(i = 0; i < NUM; i++){
x[i] = i;
y[i] = i*i;
z[i] = sqrt(i);
}
for(i = 0; i < NUM; i++){
y[i] = y[i]/x[i];
y[i] = y[i]/z[i];
printf("%f %f\n", y[i], z[i]);
}

return 0;
}
これは実験的に作ってみた奴だけどこんな感じで
実際にはメンバにdouble型を10個ほどもってる構造体配列使いたいんだけど。

49 名前:デフォルトの名無しさん :04/02/29 21:04
y[i] = y[i]/x[i];
で0除算してる

50 名前:デフォルトの名無しさん :04/02/29 21:07
>実際にはメンバにdouble型を10個ほどもってる構造体配列使いたいんだけど。
配列をグローバル変数にするとかstatic付きで宣言するしか。

51 名前:デフォルトの名無しさん :04/02/29 21:20
>>49
double型だったらエラーにならんだろ。

52 名前:デフォルトの名無しさん :04/02/29 21:21
>>51
0.0で割れば0除算になるぞ。

53 名前:デフォルトの名無しさん :04/02/29 21:22
つーかスタックに2万個も確保すんじゃねぇ。
ヒープにしろ。

54 名前:デフォルトの名無しさん :04/02/29 21:23
>>53
6万個だろ

55 名前:40 :04/02/29 21:25
>>50
現在プログラム出来ないので後ほどやってみます。
ありがとうございます

56 名前:デフォルトの名無しさん :04/02/29 21:33
Visual C++やりたいけどあのクラスと膨大なメンバー関数。
とても覚えきれないよ。やってる人って全部正確な関数名
まで覚えているの?
それとMFCからととベタ書き?みんなどっちでアプリ開発している
の。よかったら聞かせて。


57 名前:デフォルトの名無しさん :04/02/29 21:38
>>56
MSDNライブラリを参照したり、ここの連中を活用したり。

58 名前:デフォルトの名無しさん :04/02/29 21:42
MSDNライブラリを地道に見たり直撃ワードでググったり。
何が何から派生してるか覚えるだけで覚えること減ると思う。

59 名前:デフォルトの名無しさん :04/02/29 21:42
>>56
API使ってWinアプリを書くよりも、ウイザードとMFCを
使ったほうが楽だよ。良書はいっぱい出てるから、まず
そこから始めるのがいいと思う。

60 名前:デフォルトの名無しさん :04/02/29 21:49
c++のことで質問させてください。
デストラクタ自体は明示的に呼び出すことができるわけですが
明示的に呼び出す必要がある、または呼び出した方が効率的にプログラムを組めるときってどんなときですか?

61 名前:デフォルトの名無しさん :04/02/29 21:49
>>52
値が変になるだけで、エラーにはならんだろ。

62 名前:デフォルトの名無しさん :04/02/29 21:58
>>56
C/C++の基礎があれば、AppWizardから簡単にアプリが組めるのがVCの良いところ。
MFCはWindowsのインタフェースに沿ってクラスが整理されてるし、どのコントロール
使ったらどのクラスなのかってことはすぐ分かる。後はリファレンス本かヘルプでその
クラスにどんなメンバがあるかをつらつら見ていって、使える関数(使いたい関数)から
覚えていけば良い。

63 名前:デフォルトの名無しさん :04/02/29 22:00
>>61
あらほんとだ

64 名前:デフォルトの名無しさん :04/02/29 22:04
>>60
虚構への逃げ
それはプログラマが絶対にしてはいけないことで
プログラマは常に現実を見なければならない。
その分ストレスも溜まるだろうし、もうプログラムを
書くのは止めようなんて思ったりすることもある。
だけど、それを乗り越えて一日一日、精進していけば
いつか、一流プログラマになれるからガンバレ!

65 名前:デフォルトの名無しさん :04/02/29 22:07
要するに、できるけれどするな馬鹿ってことだ。

66 名前:デフォルトの名無しさん :04/02/29 22:07
>>61
正しくNaNにならないか?

67 名前:56 :04/02/29 22:13
みなさんご意見ありがとう。参考になりました。


68 名前:デフォルトの名無しさん :04/02/29 22:29
>60
placement new の後始末

69 名前:デフォルトの名無しさん :04/02/29 23:42

C++でよく使う関数をまとめてクラスライブラリを
作ろうかと思っています。提供方法の選択肢としては

1) ソースコード
2) LIB
3) DLL

の3つがあると思うのですが、ユーザーがクラスの
継承をすることを考えると、選択肢としては 1) or 2)
ということになるでしょうか?

Cでの利用は考えていないのですが、それでも
DLLでクラスを使うのは難しいですか?
現在想定しているのは小規模のライブラリなので
スタティックリンクでもいいかとは思っているのですが、
今後のことを考えるとダイナミックリンクでの作成方法
があるのであれば知っておきたいもので。

この辺に詳しい本ないですかね? あればご紹介
いただけるとありがたいです。

70 名前:デフォルトの名無しさん :04/02/29 23:49
大人しくCOMにしとけよ。

71 名前:デフォルトの名無しさん :04/03/01 00:07
ライブラリの使用者が、
ライブラリのクラスを継承する必要があるのなら無理と思った方がいい。

純粋仮想関数のみのインターフェイスクラスを作るのが、
DLLでクラスを使うときのたしなみですから。

72 名前:デフォルトの名無しさん :04/03/01 00:18

うーむ。難しいんですね。
COMもちょっと見たんですが、めちゃくちゃ面倒で
とても手軽に使える/作れる印象ではないので。

Longhorn になるとAPIがクラスライブラリになると
別スレで読みましたが、DLL関係も改善され
るんでしょうか?

とりあえず、*.LIBかソースコードで提供することにしまふ。

73 名前:デフォルトの名無しさん :04/03/01 00:26
>>48
そのソースだと動くと思うが・・・

他の人も言ってるようにスタックにデカい配列を作るなよ。
デフォルトだと1MBが上限だ。

static 変数かグローバル変数か malloc() だろ?


74 名前:デフォルトの名無しさん :04/03/01 00:30
>>72
藻まえの作ったクラスライブラリなんか危なくて使えないだろうから
ソースコードにしとけ。

75 名前:デフォルトの名無しさん :04/03/01 04:43

MFCってデバイス独立ビットマップ(DIB)を扱うクラスって
あります? API使うしかないのかな?

76 名前:デフォルトの名無しさん :04/03/01 21:50
質問させてください。
印刷を行うプログラムを作っています。
GetDeviceCaps()関数の引数にPHYSICALOFFSETXとPHYSICALOFFSETY を
指定すれば、紙の上辺と左辺からの印刷不能領域の長さが
取得できますが、下辺と右辺からの印刷不能領域の長さは、
どのようにすれば取得できるのでしょうか?
上辺=下辺、右辺=左辺なのかとも思ったのですが、
自分のプリンタでは、上辺と下辺の印刷不能領域の長さが
違っているようで、悩んでおります。

77 名前:デフォルトの名無しさん :04/03/01 21:54
>>76
あんたが質問しているドライバはMSで認定されているか?
もし認定されているなら、ガンガン文句言ってやれ。

78 名前:デフォルトの名無しさん :04/03/01 23:09
>>76
PHYSICALWIDTHからPHYSICALOFFSETXと
HORZRESを引いた残りが右余白でないの?

79 名前:デフォルトの名無しさん :04/03/02 02:49
アホらしい質問ですいません。

Visual C++.net 2003はVisual C++ 6.0の後継なんでしょうか?
Visual C++ 6.0以降でコンパイルしなさいと書いてある場合、
Visual C++.net 2003でコンパイルするのはその条件を満たしてますか?

80 名前:デフォルトの名無しさん :04/03/02 02:58
>>79
>Visual C++.net 2003はVisual C++ 6.0の後継なんでしょうか?

yes

>Visual C++ 6.0以降でコンパイルしなさいと書いてある場合、
>Visual C++.net 2003でコンパイルするのはその条件を満たしてますか?

たぶんだいたいはyes。



81 名前:デフォルトの名無しさん :04/03/02 03:01
>>80
ありがとうございます。
これで買う決心が付きました。

82 名前:デフォルトの名無しさん :04/03/02 03:22
>>81
あんま試してないんだけど、
ペゾルド本のVC6向けのサンプルコードは
VC.NET2003でもそのままコンパイル&実行
できました。

これからはC#とかも使う時代だから、
ちょっと奮発してVS.NET2003アップグレード
買った方がいいかも。今なら4万円くらいで
買えるし。




83 名前:79 :04/03/02 03:59
>>82
ありがたいアドバイスですが、貧乏学生なもので・・・
できるだけ費用は最小限に抑えようかと。
今のところC/C++で事足りるソースしか書けないので、
C#も必要になったら検討します。
そのときにはバージョンも上がってるだろうし。

84 名前:デフォルトの名無しさん :04/03/02 04:42
ワークススペースのDialogで挿入を押すとIDD_FORMVIEWって言うのが
あるじゃないですか、あれってメインのダイアログに貼り付けられるんですか?
またできるなら参考になるサイト教えてください。
おねがいします

85 名前:デフォルトの名無しさん :04/03/02 05:01
VC++2003.NET(アカデミック)でシェアウェアはOKですか?



86 名前:デフォルトの名無しさん :04/03/02 06:04
>>83
貧乏学生なら、アカデミック版買うチャンスだぞ。
めちゃ安いからw

87 名前:デフォルトの名無しさん :04/03/02 08:08
>>83
学生なら2万円でVS.NET買えるぞ!

【太っ腹?】VSもらえるStudent Day【囲い込み?】
http://pc2.2ch.net/test/read.cgi/tech/1076512706/

MSはタダで配る計画まで持ってるらしい。

88 名前:デフォルトの名無しさん :04/03/02 08:09
>>85
アカデミックは商用もOKだけど、
アクティベーションがあるようです。

89 名前:デフォルトの名無しさん :04/03/02 08:43
>>88
ウゲゲゲゲ
イラネー

90 名前:デフォルトの名無しさん :04/03/02 08:45
>>89
でも2万だし。正規品の1/5の価格です。

91 名前:デフォルトの名無しさん :04/03/02 09:08
>>88
クラック出来ねーの?

92 名前:デフォルトの名無しさん :04/03/02 09:32
ウプグレードならベクタで33,990円で売ってるな。
http://shop.vector.co.jp/service/campaign/lib/
でも俺は(゚听)イラネ。

93 名前:デフォルトの名無しさん :04/03/02 09:44
ダイアログでESCやら一部キー入力を制限するには
MFCならPreTranslateMessageで何とか出来ますが
MFCを使わないでやるにはどうしたら良いでしょうか。
MFCのソース覗いた所メッセージループ内でPreTranslateMessageを
TranslateMessageの前に呼び出して実現していることが分かりましたが
DialogBoxで作成したダイアログでは自前のメッセージループでは無いので
実装することができませんでした。

94 名前:デフォルトの名無しさん :04/03/02 10:05

VC6.0+MFCで開発したプロジェクトが
.NET2003でビルドできませんでした。
単純には移行できないらしい。



95 名前:デフォルトの名無しさん :04/03/02 10:30
>>93
メッセージループで TranslateMessageを
呼び出す前に自前のPreTranslateMessage関数を
呼び出したらどう?

96 名前:デフォルトの名無しさん :04/03/02 10:31

このコード、GCCだとコンパイル通るのですが、
VC++6.0だとコンパイルできないのです。
通したいのですがなにか技ないですか?

#include <iostream>
class A { public: int a1; char *p; int a2;};
class B {public: int b1; int b2;};
union C { A aa; B bb;};
C c = { aa:{ 1, "hoge", 2 } };
C d = { bb:{ 3, 4 } };
int main(){ std::cout<< c.bb.b2 << "\n"; return 0;}



97 名前:デフォルトの名無しさん :04/03/02 12:30
>>96
何だそのコード。gccで通るのか確かめたくもないな。
コンパイル通すだけなら、
C c;
で切っといてmain内で
c.aa.a1 = 1;
とかをそれぞれやれば?

98 名前:93 :04/03/02 13:04
>>95
ですからDialogBoxで作成したダイアログでは自前のメッセージループでは無いので
それが出来ないんですよ。


MFCみたくCreateDialogで作成後自前のメッセージループ回すか
システムフック使えば何とかなるかとも思いますがどちらもスマートでない・・・。

99 名前:デフォルトの名無しさん :04/03/02 14:21
>>98
APIオンリーでダイアログ使ってるの?


100 名前:93 :04/03/02 16:17
>>99
そうです。

101 名前:デフォルトの名無しさん :04/03/02 16:40
>>100
APIで記述してもWinMain()のメッセージループはあるのですよね?

子ウインドウ作った場合も、メッセージはWinMain()のメッセージループ
で取得されて、目的のウインドウ目掛けてディスパッチされると思うんですが。
MSGにターゲットのhWndが含まれているから、こういうことができる。

これじゃ回答になってない?

102 名前:デフォルトの名無しさん :04/03/02 16:47
>>101
おまえWin32APIでモーダルダイアログ作ったこと無いだろ。

>>100
スマートな方法は無い。

103 名前:93 :04/03/02 17:00
>>101
一応、メッセージループは存在しますがその前で
DialogBoxを使用しダイアログを作成しているので
そのメッセージループは基本的には使われることは有りません。

最初、そこに飛ばされるものだと思ってコード組んでたのですが
どうもうまく行ないので調べてみたら件の事に気が付いた次第です。
ですのでMainのメッセージループでは取得出来ません。

104 名前:デフォルトの名無しさん :04/03/02 19:33
>>103
CreateDialogだっけ?
そっちじゃダメなん?

105 名前:93 :04/03/02 22:05
>>104
ですからMFCみたくCreateDialogで作成後自前のメッセージループ回すか
システムフック使えば何とかなるかとも思いますがどちらもスマートでないので
何か良い方法は無いかなぁとお知恵を拝借しに参った次第です。

106 名前: :04/03/02 22:25
一例ですがクラスで"->"を押した瞬間にずらっと
変数がでてきたりするときと出てこないときが
あるんですがどうやって切り替えてるんでしょうか?

107 名前:デフォルトの名無しさん :04/03/02 22:56
>>106
VC6だけど、APIレベルで定義されてる大文字の構造体
(WNDCLASSとか)だと表示されない気がする。
なんとかならんのかな。

108 名前:デフォルトの名無しさん :04/03/02 22:58
学校で聞けやガキどもが

109 名前:デフォルトの名無しさん :04/03/02 23:18
そういえば、自分で作ったライブラリを登録したときに、
前は"->"みたいな時に候補がずるっと出てきたけど、
ある日OS再インストールした後からは出てこなくなっちゃったなぁ…。
これもなんか設定とかあるのかな…。
一通り探したつもりなんだけど結局よくわからなくて諦めたんだ。
再インストール前も後も同じVC6なのに挙動が違うから、最初は気持ち悪かった。

110 名前:デフォルトの名無しさん :04/03/03 00:25
過去スレで何度も出るけど
*.ncbファイルを削除してプロジェクトを立ち上げる
と、出てくるかも知れぬ。

あと、メンバじゃ無くて関数になるけど、
VC6だと日本語で終わるコメントの後は出てこないような気がする。

// ぬるぽ
::MessageBox( <- ヒント出ない

/* ぬるり */
::MessageBox( <- ヒント出る

111 名前:デフォルトの名無しさん :04/03/03 09:11
俺も初心者だけど参考にはなるかも。
>>93

ダイアログプロシージャで、IDCANCEL、でESCはつかまる。
あと、WM_DLGCODE WM_*DOWN UP とかで、
どのキーもなんとかなるような気がするけど、
実はもちっと細かいところで俺も苦戦中。

112 名前:デフォルトの名無しさん :04/03/03 09:34
>>97
つまない答えありがとう

113 名前:デフォルトの名無しさん :04/03/03 15:19
サウンドレコーダを作りたいのですが、
まったく手の付けようがなくて困っています。
どこかに、そういったサンプルソースはないでしょうか?

114 名前:デフォルトの名無しさん :04/03/03 18:06
timeGetTimeを使おうと思ってwinmm.libをリンクさせたんですけど、
なぜか「定義されていない識別子です」ってエラーが出ます。
なにかこの関数特有の問題にぶつかっているのか、他に根本的な問題を見落としているのか
ド素人なのでちょっと見当がつかないのですが、
こういった場合どんな問題が考えられるでしょうか。
どなたか助けてください。お願いします。

115 名前:デフォルトの名無しさん :04/03/03 18:23
>>114
mmsystem.hがインクルードされてないからだろ。
WIN32_LEAN_AND_MEANか何かが定義されてるとこのヘッダはインクルード
されなかったような気がする。


116 名前:デフォルトの名無しさん :04/03/03 18:42
すげー!簡単なチャットを作ってるんで、
まさにWIN32_LEAN_AND_MEAN定義をしてあります。
他のプロジェクトでは特にヘッダファイルもいらないのに
何でこのプロジェクトだけエラーがでるのかなぁと思って悩んでたんですが、
おかげさまで解決しました。
ありがとうございました。

117 名前:デフォルトの名無しさん :04/03/03 19:44
>>113
簡単に済ませたいなら「MCI 録音」あたり、
とことんやるなら「waveInOpen 録音」あたりでぐぐれ。


118 名前: :04/03/03 21:24
>110 サンクス。

119 名前:デフォルトの名無しさん :04/03/04 16:11
>>117
ありがとう。

120 名前:デフォルトの名無しさん :04/03/06 20:03
よろしくお願いいたします。
プロジェクトの設定で「MFCを使用しない」にすると
リンクタブのオブジェクトライブラリモジュールに
システムライブラリ(user32.libとか)が出てきますが
「MFCを使用する」にすると出てきません。
これは一体どういうことでしょうか?
MFCのDLL中にあるということでしょうか?

121 名前:デフォルトの名無しさん :04/03/07 09:12
Visual C++.net 2002を持っているのですが、
Visual C++.net 2003を手に入れるには、買いなおす
しかないのでしょうか?

122 名前:デフォルトの名無しさん :04/03/07 13:40
>>121
そのとおり。

123 名前:121 :04/03/07 14:32
>>122
ガーン
・・情報ありがとうございまうす。
・・と思っていたら、私の質問に誤りがありました!
私が使っているのはもっぱらVisual C++なのですが、
パッケージは、VisualStudio.net 2002でした。
買い換えるとますます高いわけですが、やはり無償アップデート
等はありませんか?

124 名前:デフォルトの名無しさん :04/03/07 14:34
>>123
あるわけねーだろ。

125 名前:デフォルトの名無しさん :04/03/07 15:13
あった気がするけど。
…っとそれっぽいのが。
ttp://pcweb.mycom.co.jp/news/2003/04/22/25.html
今はどうなってるか知らんけどな。
ただ、アカデミックは無理とか言う話だった気がする……

うちは、2003から入った人だからよく覚えとらんなぁ…


126 名前:デフォルトの名無しさん :04/03/07 15:16
アカデミック以外は無償で送られてくるんじゃなかったっけ?

127 名前:デフォルトの名無しさん :04/03/07 15:29
>>125
無償アップデートは終了してるよ。

128 名前:デフォルトの名無しさん :04/03/07 15:30
これか。
ttp://www.microsoft.com/japan/msdn/vstudio/specialoffer/default.asp

129 名前:デフォルトの名無しさん :04/03/07 16:22
>>123
VSならステップアップグレードに汁。
4万円くらい。

130 名前:121 :04/03/07 16:47
124-128
情報ありがとうございます。
期間終了とのことですが、しかし私が持っているのは
アカデミックだったので、どちらにしろ無意味でした・・。

それにちなんで、もう一つ質問があるので、宜しくお願します。
私がVC++しか使わないのにStdioを買っていたのはC++の最適化コンパイラ
が欲しかったからなのですが、2003でもVC++の方には最適化コンパイラが
搭載されていないのでしょうか?

131 名前:デフォルトの名無しさん :04/03/07 17:14
>>130
VCにはつーか、Standardにはない。
そしてProfessional版以上はVSしかないという現実。


132 名前:121 :04/03/07 17:55
>>131
よくわかりました。
ありがとうございました。

133 名前:デフォルトの名無しさん :04/03/07 18:26
VCでできてVBでできないことってあるんですか?

134 名前:デフォルトの名無しさん :04/03/07 18:41
>>133
実行速度。

135 名前:デフォルトの名無しさん :04/03/07 19:59
バイナリエディタでひらくと
12 34
なるファイルがある場合

このファイルを読み込んで
12 34 と

ウインドウに表示する、表示するサンプルプログラムを
教えてください。

136 名前:デフォルトの名無しさん :04/03/07 20:02
>>135
if ((strcmp(txt, "12 34") == 0)
  printf("12 34\n");

137 名前:デフォルトの名無しさん :04/03/07 20:23
>>136
すいません。質問が悪かったです。

バイナリモードでファイルを読み込んで
その内容をウインドウに表示プログラム

です。

138 名前:デフォルトの名無しさん :04/03/07 21:13
CFile cf;
CString cs;
char uc;
unsigned char ucc;
int a;
if(cf.Open("ファイルのあるばしょ",CFile::modeRead)==0)
return;
cf.Read(&uc,1);
ucc=(unsigned char)uc;
a=atoi(&uc);
cs.Format("%x",ucc);
MessageBox(cs,MB_OK);
cf.Close();

これで一応表示されるとみた デモなんか無駄なことばかりしてると思う
初心者だもの

139 名前:138 :04/03/07 21:15
あ、 aとか関係ないでした いろいろ試してたからその残骸

140 名前:デフォルトの名無しさん :04/03/07 21:43
>>137
char *buf;//ここにデータを受けておく
char DumpBuf[8];
//以下をループ
wsprintf(DumpBuf, "%02x", (UCHAR)buf[i]);

スペースや改行を適当な場所に入れること

141 名前:140 :04/03/07 21:46
補足だが
CString DumpStr = "";
にしておいて
DumpStr += DumpBuf;
とかして出力文字列を集めていくんだよ

142 名前:デフォルトの名無しさん :04/03/07 22:23
>>140
なんで DumpBuf[8] なのだ? 3だろ?


143 名前:140 :04/03/07 22:36
>>142
UCHARキャストしてるのであり得ないんだけど、万一化けたことを考えて
いちおう32bit分取ってみたが。部分的に書き換えてキャストし忘れとかも
あるかもしれないし。

こういうのはダメ?

144 名前:デフォルトの名無しさん :04/03/07 22:38
9じゃないとダメっつーことか

145 名前:デフォルトの名無しさん :04/03/07 23:54
>>143
bufはchar型へのポインタなんで1byteを超える事は無いと思われ。
それに "%02x" も1byte以上は処理しないだろうし。

char DumpBuf[2] なんてプログラムを書いて
たまたま動いていた漏れが言うのもなんだが。w

char DumpBuf[sizeof("FF")]; と宣言するのが良いかも。

146 名前:デフォルトの名無しさん :04/03/08 00:20
>>145
つーかUCHARキャストしないとunsignedで処理されるので0x80以上は
頭にFFFFFFが付いて8字になるよ。"%02x"は「最低2字」だからオーバー
するなら無視されて2字を超えるものが入る。

147 名前:137 :04/03/08 07:23
>>140-141
たびたび、すいません。わかりません・・・
コピペしてそのまま使えるくらいのサンプル
を教えていただけないでしょうか。
宜しくお願いします。

148 名前:デフォルトの名無しさん :04/03/08 07:53
>>147
宿題なら宿題スレへ。
そうでないなら、ちっとはその使えない頭を使ってみようと言う努力くらいはして見せろ。

149 名前:デフォルトの名無しさん :04/03/08 08:00
>>146
>UCHARキャストしないとunsignedで処理されるので
「signedで処理されるので」だな
%xが32bit幅だからということで

150 名前:デフォルトの名無しさん :04/03/08 08:05
CString GetDumpStr(char * buf, DWORD size)
{
  char TempBuf[9];
  CString DumpStr = "";
  for(UINT i = 0; i < size; i++){
    ZeroMemory(TempBuf, 9);
    wsprintf(TempBuf, "%02x", (UCHAR)buf[i]);
    DumpStr += TempBuf;
    if((i + 1) % 8 == 0){
      if((i + 1) % 16 == 0)
      DumpStr += "\r\n";
    else
      DumpStr += " ";
  }
  else
    DumpStr += " ";
  }
  return DumpStr;
}

151 名前:デフォルトの名無しさん :04/03/08 08:06
これでダメって言ったらネタだねもう

152 名前:デフォルトの名無しさん :04/03/08 09:58
っつーか、プログラムとしてダメダメだろw

153 名前:デフォルトの名無しさん :04/03/08 10:37
VCでゲームを作っているんですけど、
現在時間の表示の仕方教えてください。
現在時間の取得の仕方が分かりません

154 名前:デフォルトの名無しさん :04/03/08 10:43
>>153
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&c2coff=1&q=VC%2B%2B+%8C%BB%8D%DD%82%CC%8E%9E%8A%D4%82%CC%8E%E6%93%BE&btnG=Google+%8C%9F%8D%F5&lr=lang_ja

155 名前:デフォルトの名無しさん :04/03/08 10:47
>154
そこは一応書き込む前に見ました。
でもよく分からなくて…

156 名前:デフォルトの名無しさん :04/03/08 10:57
マルチ死ねよ

157 名前:デフォルトの名無しさん :04/03/08 10:57
>>155
http://www.birdport.jp/c-guide/lessons/28.htm

158 名前:デフォルトの名無しさん :04/03/08 11:02
>>157
どうもです、これなら分かりそうです。

159 名前:デフォルトの名無しさん :04/03/08 11:04
cl.exeでコンパイルするとき、なぜあそこまで大量にエラーが出てくるのかな?
その割にはちゃんとコンパイルできてるし。

#include <iostream>
using namespace std;

int main()
{
  cout << "aaaaa\n";
  return 0;
}

これだけでも死ぬほどエラー吐くし。
STLの中の人が原因?

160 名前:デフォルトの名無しさん :04/03/08 11:10
>>159
エラー出ないよ

161 名前:159 :04/03/08 11:22
ごめん、errorじゃなくてwarningだった。うーむ。

162 名前:デフォルトの名無しさん :04/03/08 11:36
コマンドラインでコンパイルしてるってことか?
それならincludeにパスが通ってないんじゃないか?


163 名前:デフォルトの名無しさん :04/03/08 11:37

QuickCのころは警告度最大でコンパイルしてたけど、
VCだと最大にするとwarning出まくりで気持ち悪いから
デフォルトの警告度にしてる。



164 名前:デフォルトの名無しさん :04/03/08 12:21
以下の現象が起きてしまうんですがなぜでしょうか?

親ダイアログ作成

子ダイアログを親ダイアログAを親にしてDialogBoxで作成。

子ダイアログの子ウィンドウスタティックテキストをサブクラス化。

子ダイアログを閉じる。

すると親ダイアログも自動的に閉じてしまう。

165 名前:デフォルトの名無しさん :04/03/08 13:08
子供の気持ちもわからん親が親になれるかっ!

166 名前:デフォルトの名無しさん :04/03/08 13:54
カメラとマイクからの入力をキャプチャして、動画保存するアプリケーションを作りたいと思っています。
いろいろ検索してみましたが、有力な情報を得ることができませんでした。
そこで質問があります。
MFCで、そういったアプリケーションは作れるのでしょうか?
作れるのであれば、詳細な情報をいたたけると幸いです。

167 名前:デフォルトの名無しさん :04/03/08 13:58
>>159
#pragma warning(disable:4786)


168 名前:デフォルトの名無しさん :04/03/08 14:16
>>166
無理と思う。
MFCではビットマップすらロクに扱えない。
DirectX とか .net になるのでは?

169 名前:デフォルトの名無しさん :04/03/08 14:45
正しくは、MFCには
>カメラとマイクからの入力をキャプチャして、
このような機能はないので、MFCを使ってもその部分で楽はできない、だろ

170 名前:デフォルトの名無しさん :04/03/08 14:47
>>166は基礎的なプログラミング能力から欠けていると思われ。


171 名前:デフォルトの名無しさん :04/03/08 15:31
>>168
わかりました。
DirectXでがんばります。

172 名前:デフォルトの名無しさん :04/03/08 16:54
なんでプログラミングはこんなに複雑なんだ?
int aとかchar *aとかオブジェクト指向とか16進数とか

もっと単純にしる!


173 名前:デフォルトの名無しさん :04/03/08 17:11
というスレ違いな叫び

174 名前:デフォルトの名無しさん :04/03/08 17:11
>>172
1.開式の辞
2.卒業証書授与
3.式辞 校長
4.祝辞 理事長
5.祝辞 来賓
6.送辞
7.答辞
8.閉式の辞


175 名前:デフォルトの名無しさん :04/03/08 17:57
>>172
複雑でない(かもしれない)プログラミング言語
http://www2.airnet.ne.jp/sardine/complang/ABCintro.html


176 名前:159 :04/03/08 19:01
原因わかりました。こういうことだったようです。
http://support.microsoft.com/default.aspx?scid=kb;ja;154419

Q10 : コンパイラ警告 "C4530: C++ 例外処理を使っていますが、アンワインド セマンティクスは有効にはなりません。-GX を指定してください。" が発生します。この意味を教えてください。

A10 : 標準 C++ ライブラリを使用するプログラムは、C++ の例外処理を有効にしてコンパイルする必要があります。C++ の例外処理は、次の方法で有効にできます。
[プロジェクトの設定] ダイアログ ボックスで、[C/C++] タブの [C++ 言語] カテゴリにある [例外処理を有効にする] (Visual Studio .NET 以降では [C/C++] タブの [コード生成] カテゴリにある [C++ の例外処理を有効にする]) をオンにします。

または


/GX コンパイラ スイッチを使用します (Visual Studio .NET 以降では /EHsc です) 。

177 名前:デフォルトの名無しさん :04/03/08 19:21
引数をポインタにするのと参照にするのではどうちがうのでしょうか?

178 名前:デフォルトの名無しさん :04/03/08 19:29
>>172
複雑なコードを単純にするために必要なのさ坊や

179 名前:147 :04/03/08 20:10
宿題スレにいきます
お手数おかけしました。

180 名前:デフォルトの名無しさん :04/03/08 20:23
>>177

1.
リファレンスは初期化時以外に参照先を変更できない。
関数から返ってきたら、引数を渡した時とは別の変数を指していたり、
はたまたNULLが入っているというポインタのような技法が使えない。
リファレンスはポインタを制限強化したものといえる。

2.
リファレンスではオーバーロードできない事がある。
例えば、
 void func1(int a);
 void func2(int& a);
はどちらも同じ呼び出しになるので区別できない。

3.
リファレンスだと再帰的な処理が一貫して同じ形式で呼び出せる。
(a = b = c = d ; とか)

181 名前:180 :04/03/08 20:25
>>180

自己訂正。2の関数名はどっちもfuncということで。

182 名前:デフォルトの名無しさん :04/03/08 22:05
以前前スレで質問したのですが、

std::time_t systime = std::time(0);
std::tm *cur = std::localtime(&systime);

を実行して得られたsystimeの値を hh:mm:ssのようにするにはどうすればいいのでしょう?
初心者ですいません。

183 名前:デフォルトの名無しさん :04/03/08 22:11
自作アプリ起動してタスクマネージャを見てると
そのアプリからダイアログを表示したりすると1回目だけ
16k〜32k程使用メモリが増えたりするんですけど
こういうものなんでしょうか?MDIのアプリを作って
ウィンドウを切り替えたりした時とかも同じ様に
使用メモリが微妙に増えていくんですが・・・。
メモリリークやらオブジェクトの解放漏れやらが心配です(´Д`;)

184 名前:182 :04/03/08 22:13
>>183
質問するついでに漏れの質問にも答えてくれ!

185 名前:デフォルトの名無しさん :04/03/08 23:08
>184
http://pc2.2ch.net/test/read.cgi/tech/1077985164/173
マルチのくせに生意気な

186 名前:デフォルトの名無しさん :04/03/09 07:03
>>168
> MFCではビットマップすらロクに扱えない。
LoadImage()とCBitmapを組み合わせれば、それなりにできますがね。
あと、あなたはCImageを知らないようですね。

187 名前:デフォルトの名無しさん :04/03/09 09:52
>>182
算数の世界

188 名前:デフォルトの名無しさん :04/03/09 11:01
VBはランタイムが必要だからヘボい
とかよく言われますが、例えばVCでも
Cのランタイムdll(MSVCRT.dll)が
必要なので一緒だと思うのですが、
なぜなんでしょうか?

189 名前:デフォルトの名無しさん :04/03/09 11:12
vcrtは最初からシステムに入ってるし、バージョンも問題にならない。
vbvmはバージョンごとに自分で用意しないといけないから
「ランタイムが必要」という認識が生じる。


190 名前:デフォルトの名無しさん :04/03/09 11:48
つーか、スタティックライブラリ使えばMFCとかCのランタイムのDLLはいらない

191 名前:188 :04/03/09 12:46
>>189-199
レスありがとうございます。そういうことなんですね。
ところでMFCにはスタティックライブラリを使用するのを
プロジェクトの設定で出来ますがCのランタイムについては
どうすればできるのでしょうか?

192 名前:デフォルトの名無しさん :04/03/09 13:35
エクスプローラからdwsを起動すると、既存のdevenvがあるとき
それが閉じられてしまって起動するのですが、これって
どうにかならないのでしょうか?オプションを見ても
それらしき設定がないのですが...


193 名前:デフォルトの名無しさん :04/03/09 14:05
>>192
vc6?

194 名前:192 :04/03/09 14:06
はい

195 名前:デフォルトの名無しさん :04/03/09 14:18
>>191
>プロジェクトの設定で出来ますがCのランタイムについては
msvcr71.dllとかのバージョン番号つきはMFCのDLLの設定と同じみたいだが
msvcrt.dllは設定できないみたい。

196 名前:デフォルトの名無しさん :04/03/09 14:39
>>192
フォルダオプションの関連付けのアクションでDDEを使用しないように汁。

197 名前:192 :04/03/09 16:04
>>196
すごい!!長年の悩みが解決しますたTT

198 名前:188=191 :04/03/09 16:41
>>195
レス遅れてすみません。
どうもありがとうございます。
VS6.0しかないのですが、VS.net
だとMFCの設定に合わせてCランタイム
もスタティック、ダイナミックリンクされる
んですね。
でもMSVCRTってMSのうえにVCってもろに
ついているのにシステムライブラリ扱いなんですね。
他のC++処理系(BCBとか)はどうやってるんだろう。
(.netのMSCOR LIB.dllみたいな感じで、どのコンパイラ
メーカーもウィンドウズだとこれを使うんですかね。
それにしてもVCってついているのはちょっと...)

199 名前:デフォルトの名無しさん :04/03/09 18:54
>>198
>プロジェクトの設定で出来ますがCのランタイムについては
プロジェクトの設定 -> C++ -> コード生成 -> 使用するランタイムライブラリ
じゃないのか?


200 名前:デフォルトの名無しさん :04/03/09 22:20
SDK→MFCの順で勉強をしようと思うのですが、
MFCでSDKのテクニックは全て使えるのでしょうか?
MFCであえてSDK流にAPIをダイレクトに呼び出す様な・・・
(SDK + α = MFC ?)

201 名前:デフォルトの名無しさん :04/03/09 22:36
つーか、MFCメインでやってても
APIをダイレクトに使わねばならないことは
多い。

202 名前:デフォルトの名無しさん :04/03/09 22:43
つーか、APIぬきでMFCのみってのは、ほとんど無理。

203 名前:200 :04/03/09 22:48
MFCに移行後も、SDKで得た知識は無駄にはならない
と言うことでよろしいでしょうか?


204 名前:デフォルトの名無しさん :04/03/09 22:52
むしろ、SDK抜きでMFCだけってのは、最初できてもすぐいきづまるって事で、やっぱSDK必須。


205 名前:デフォルトの名無しさん :04/03/09 22:52
さぁ...

206 名前:デフォルトの名無しさん :04/03/09 22:54
>>203
そのとおり。
無駄にならないどころかAPIの知識が必須です。

207 名前:200 :04/03/09 22:59
ありがとうございました。
これで、心置きなく勉強できます!

208 名前:デフォルトの名無しさん :04/03/10 00:46
SDKマスターするとMFCはどうでも良くなる罠。

209 名前:デフォルトの名無しさん :04/03/10 02:58
アセンブラマスターするとCはどうでも良くなる見たいな?

210 名前:デフォルトの名無しさん :04/03/10 03:12
SDKマスターなんてありえないからMFCに手を出す機会を一生失うだけ

211 名前:デフォルトの名無しさん :04/03/10 03:57
VC入門者はMFC中心にやっていけば良いと思う。
ほとんどそれで間に合うし下手なコード書くより出来上がってるクラスとメンバ関数
組み合わせた方が間違いも少ないだろうし。win32APIは必要に応じてちょこっと
使う程度で良いんだし。

212 名前:デフォルトの名無しさん :04/03/10 06:41
APIをC++で使っているとラッパクラスが欲しくなる。

MFCを見るとそこに(使いにくいなりに)ある。

なので、MFCを使わない理由がない限りMFC中心と言う>211の意見に賛成。

213 名前:デフォルトの名無しさん :04/03/10 06:48
MFC使い込んでいくと、自分でクラスを自作するようになったとき、どういうクラスを
作ってどういうメンバを置いたら良いかが何となく分かるようになっていく。プロが
作ったクラスの設計として手本にするのも良いと思う。

214 名前:デフォルトの名無しさん :04/03/10 07:39
あー、いい反面教師になるね。

215 名前:デフォルトの名無しさん :04/03/10 13:26
まだまだC++勉強中の私は
引数にchar*を取るWin32APIを見ると思わず std::stringを使うようにラップする関数を作ってしまうのですが
いい加減面倒になってきました。
他の皆さんはcharでちゃんとbufを確保して渡す等をその場で行っているんでしょうか?
バリバリのC職人の方はともかく、C++から入った人とかは。

216 名前:デフォルトの名無しさん :04/03/10 14:25

STLの string は使わないからよく分からないんだけど、
APIに文字列を渡すときはCStringのインスタンスを
strBuf.GetBuffer() / strBuf.ReleaseBuffer 使ってるな。
Cの文字列と互換性を持たせるやつ。
そんな頻繁には使わないから関数にはしないケド。

MFCやってて、FromHandleとか、一時的なオブジェクトを
返すのがあるけど、あれ、背後で確保したリソースをどういう
風に解放してるのかと思ってソースを追ったら、結構複雑な
ことやってんのね。やっぱガベコレないと面倒なんだなぁと
思った次第。



217 名前:デフォルトの名無しさん :04/03/10 15:18
ttp://tmp.2chan.net/guro-gazou/src/1078899406315.jpg
こんな感じでSDIで作りたいのですが、
ダイアログみたいなのはどうやって貼り付けたらいいんですけ?
おねがいします。

218 名前:217 :04/03/10 15:19
アドレスにguro-gazouって入っていますが
グロ画像のUPする場所にアップしたんで決してグロ画像じゃないです。

219 名前:デフォルトの名無しさん :04/03/10 15:23
CFormView使え

220 名前:デフォルトの名無しさん :04/03/10 15:59
>>218
そんなやつには教えたくない

221 名前:デフォルトの名無しさん :04/03/10 16:07
>グロ画像のUPする場所にアップしたんで決してグロ画像じゃないです。

222 名前:デフォルトの名無しさん :04/03/10 16:32
>>219
参考になるサイトありませんか?

223 名前:デフォルトの名無しさん :04/03/10 16:39
>>222
http://www.google.co.jp/search?q=mfc+cformview&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

224 名前:デフォルトの名無しさん :04/03/10 17:01
>>223
ありがとうございます

225 名前:デフォルトの名無しさん :04/03/10 18:02
doc/viewでアプリケーション作るの一般的!?
オープンソースのソフトのソースをいくつか見てみたんです、が!
なんかCViewとかそんなん全然でてこんですよ

226 名前:デフォルトの名無しさん :04/03/10 19:40
ダイアログベースだったんじゃないか?

227 名前:デフォルトの名無しさん :04/03/10 21:05
Visual C++6.0を使ってるんですが、これって常時行番号を表示させる事はできないんでしょうか?
マニュアル見てもそれらしい事が書いてある場所が見つけられなかったんで・・・良かったら教えて下さい。

228 名前:デフォルトの名無しさん :04/03/10 21:49
VC6.0でMFCベースのアプリケーションを作成しているのですが、
exe(アイコンの状態)にファイルをドラッグ&ドロップすると起動し、
ファイルが開かれている状態にしたいのですが、
その場合のドラッグしたファイルを受け取る方法が分かりません。
どうか教えてください。

229 名前:デフォルトの名無しさん :04/03/10 21:58
確かInitInstanceの中でコマンドライン引数、
つまりドロップしたファイル名とかね、を
渡すんだよ。

230 名前:デフォルトの名無しさん :04/03/10 22:08
>>228
コマンドライン引数(文字列)を取得なら下記二つのいずれかが簡単
* GetCommandLine()
* __argv[i]

あるいは
MFC CCommandLineInfo

231 名前:228 :04/03/10 22:14
>>229さん>>230さん
試してみます。
ありがとうございました。



232 名前:デフォルトの名無しさん :04/03/11 16:04
VC++6.0SP4で、Ctrl + S でプロジェクトを保存するときに

'C:\XXX\XXX.cpp'
ファイルを保存できません。ファイルが他のアプリケーションで使用されている可能性があります。

というメッセージが頻繁に表示されます。
他のアプリケーションでファイルを開いてもいません。
正常に保存される場合もあります。

VSなどの開発環境をインストールするときに、やってはいけないことをやったがために、
こういう状態になったと思われます。解決方法をご存知の方教えていただけないでしょうか?

233 名前:デフォルトの名無しさん :04/03/11 16:04
VC++6.0SP4で、Ctrl + S でプロジェクトを保存するときに

'C:\XXX\XXX.cpp'
ファイルを保存できません。ファイルが他のアプリケーションで使用されている可能性があります。

というメッセージが頻繁に表示されます。
他のアプリケーションでファイルを開いてもいません。
正常に保存される場合もあります。

VSなどの開発環境をインストールするときに、やってはいけないことをやったがために、
こういう状態になったと思われます。解決方法をご存知の方教えていただけないでしょうか?

234 名前:デフォルトの名無しさん :04/03/11 16:22
タスクマネージャを起動してVC++のプロセスがもう一つ起動して
いないか確認。VC++がクラッシュしたりすると画面には出てなくても
プロセスがそのまま残っていたりして、知らずにもう一回VC++を
立ち上げて使っているとそういうようなエラーが出ることがある。


235 名前:デフォルトの名無しさん :04/03/11 17:01
教えてください。
--------------------------------------------------------------
A * a; // 抽象クラス
AA * aa = new AA(); // A の派生クラスその1
AB * ab = new AB(); // A の派生クラスその2

(中略)

void func(A * arg)
{
  // ここで arg が AA を指すのか AB を指すのかを知りたい!
}
--------------------------------------------------------------
上記のように抽象クラスのポインタを引数にとる関数の中で、
そのポインタが派生クラスのどのオブジェクトを指すのかを
知りたいのですが、さっぱりわかりません。
ご存知の方教えていただけないでしょうか?よろしくお願いします。

236 名前:デフォルトの名無しさん :04/03/11 17:09
具体的にやりたいことは、
------------------------
if ( arg == AA型 )
  // 処理1
else if ( arg == AB型 )
  // 処理2
------------------------
こんな感じです。

237 名前:デフォルトの名無しさん :04/03/11 17:14
ヘルプでRTTIでも調べてみれば?

238 名前:デフォルトの名無しさん :04/03/11 17:16
Javaだと気軽にリフレクション使っちまうけど、
C++だと設計から見直す。RTTI使わなくても何とかならないか?

239 名前:デフォルトの名無しさん :04/03/11 17:29
>if ( arg == AA型 )
>  // 処理1
>else if ( arg == AB型 )
>  // 処理2
普通はこーゆーことをするために仮想関数がある

240 名前:デフォルトの名無しさん :04/03/11 17:42
はぁ?
お前は何でもかんでも仮想関数でやるのか。
すごいな。

241 名前:デフォルトの名無しさん :04/03/11 17:45
>>240
オレは>>239じゃないがそれも一つの方法じゃないの?
他人を批判するならおまいの正しいと思う方法を書けよ

いずれにせよクラス設計の問題になると思うけど

242 名前:239 :04/03/11 18:00
>>240
ここは初心者スレなのでC++初心者を考慮してヒントを書いただけ
>お前は何でもかんでも仮想関数でやるのか。
「普通は」と書いてある。実際に仮想関数にするのであれば
>>238,241 が指摘しているように設計の問題になると思う。

自分の場合、時間がない場合はRTTIを使うか、クラスを判別する仮想関数を追加する。
しかし、基本的には設計を見直して仮想関数内で処理するほうが正しいと思う(個人的には)。

243 名前:デフォルトの名無しさん :04/03/11 18:05
まぁもしかしたら仮想関数を使った方がいい場所なのかもしれないけど
>>236だけだと「普通は仮想関数使う」と言えるほどの情報では無いかと。


244 名前:デフォルトの名無しさん :04/03/11 18:05
釣られたかな、よく考えたら >>240 はC++使えなさそうだな。

245 名前:235 :04/03/11 18:17
RTTI を調べて次のようにしてみました。
------------------------
if ( dynamic_cast<AA *>(arg) )
  // 処理1
else if ( dynamic_cast<AB *>(arg) )
  // 処理2
------------------------
とりあえずは期待した動作をしているようです。
回答してくださった方、ありがとうございました。

246 名前:デフォルトの名無しさん :04/03/11 18:33
typeid でぐぐれ

247 名前:235 :04/03/11 20:02
typeid でぐぐって次のようにしてみました。
------------------------
#include <typeinfo>

if ( typeid(*arg) == typeid(AA) )
  // 処理1
else if ( typeid(*arg) == typeid(AB) )
  // 処理2
------------------------
この方法でも >245 と同じ動作をしてくれました。
どちらの方法が正しいやり方なんでしょうか?


248 名前:デフォルトの名無しさん :04/03/11 20:11
>>242
「普通は」というやつは、質問者を馬鹿にしてる。
質問者は他の言語で仮想化くらい知っているかもしれないだろう。
自分のしきたりを押し付けるなよ。
おまえ、押し売りに向いているかも。

249 名前:デフォルトの名無しさん :04/03/11 20:23
なるほど、こうして質問と関係ないところで煽りあいが始まるのか

250 名前:デフォルトの名無しさん :04/03/11 20:29
あげてみよう


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