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

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

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

前スレ
★初心者にVisual C++を教えるスレ★ Part3
http://pc2.2ch.net/test/read.cgi/tech/1038160750/l50

★初心者にVisual C++を教えるスレ★
http://pc3.2ch.net/test/read.cgi/tech/1023530449/l50

関連スレ
■ VisualC++(MFC限定)相談室 5■
http://pc3.2ch.net/test/read.cgi/tech/1028553308/l50

Win32API 質問箱 Build7
http://pc3.2ch.net/test/read.cgi/tech/1036654893/l50
0153デフォルトの名無しさんNGNG
>>152
IDE環境から実行してるんなら最後にgetch()でもしとけ。
0154デフォルトの名無しさんNGNG
コンソールアプリなら
コマンドプロンプトから実行すればいいんじゃね
0155147NGNG
サンキューです。
0156デフォルトの名無しさんNGNG
今までコンソールアプリを学習してきてマスターしてきたので、
WindowsのGUIアプリの作り方を学習したいのですが、
ttp://www.amazon.co.jp/exec/obidos/ASIN/4881358219/ref=pd_rhf_p_1/249-8667808-1583552
この本は、Visual C++.netでも使えますか?
0157ひよこ名無しさんNGNG
グローバル変数!グローバル変数!グローバル変数!
グローバル変数!グローバル変数!グローバル変数!グローバル変数!
グローバル変数!グローバル変数!グローバル変数!
グローバル変数!グローバル変数!グローバル変数!
グローバル!グローバル!グローバル!グローバル!ああああああああああああああああああああああああああああああああああああああああ
0158ひよこ名無しさんNGNG
参考書の例題で
OnLButtonDown()関数で得たマウスの座標をOnPaintに受け渡すために
int xpos = -100;
int ypos = -100;
とグローバル変数を宣言してるのですが
なぜ、int xpos; じゃだめなのでしょうか?
0159ひよこ名無しさんNGNG
お願いします。
0160デフォルトの名無しさんNGNG
>>158
正直、何やりたいのか判らん。
グローバル変数を何に使ってんだ?
0161デフォルトの名無しさんNGNG
なんでxposの初期化が必要なのか聞いてるんだろうが、それだけ見せられても
答えようがない。
0162デフォルトの名無しさんNGNG
ダメなことはないだろう。
何かエラー起こってんのか?

悪い質問のお手本だな
0163C++厨NGNG
グローバル変数は 糞!
0164158NGNG
int xpos = -100;
int ypos = -100;

void CS17Wnd::OnPaint()
{
CPaintDC dc(this);

dc.Ellipse(xpos - 20, ypos - 20, xpos - 20, ypos - 20)
}
void CS17Wnd::OnLButtonDown(UINT nFlags, CPoint point)
{
xpos = point.x;
ypos = point.y;

invalidate();

}
このint xpos = -100;の-100はどういうことなんでしょうか?
なぜ-100なのかが分かりません。
宜しくお願いします。

0165デフォルトの名無しさんNGNG
今からVCやろうと思っているんだけど、やるなら6.0じゃなくてやっぱ.NETかな?
0166デフォルトの名無しさんNGNG
>>164
適当。

>>165
何をやりたいかもわからないのに答えようがないと思う。
0167デフォルトの名無しさんNGNG
>>164
はっきり言おう。
お前の脳みそが理解できん。
自分でコーディングしておいて「分かりません」?

病院いって来い・。
0168デフォルトの名無しさんNGNG
>>164
OnLButtonDownが呼ばれる前にOnPaintが呼ばれたらどうなるか小一時間考えるといい。
0169デフォルトの名無しさんNGNG
>>167
参考書の例題と書いてるだろう。
このスレは質問の仕方も悪けりゃ答える奴も無能かよ
0170デフォルトの名無しさんNGNG
全然初心者向けの回答じゃないな
0171デフォルトの名無しさんNGNG
-100の意味を聞いてるんだからテキトー。これ。

