トップページ⇒tech
1001コメント306KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001987NGNG
タイトルのとおり、
Visual C++ 初心者用スレッドです。

前スレ・関連スレは、>>2 ぐらい。
0322デフォルトの名無しさんNGNG
>>321
出来たとしても使ってるウインド全部引き連れてくるんじゃないの。
0323デフォルトの名無しさんNGNG
当方の使ってるソフトがvisual C++.net で、
参考書(古い奴)通りにやると、古いとか何とかがでるんだけど(ビルド時じゃなくて)、
新しい参考書買ったほうがいいのかな?
0324デフォルトの名無しさんNGNG
>>323
説明不足で回答不能。
0325デフォルトの名無しさんNGNG
>323
CやC++の本の勉強をVCでやろうとしてる?
0326デフォルトの名無しさんNGNG
>>323
どうせANSI以前の本でも借りてきたんだろ
大人しくVC++.NETの本を買っとけ
どうせANSI準拠の本買ってもコンパイラ通るか怪しいんだから
0327323NGNG
>>324
すいません。。
>>325
その通りです。
>>326
うぃ。
0328デフォルトの名無しさんNGNG
>>327
ソースとエラーメッセージをうざく無い、程度に書きこんでみるのが吉。
誰か親切な方が、それなりに答えてくれますよ。
0329デフォルトの名無しさんNGNG
>>322
そうですね。
やっぱりできないのかな。複数のウインドウハンドルが
返って来ても、どれが欲しいハンドルなのか判別できないような
気がする。
0330デフォルトの名無しさんNGNG
>>329
結局何がやりたいのか相談したら?
別のもっといい方法があると思うが。。。
0331デフォルトの名無しさんNGNG
>>329ですが。

>>330
漏れは質問者ぢゃないので。^^;

0332デフォルトの名無しさんNGNG
クラスのメンバ関数を呼び出すのはオブジェクトを定義しないとむりですか?
0333デフォルトの名無しさんNGNG
>>332
static関数にすれば呼べるが、クラス設計に注意汁。
0334デフォルトの名無しさんNGNG
仮想関数だから無理だボケ!って言われました。。。
もうちっと勉強してきます
0335335NGNG
■ VisualC++(MFC限定)相談室 MFC7.dll■から誘導されてきました。
質問なんですが
あるcppファイルから他のヘッダを取り込んで
他のヘッダにあるクラスでオブジェクトを宣言しようとすると、
コンストラクタ関数を呼び出したことになってしまいます。
オブジェクトを新たに宣言できないんですがどうすればいいですか?
0336デフォルトの名無しさんNGNG
>>335
イマイチ言ってる意味がわからんのだが。
あるクラスのインスタンスを宣言したらコンストラクタは必ず呼び出される。

プログラム開始時に呼びたくないのであればポインタで宣言して好きなときにnewしる
0337デフォルトの名無しさんNGNG
>>335
クラスの構成がこんな感じになってたりするとか?

--A.h--
#include "B.h"
class A{ ... B testB; };
------
--B.h--
#include "C.h"
class B{... C testC };
------
--C.h--
#include "A.h"
class C{... A testA };
------
0338デフォルトの名無しさんNGNG
>>335
MFCスレをみてきたけど……
正直、もう少しC++について調べる必要があると思われ。
知識なさすぎ。

……人に聞くのは「調べる」って言わないからね。念のため。
0339デフォルトの名無しさんNGNG
>>335
VisualC++の初心者向けの本とか買ったのか?
それ見ながらいろいろ試してやっていきなさい

0340335NGNG
>336
どもです。それは分かるんですが、インスタンスを宣言した
ということにならず、そのくらすのコンストラクタを呼び出したことに
なっちまうんです。
newに関してはよく知らんですが見てみます。
>337
そうではないです。
そういう構成は何か支障があるんですか?
>338
正直自分でも痛感です。全然進まないし。。。
>339
参考書買おうと思っても、.NETの参考書って
なかなかないんすよね。VC++6の参考書で大丈夫ですか?
ってかそもそもC++の知識がままならないっすね・・・。
0341デフォルトの名無しさんNGNG
VC++.netでDirectX使う場合なんですが
DirectXのテンプレート使わないでライブラリの設定をするには
どうやるんでしょうか?
0342デフォルトの名無しさんNGNG
グローバル変数を "testglobal.h" で定義して
それを CTest1 や CTest1Dlg で使いたいんですが
両方の cpp の先頭に include "testglobal.h" ってやると
Test1 error LNK2005: "int abc" (?abc@@3HA) は既に Test1.obj で定義されています。
って感じにリンクエラーになります。
CTest1 のヘッダだけに include を入れても同様のエラーになってしまいます。
どうすれば CTest1 でも CTest1Dlg でも使えるようになるんでしょうか?
0343デフォルトの名無しさんNGNG
>>342
1. グローバル変数は使用するべきではない。設計を見直すこと
2. どうしてもそれがムリな場合、Singletonの採用を考えること。
3. それもむりならグローバル変数の宣言部にexternをつけること。
0344デフォルトの名無しさんNGNG
>>342
>>343の言っていることが普通だが、3.のテクニックとして。