はい次↓
0172158NGNG
>>168
int xpos;で試したら-100の意味が分かりました。
ありがとう。
0173158NGNG
>>171
適当なわけじゃなかったよ
0174デフォルトの名無しさんNGNG
我思う。試してから質問しろと。
0175158NGNG
>>174
そうでした。すいません
0176デフォルトの名無しさんNGNG
この板自体来るの初めてなのだろうか。
元質問以外はなるべくsageてね。
0177158NGNG
失礼しました。今後質問時は気をつけます
0178デフォルトの名無しさんNGNG
実行しているファイルと同じディレクトリにある設定ファイルを読みたいので
すが、ファイル名だけでオープンしようとすると上手くいきません。
そこで、実行ファイルのあるディレクトリを取得したいのですが可能でしょうか?
0179デフォルトの名無しさんNGNG
検索したらすぐ出てきたよ
0180デフォルトの名無しさんNGNG
>>178
質問する前に検索しろよ
http://www.google.com/search?q=Windows+%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA+%E5%8F%96%E5%BE%97
0181デフォルトの名無しさんNGNG
>>180
ありがとうございます。
10分くらいは検索してみたのですが・・・。多謝です。
0182デフォルトの名無しさんNGNG
いったいどんなキーワードで検索したやら(藁
0183デフォルトの名無しさんNGNG

Windowsディレクトリって c:\windows でしょ?
>>178の答えになってるの?

0184デフォルトの名無しさんNGNG
でも、結局よく情報抜き出せませんでした(涙)
GetCurrentDirectoryで出てくるのは、何か実行ファイルがおいてあるのとは
別のディレクトリが取れているようでして・・・。
どの命令を使えばいいのでしょうか?(ダメ
0185デフォルトの名無しさんNGNG
すみません、デバックで動かしていたのが原因だっただけみたいです。
逝ってきます。
0186デフォルトの名無しさんNGNG
>>185
GetCommandLine
現在のプロセスのコマンドライン文字列へのポインタを取得します。

LPTSTR GetCommandLine(VOID)

これでフルパスが取れるみたいです。
試してみたら、

"D:\TEMP\TEST\Debug\TEST.exe"

こんな感じになりました。



0187デフォルトの名無しさんNGNG
VC++6.0でプログラムを作成しています。
ダイアログベースのアプリで、最小化のタイミングでタスクトレイに
表示したくOnSyscommand関数で最小化のイベントを取り、メインダイアログを隠したい
のですが、OnSyscommand関数がデフォルトで出来ていません。
ユーザーが作成するものなのでしょうか?
生成方法を教えて下さい。
宜しくお願いします。
0188デフォルトの名無しさんNGNG
>>183
Windows ディレクトリ 取得
Windows入れないと別のOSも含まれるんじゃないの?
カレントディレクトリにしたほうがいいんだろうけど
0189デフォルトの名無しさんNGNG
>>187
オーバーライドの方法はヘルプ読め
0190178NGNG
>>186
おお、そんな命令が。ありがとうございました。
0191デフォルトの名無しさんNGNG
>>187
ダイアログの右上の最小化ボタンの動作をフックして
独自の動きをさせたいってことなの?
メインダイアログを隠すってことの意味がよくわからないんだけど・・。
隠す=最小化/アイコン化?

0192187NGNG
>>189
すみません、オーバーライドをすればよいということでしょうか?
0193デフォルトの名無しさんNGNG
>>192
VCならクラスウイザード使えばいいだろ。
0194デフォルトの名無しさんNGNG
つーか回答者もネタ?
GetModuleFileNameだろ。<アプリと同じフォルダ
0195187NGNG
>>191
そうです。
最小化して、タスクトレイにアイコン化することが目的です。
showwindow(SW_HIDE)
でダイアログを隠そうとしております。
0196187NGNG
>>193
OnSysCommandが見つからないのです。
OnCommandならあるのですが…。
0197デフォルトの名無しさんNGNG
>>195
MFC App Wizard (exe) プロジェクト
で作成すると、ダイアログクラスに
CTestDlg::OnSysCommand()
というオーバーライドされた、メンバ関数が自動的に
作成されるみたいだけど、これを改造するのじゃ
いかんの?

この関数では、基底クラスのCDialog::OnSysCommand()に
メッセージをそのまま渡しているみたいですが。

0198187NGNG
>>197
それが自動的に作成されなかったようです。
追加で作成することは不可能なのでしょうか?
0199デフォルトの名無しさんNGNG
ちなみに検索の仕方はこんな感じで
http://www.google.com/search?hl=ja&inlang=ja&ie=Shift_JIS&q=%83A%83v%83%8A%83P%81%5B%83V%83%87%83%93%81@%83t%83H%83%8B%83_%81@%8E%E6%93%BE%81@C%2B%2B&lr=
0200デフォルトの名無しさんNGNG
>>198
ClassWizardでWM_SYSCOMMANDのハンドラ作れ
0201デフォルトの名無しさんNGNG
>>198
左上のメニューのバージョン情報は
どうなってますか?
IDD_ABOUTBOXダイアログを
オーバーライドされたOnSysCommand()で
起動しているようですが。

0202187NGNG
>>201
すみません、メニューのバージョン情報とはどこのことでしょうか?
VS_VERSION_INFOならあります。

>>200
クラスウィザードからハンドラの追加の方法がわかりませんでした。
イベントから追加しようとして、
SYSCOMMANDが左の蘭になく、誤ってWM_CANCELMODEを追加してしまって
消せなくなってしまいました(鬱
0203デフォルトの名無しさんNGNG
>>194
これも良いみたいですね。
char str[1024];
GetModuleFileName(NULL, str, 1024);
cout << str << endl;

で結果が

D:\TEMP\TEST2\DEBUG\TEST2.EXE

こうなりました。こっちの方が汎用性が高いかな。

0204デフォルトの名無しさんNGNG
つーかClassWizardの使い方をWEBなりMSDNなりで調べてこい。
それですべて解決だ。
0205デフォルトの名無しさんNGNG
>>202
ダイアログ左上のアイコンを左クリックすると、
メニューが出ませんか? その中でバージョン
情報の表示を選択できますが。


0206デフォルトの名無しさんNGNG
>>203
つーかそのやり方が定番だから。
0207デフォルトの名無しさんNGNG
>>202
class view のクラス名の上で右クリック
→メッセージハンドラの追加
でできますよ。
0208187NGNG
>>205 >>204
イベントからOnSysCommandを追加することができました。
フィルタのところでwindowを選択することで出てきました。
どうもありがとうございました。
0209デフォルトの名無しさんNGNG
>>207
これで、フィルタを「ウィンドウ」にすると、
WM_SYSCOMMAND のハンドリングが
できる雰囲気。

0210名無しさんNGNG
COMポートからデータを読み出すプログラムが組みたいのですが、どうもうまくいきません。
具体的にいうと「フフフフフフフフフフフフフフフ・・・」てな感じです。どうしたらいいのでしょう?
明日の朝までに組まなきゃいけなくて、四苦八苦してます。
0211名無しさんNGNG
ちなみに、API使ってます。
0212デフォルトの名無しさんNGNG
初期化されてないとフフフフになるよ
0213名無しさんNGNG
初期化ですか?いまいちやりかたが・・・(汗
0214デフォルトの名無しさんNGNG
> フフフフフフフフフフフフフフフ・・・

ストーカーからの電波を受信しています。

つーか、NT とかだと、確保してから 1 度も使われてないメモリ領域は 0xCC で
塗りつぶされている。
それを読んでしまっているのだから、データをきちんと COM ポートからメモリに
読み込めていないんじゃないか?
0215デフォルトの名無しさんNGNG
塗りつぶされるのはNTとかじゃなくてデバッグ時だった気が。
0216デフォルトの名無しさんNGNG
俺もデバッグ用にVCが埋め込んでるんだと思ってた
0217デフォルトの名無しさんNGNG
>>210
できもしない仕事を請け負ったんだから自業自得ですな
0218名無しさんNGNG
成り行き上そうなってしまって・・・(泣
一応フの羅列は回避できました。
でも、途中で読みに行かなくなっちゃって・・・
0219デフォルトの名無しさんNGNG
>>218
( ´_ゝ`) フーン
0220デフォルトの名無しさんNGNG
質問なんですが・・

CPoint t1,t2,t3;
t1=(10,10); t2=(9,10); t3=(10,9);

とあったとき、この変数3つが、近い場所にあると判断させるにはどういうプログラミングをすればいいのでしょうか…
どうかご教授お願いします。
0221デフォルトの名無しさんNGNG
>>220
単純に距離を求めたらいかんの?
0222デフォルトの名無しさんNGNG
>>215-216
ごめん、そうみたい。
NT のメモリ領域の初期化は 4 バイトくらいの周期だった。
0223デフォルトの名無しさんNGNG
言語や開発環境のスレで、ロジックまで教えるべきなのかどうかいつも
迷うのだけれども
0224デフォルトの名無しさんNGNG
>>220
「近い」の定義がよく分からんぞ。
とりあえず適当に決めた一定値以内の距離だったら近いとすれば?
0225デフォルトの名無しさんNGNG
>>221、224
 近い、という定義はだいたいxとyの座標がそれぞれ0〜1ずれていても同じとみなしたいのです…
 3つの座標は、ぞれぞれ3つの辺の始点と終点を示しています。
 2つの辺の始点か終点が重なれば一つの頂点としてみなしたいのです。
 慌てていたので、ちょっと上の質問例が違っていました。訂正します
 自作のプログラムでは線分を切り出した時にこのような座標の取り方をしたので、
 これをうまく使って「この3辺は三角形だ」と認識させたいと考えています。

#define siten 0
#define syuten 1

CPoint t1[2],t2[2],t3[2]; //一辺の始点と終点の座標を持つ
t1[siten]=(0,0); t1[syuten]=(10,0); // "1"の辺の始点と終点
t2[siten]=(10,1); t2[syuten]=(4,8); // "2"の辺の始点と終点
t3[siten]=(0,1); t3[syuten]=(4,7); // "3"の辺の始点と終点

 1111111111
3 2
3 2
3 2
3 2
3 2
3 2
32
2

よろしくお願いします。
0226デフォルトの名無しさんNGNG
>>225
各点間の距離をそれぞれ求めてそれが0〜1なら重なってるフラグ立てりゃいいじゃん
0227デフォルトの名無しさんNGNG
あ、三角形が潰れてしまった…鬱氏
実際に紙に書いてもらえればわかりやすいと思います…
ほんとすいません つД;)

0228デフォルトの名無しさんNGNG
>>226
で良いんじゃないの? ダメ?

0229デフォルトの名無しさんNGNG
>>178
>実行しているファイルと同じディレクトリにある設定ファイルを読みたいので
>すが、ファイル名だけでオープンしようとすると上手くいきません。

こんな感じに配置してVCから実行してるのなら
C:\VC\test\Debug\test.exe
C:\VC\test\Debug\test.ini

次のようにやってみて
C:\VC\test\Debug\test.exe
C:\VC\test\test.ini

VCから実行すると実行ディレクトリは実行ファイルがあるところじゃなく
プロジェクトファイルがあるところになっちゃうかね

絶対パスだと読み込めたところをみるとたぶんこれが原因じゃないかな?




余談だけどWritePrivateProfileStringなんかの設定ファイルを書き込むやつは
ファイル指定が "test.ini" と ".\\test.ini" じゃ動作が異なるから気をつけて
前者だとウィンドウズディレクトリに設定ファイル作っちゃうから
0230デフォルトの名無しさんNGNG
>>227
しつこい

>>229
プロジェクト→設定のデバッグタブで作業ディレクトリ変えりゃ済む話でないの?
0231デフォルトの名無しさんNGNG
パスの質問はもう答え出てるから。
0232デフォルトの名無しさんNGNG
マイクロソフトの"マイコンピュータ"や"ローカルディスク"等の

標準的なアイコンを自分のソフトに組み込んで使用したいのですが、

著作権はどのようになっているのでしょうか?(自分のソフトに組み込んで使えますか?)

また、二次使用できる場合、どこで配布されているでしょうか?
0233デフォルトの名無しさんNGNG
毎回読みこめば?
0234デフォルトの名無しさんNGNG
あほな質問ですまにゅ。
VC++6.0で独自のインターネットブラウザって作成可能なの?
0235デフォルトの名無しさんNGNG
論理的には可能ですか。
0236デフォルトの名無しさんNGNG
作れるけどライセンスの問題があるから
IEコンポーネントを使う
0237デフォルトの名無しさんNGNG

ライセンスってJPEGの?
独自ブラウザは不可能なんですかね?

0238デフォルトの名無しさんNGNG
テキストベースにする裏技
0239デフォルトの名無しさんNGNG

MFCのCEdit なんですが、コントロールから
改行する方法ってどうしたら良いんでしょうか?

リソースエディタで複数行と、改行を許可は選んであります。

それで、ReplaceSel で文字を書いたのですが、
どうも改行されない。\n では改行できないんでしょうか?
CString からDDXを使う方法もありますが、後学のためにも
コントロール自体で操作したいと考えています。

0240デフォルトの名無しさんNGNG
>>239
CRLF (\r\n) じゃなかったっけ
0241デフォルトの名無しさんNGNG
改行は \r\n
0242デフォルトの名無しさんNGNG

ども。ありがとうございます。
\r\n
で解決しました。

0243デフォルトの名無しさんNGNG
コードを見やすくしたいんですけど、

class CDInput8{...};
void* pvRef;

として、

((CDInput8*)pvRef)->DInput->CreateDevice(...);


これ、綺麗になりませんか?
0244名無し@沢村NGNG
>>243
static_cast<CDInput8*>(pvRef)->DInput->CreateDevice(...);
0245デフォルトの名無しさんNGNG
見やすくしたいとはこれ如何に
0246デフォルトの名無しさんNGNG
CDInput8* pDInput8 = static_cast<CDInput8*>(pvRef) ;
CDInput* pDInput = pDInput8->DInput ;
pDInput->CreateDevice(...);

駄目か。かえって見づらい?
->を何段も重ねるの好きじゃないんだが。
0247デフォルトの名無しさんNGNG
まったくの初心者がVisual C++ .NETを購入して学習していくのは無謀ですか?
(いちお、古いJava本で配列・演算・インクルの概要は把握しました・・・)

そのうち、新しい2chブラウザー(低機能)を作ったり
ネットワークゲーム(ターン制)を作ってみたいです

VB.Netの方が初心者向きですか?
0248デフォルトの名無しさんNGNG
CDInput8のインラインメンバ関数に
0249デフォルトの名無しさんNGNG
>>247
初心者と言ってもどのレベルか分からん。
C++が分からんのなら無謀!
0250由美(ネカマ1号機)NGNG
変な質問ですいませんが…
Visual C++って何ができるんですか?
0251デフォルトの名無しさんNGNG
>>247
VB6にしなさい。VB.netは別物。
0252デフォルトの名無しさんNGNG

これから学習するんなら、C++が良いんじゃないの?
Javaやってんなら、C++にも慣れやすいのでは?

■ このスレッドは過去ログ倉庫に格納されています