--testglobal.h--
#if _AS_MAIN_
int abc;
#else
extern int abc;
#endif

--main.cpp--
#define _AS_MAIN_ ←その他のソースでははずす。
#include "testglobal.h"
main()
{
....
}
とすると間違い起こりにくいのだが。
なるべく使わないにこしたことはなし。
0345デフォルトの名無しさんNGNG
VC6.0 のことで質問なんですけどで 
不正処理でダウンした後、
ワークスペースを新規作成したときに 
プロジェクトの設定 >source files(等) > 一般 の
「 このファイルをビルドしない 」 の項目に
チェックが常に付くようになって、いちいちチェックはずすのめんどくさいんですけど

どこのオプションをいじれば、元のように戻るでしょうか?
0346猿NGNG
CFileDialogで詳細表示の項目にオリジナルの項目を追加したいのですが
どうすれば宜しいでしょうか?ご指導願います(名前、サイズ とか表示されているところです)
0347デフォルトの名無しさんNGNG
>>335 = >>342だろ?
急がば回れ。C言語の(以下略)
0348デフォルトの名無しさんNGNG
static LPBYTE lpBuf;
static WAVEHDR wh;
wh.lpData=lpBuf;//エラーの場所

error C2440: '=' : 'unsigned char *' から 'char *' に変換することはできません。(新しい動作 ; ヘルプを参照)
指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。

このエラーの解決法を教えてください。
0349デフォルトの名無しさんNGNG
>>348
明示的なキャストが必要。(char*)lpBuf
0350335NGNG
>347
違いますよ。。。エラーの内容も違うし。
0351348NGNG
>>349 できました。ありがとうございました。
0352デフォルトの名無しさんNGNG
CreateMutex で MUTEX を作成して、アプリの多重起動を防ぐ方法はわかりました。
ところで、自分で作成したアプリならMUTEXの文字列はわかりますが、
そうでないアプリのMUTEX文字列がわかりません。
これを調べるのにはどんな方法がありますでしょうか?
0353デフォルトの名無しさんNGNG
>>352
それは俺も知りたいなぁ

まぁ名前をできるだけ長くしておけば大丈夫だと思う
アプリケーション名、作者名、開発環境、ジャンルなどで
例:test_exe__Nanashisan__Microsoft_VisualC__GameProgram

邪道なやり方だけど多重起動を防ぐ他の方法としては
実行ファイルから多重起動防止用のファイル(test.dat)を排他モードで開きっぱなしにする
実行ファイル終了時自動的にクローズされる(実際にやったことないけど
0354デフォルトの名無しさんNGNG
名前はGUID使えばよし
0355デフォルトの名無しさんNGNG
最近VBからVCに移ってきた者です。おながいします。m(__)m
VCで自作のクラスを作り、hファイルとcppファイルに分けて
保存し、それを別プロジェクトで取り込んだのですが、コンパイル時
に「**.hファイルがありません。」と言われます。
そのプロジェクトでしかインクルードしないので、オプションの設定で
インクルードファイルのパスとして登録したくないのですが、
どうしたらいいのでしょうか?
0356デフォルトの名無しさんNGNG
絶対パスで指定する。相対パスで指定する。プロジェクトの設定でインクルードパスを追加する。
0357デフォルトの名無しさんNGNG
ムハハハッハハハハッハハハッハ!!!!!!!!!!!!!!!!!!!!
0358355NGNG
>>356
早速ありがとうございます。m(__)m
プロジェクトの設定のリソースタブのインクルードファイルのパス
でそのファイルのパスを指定したのですがやはりダメでした。。。
0359デフォルトの名無しさんNGNG
データムハハハッハッハハ!!
0360デフォルトの名無しさんNGNG
>>358
まさか
#include <ファイル名>
と言う風に開いているのではあるまいな?
0361355=358NGNG
>>360
いえ、#include "ファイル名" です。
パス指定すればコンパイルできたのですが。。。
0362デフォルトの名無しさんNGNG
(´-`).。oO(日本語ファイル名とか……
0363355NGNG
>>362
いえ、普通の英語名です。なんでだろう。。。
とりあえずパス指定でコンパイルできたので(356さんありがとう)
それで進みます。
みなさんお騒がせしてすみません。。。
0364デフォルトの名無しさんNGNG
>>358
まさかとは思うがファイルそのもののパスを指定していないだろうな?
ファイルのパスではなく、インクルードファイルが格納されているフォルダを指定するんだぞ
0365358NGNG
>>364
すいません...(TT)
いえ、インクルードファイルのパスというエディットボックスに
ちゃんとフォルダのパスを入れてるんですよぉ(C:\省略\Control\Common)。
0366デフォルトの名無しさんNGNG
マウス系のイベント欲しくて

stdafx.h に

#define _WIN32_WINNT 0x0400

付け加えたらデバッグでは動くのに
リリースでは落ちてしまいます。

何か原因考えられますか?
0367756NGNG
#define _WIN32_WINNT 0x0400
のせいじゃないと思う、なんとなく。適当でスマソ。
0368デフォルトの名無しさんNGNG
>>365
つーかちゃんとプロジェクトのワークスペースのファイルビューでソースとヘッダを追加してるか?
0369365NGNG
>>368
してます、してます(TT)。
でも初心者的な質問なのですが、ファイルを追加した時点でVCはどのファイルが
インクルードされてるかわかっているのに、なんでインクルードファイルの
フォルダを指定しないといけないのか理解できないのですが。。。
これだとあるa.hというヘッダをインクルードしてもフォルダ参照にされてなくて
もし参照されているフォルダに同名のa.hが存在したらPGするとき混乱するような
気が。。。VC歴が数ヶ月なのでアホな質問だったらすみません。VBだとファイルを
追加したらそのパスがプロジェクトファイルに書かれているのですが、
確かにVCのプロジェクトファイルには取り込んでいるファイルのパスは書かれて
いない(ファイル名のみ)ですね。
あくまで参照するフォルダを指定する必要があるんですね。。。
0370デフォルトの名無しさんNGNG
そのソースとヘッダはプロジェクトファイルと同じ場所にあるの?
0371365NGNG
>>370
いえ汎用なので別のフォルダに両方とも入っています。
0372デフォルトの名無しさんNGNG
>>371
>>369をしっかり読んでなかったよスマソ。
つーかやっぱりこの場合はフォルダ指定しなきゃ駄目なんじゃないかね。
0373365NGNG
あ、適当なこと書いてしまいました。
VCのプロジェクトファイル(dsp)も別フォルダから取り込んだファイルの
パスを相対パスでちゃんと管理していますね。
だとしたら余計インクルードパスを指定する必要がわからない。。。(TT)
0374365NGNG
>>372
何度もすみません。
VCというよりC++コンパイラの仕様なんでしょうかね。
仕様ならしようがないので納得します。
こんなオチですみません。。。
0375デフォルトの名無しさんNGNG
>>374
プロジェクトの設定⇒タブ:C/C++⇒カテゴリ:プリプロセッサ⇒インクルードファイルのパス(N)
なら相対or絶対パスでも大丈夫。
0376デフォルトの名無しさんNGNG
>>375
10レス程度前のレスも読めんのか
0377デフォルトの名無しさんNGNG
>>376
てめーこそ良く見やがれ。糞が。
>358 名前:355[] 投稿日:03/04/14 20:28
>>>356
>早速ありがとうございます。m(__)m
>プロジェクトの設定のリソースタブのインクルードファイルのパス
>でそのファイルのパスを指定したのですがやはりダメでした。。。

リソースタブで指定してるからおかしいってんだ。
ボケ、氏ネ。

0378365NGNG
>>375
ありがとうございます!
で、できました!!!

>>376
いえ、僕の間違いでした。
リソースタブでインクルードファイル指定してました。
お騒がせしてほんとにすみません。
初心者なので許してください...m(__)m >レス下さったみなさん

逝ってきます。(TT)
0379377NGNG
>>378
>ボケ、氏ネ。
これは、>>376 に対するものだから気にしなくていいよ。
>>377は日本語が不自由なようだ。
0380365NGNG
>>377
いえ僕の文章もだらだらと読みづらかったのですんまそん。
またいろいろ教えてくださいね。ではでは。。。
0381デフォルトの名無しさんNGNG
最後はマターリとしました!
0382デフォルトの名無しさん NGNG
VisualC++勉強したいけど近所の本屋にはVisualC#.NETの本しかない・・・。(TAT)
0383デフォルトの名無しさんNGNG
ちょっと大きい本屋行けばまだまだあるよ。
わかり易いかどうかは別だけど。
0384デフォルトの名無しさんNGNG
>>382
図書館は?
0385デフォルトの名無しさんNGNG
>>340
コンストラクタを呼び出されたら、クラスのインスタンスは必ずあるはずだが?
そもそもコンストラクタが呼び出されると何か問題があるの?

newも解らないようじゃ…
.NETとかVCではなくC++の参考書でも読んで勉強し直してきた方がいいですね。
0386デフォルトの名無しさんNGNG
>>379
おまえも日本語が不自由みたいだなw
0387デフォルトの名無しさんNGNG
>>384
逆にQuickCとか置いてそう
0388デフォルトの名無しさんNGNG
ejanaika ejanaika
0389352NGNG
>>354
>名前はGUID使えばよし

ありがとうございます。GUIDってなんでしょうか?
0390デフォルトの名無しさんNGNG
>>386
脳なしに言われたないわい。
0391デフォルトの名無しさんNGNG
>>389
せめて検索くらいしろボケ
氏ね
0392デフォルトの名無しさんNGNG
すいません。教えてください。

CFont m_Font;
LOGFONT lf;
m_Font.GetLogFont(&lf);

上記は正常に動くのですが、lf をポインタで宣言して、

CFont m_Font;
LOGFONT* lf;
m_Font.GetLogFont(lf);

と変えるとm_Font.GetLogFont(lf);の行でエラー
「値が割り当てられていないローカルな変数 'lf' に対して参照が行われました。」
が出るのはなぜなのでしょうか?
0393デフォルトの名無しさんNGNG
>>392
ちょっと考えれば当たり前だと思うけど……

GetLogFontは、与えられたポインタが指し示すメモリにフォント情報を格納するのね。
上の場合はlfという変数の領域に格納するから問題なし。
下の場合はいったいどこにフォント情報を格納すればいいのでしょうか?
0394デフォルトの名無しさんNGNG
>>392
エラーメッセージのそのまんまの意味。
lfが有効な値になっていない(実体を指していない)から。
つかこんなんC言語の基礎中の基礎だが大丈夫か?
0395デフォルトの名無しさんNGNG
型さえ合っていればいい、っていう考え方なんだろうね。
その関数がどんな動きをするか考えようともしない。
0396誠心君NGNG
ちょ〜素人だけどフ゜ログラマーカメラ電波機械全般に詳しい人探したいけど、どうしたらいいのおちえて?
0397デフォルトの名無しさんNGNG
外国の方が来られたようです。
0398デフォルトの名無しさんNGNG
                     |\
┌──────────┘- \
│  外国の方が             \
│                     /
└──────────┐- /
      ヽ(´ー`).ノ       |/
        (  へ)
        く
                  - = ≡三                    |\
               - = ≡三  ┌──────────┘- \
               _ = ≡三    │                     \
                ̄ = ≡三    │     いらっしゃいます       /
               - = ≡三  └──────────┐- /
        (´ー`)        - = ≡三                     |/
      ( ヽ ヽ)
       /  >
0399342NGNG
>>343-344
すみません。調べたんですが難しすぎてよくわかんないです。
もっと簡単なもんかと思ってたんですが…
でも、グローバル変数は普通使っちゃいけないんですね。
ド素人なもんでそんな事もしりませんでした。

一番わかりやすそうな
CTestApp のメンバ変数にして 他のクラスからは
AfxGetApp で取る事にしようと思います。

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

>>347
???
0400猿NGNG
>>346 です。CFileDialogを拡張して
hList = GetListViewInner();// リストビューのハンドル確保
hHead = ::GetWindow(hList, GW_CHILD);// そのヘッダーのハンドル確保
LV_COLUMNを利用して項目を追加するも詳細表示の表示項目その他を選択すると
落ちてしまいます。どなたかよきアドバイスをお願いします。
やはり1から作成するしかないのでしょうか?
0401デフォルトの名無しさんNGNG
>>400
マルチうぜー
0402デフォルトの名無しさんNGNG
#include <stdio.h>
#include <windows.h>
int main(void)
{
char c;
char a[3]={3,4,5};
char b[3]={3,4,5};
c=strcmp(a,b);
printf("c=%d\n",c);
c=lstrcmp(a,b);
printf("c=%d\n",c);
}

aとbを比較するとき、等しい場合は0が返ってくると思うのですが何故か
c=1
c=-1
になってしまいます。何故でしょうか?
0403デフォルトの名無しさんNGNG
文字列を比較する関数を使っているからです
0404デフォルトの名無しさんNGNG
>>402
文字列になっていない(終端文字がない)から
0405デフォルトの名無しさんNGNG
>>403
レスありがとうございます。おっしゃる通りでした。
0406デフォルトの名無しさんNGNG
すいません。教えてください。あるサンプルを見ていたのですが、

CString strHtmlPath = _T("C:\\tmp.html");

の _T はどういう処理をしているのでしょうか?
MSDNで調べると「データ型のマッピング」と書かれているのですが
データ型のマッピングという言葉の意味がわかりません。
_T というものはどう言うときに使うものなのでしょうか?

それから、その後に、

Navigate2(strHtmlPath, NULL, NULL);

となっているのですが、MSDNでNavigate2メンバ関数を調べると、3つにオーバーロード
されていて、どれも第一引数がポインタとなっています。
が、上記strHtmlPathは前述の通りCString型の実体として宣言されています。
これはどう言うことなのでしょうか?CString型ということが何かカギなのでしょうか?
0407デフォルトの名無しさんNGNG
>>406
MSDNにも書かれていますが、
_Tは文字列がUnicodeで記述されている場合に、
L"文字列"に置き換えて、その他の場合には
単に削除されるようです。文字列がUnicodeの場合には
L"文字列"というように最初にL(longのL)を書かないと
ダメらしい。

0408デフォルトの名無しさんNGNG
>>406
後者は
CString::operator LPCTSTR
が呼び出されているのでしょう。つまりキャストです。

しかし2番目と3番目、どっちが呼び出されているのですかね。
参照はNULLを取らないから、2番目だと思うのですが、
2番目だとすると第2、第3引数は不要ではないですかね?

0409デフォルトの名無しさんNGNG
>>393-395

レスありがとうございました。
ポインタを宣言してもそのポインタが指し示すアドレスがわからないという
ことですね。
0410デフォルトの名無しさんNGNG
>>407
レスありがとうございます。
C:\\ という記号の辺りがデータ型によっては特殊文字になってしまうのかな?
そこらへんが関係するのですね。調べてみます。

>>408
レスありがとうございます。
MSDNをみたら operator LPCTSTR が載っていました。
試しに
Navigate2((LPCSTR)strHtmlPath, NULL, NULL);
と記述しても動きました。

どうもありがとうございました。
0411デフォルトの名無しさんNGNG
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
0412デフォルトの名無しさんNGNG
>>408
あ、それからNavigate2は2番目の関数のようです。
いわれる通り、第一引数だけで残りを省略しても動作しました。
0413デフォルトの名無しさんNGNG
>>410
Unicodeご存知ないですかね。
0414デフォルトの名無しさんNGNG
メッセージループをメインループにすると時間系の関数などを使いやすくなります
が、デメリットはありますか?
0415デフォルトの名無しさんNGNG
>414
デメリットはネタに見えることです。
0416デフォルトの名無しさんNGNG
Windowsを再インストールすることになり、
いままで使ってきた Visual C++ の環境の設定を保存しておきたいのですが、
設定を保存しているファイルとかあるのでしょうか?
もしくは、レジストリでしょうか?
どなたか ご存知でしたら おしえていただくとありがたいです。

(黒字に白文字でないと、目がつかれたり、また その他ショートカット
なども専用に設定しているので、また、設定をする手間が省けるので、
今後のためにも 教えてください。)
0417デフォルトの名無しさんNGNG
>416

俺は↓のレジストリから必要な部分だけを reg ファイルにして保存してる

[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0]
0418デフォルトの名無しさんNGNG
>>416
そういうのはすべてレジストリだと思われ。
インストールフォルダ以下をざっと探ってみたけどそれらしきものは見つからなかった。

白地に黒、って疲れるよね。
俺は画面のプロパティでウィンドウの背景色を白から薄緑にしてるよ。
他のところまで変わるのはご愛嬌……
0419414NGNG
答えが得られなかったので、他のスレで質問させていただきます。
0420デフォルトの名無しさんNGNG
>>414
プッ。
0421デフォルトの名無しさんNGNG
始めたばかりの超初心者なのですがどうしてもエラーの場所がわかりません
どなたか教えていただけないでしょうか?
#include<stdlib.h>
#include<GL/glut.h>
#include<GL/gl.h>
#include<math.h>
#define PAI 3.1415926536

void display(void)
{
int x=0.5*cos(2.0*PAI*(float)/(float)10);
int y=0.5*sin(2.0*PAI*(float)/(float)10);
int z=0.0;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glBegin(GL_LINE_LOOP);
glVertex3f(x,y,z);
glEnd();
glFlush();
}
■ このスレッドは過去ログ倉庫に格納されています