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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/07/31(木) 18:02:28
Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう、特にWindowsForm、MFC、Win32アプリケーションの区別。
・できるだけ具体的に。

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

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

過去スレ、関連スレなどは>>2-5辺り。
0153デフォルトの名無しさん2008/08/14(木) 02:58:31
USBから受信したでーた?

キー入力フックして入力内容をだますってことか?
それともソフトがキーが入力されたように振舞うってことか?
それなら最悪DDKとかめんどくさいのに手を出さないとだめかもな
どっちにしても何が言いたいのかよくわからん
エスパーな人よろしく
0154デフォルトの名無しさん2008/08/14(木) 09:33:08
別に受信するほうはすでにあるんだろ。
キーを送るのはウィンドウに限ればメッセージ送るだけでいいかもしれない。
0155デフォルトの名無しさん2008/08/14(木) 11:44:08
オートマウスでも作る気か?
MMORPGとかで不正行為する用か、三国人!
0156デフォルトの名無しさん2008/08/14(木) 16:24:45
初心者の妄想質問です。
例えば、1つのアプリケーションなのですが扱う機能が違う為に2つのウィンドウを開いて同時に使う、という場合には
どのようにしたらいいのでしょうか?

同じプロジェクト内ではなく、別々のプロジェクトでソースを書いていかなくてはならないのでしょうか?
またその際は、ハンドルの名前も別々にしなくてはならないのでしょうか?
0157デフォルトの名無しさん2008/08/14(木) 17:04:09
>>156
「一つのアプリケーション」が「一つの実行モジュール」を指すなら、逆に寧ろプロジェクトは一つにしないと(一般的には)ダメ。
一つのソースで複数のウィンドウの面倒を見るか、別のソースに分けるかは、使用するライブラリ次第。
# まぁ、普通分けるだろうけれど。
つーか、扱う機能が違うのに「一つのアプリケーション」にする理由がないなら分けた方が使い易くないか?
0158デフォルトの名無しさん2008/08/14(木) 17:28:32
>>152
ゲームパッドの入力をキー入力に変えたいのか?
だったら無理せずJoyToKey使え。
0159デフォルトの名無しさん2008/08/14(木) 20:53:15
>>153
PICとPCをUSBで接続していて、親指先が+で他4本が−のスイッチで組み合わせによるPCへのキー入力をしたいのですが、
PICまではできてるんですが、PCのキーボードでキーを押した時と同じようにPC上に送出する関数というかメッセージというか流れが知りたいのです。
0160デフォルトの名無しさん2008/08/14(木) 21:00:26
>>154
その辺の流れがちょっとわからないのですが、キーダウンメッセージはアクティブなウィンドウに対して受取分岐がソフト上にある場合に機能するもの
なんですよね。キーが押されたメッセージ事態を作り出すにはどうすればいいんでしょうか?
0161デフォルトの名無しさん2008/08/14(木) 23:47:50
Visual C++ 2008 Express Editionを落としてインスコしてて、諸事情でアンスコしてインスコし直そうと思ったのですが
どれをアンスコすればいいのかわかりません
C++をアンスコすれば全てアンスコされるのではなく、C++と一緒に複数同時にインスコされてました
それぞれ個別にアンスコしないといけないようです
C++ アンスコでぐぐっても的したページがヒットしません
どれを消すべきかわかる方いましたらお願いします
0162デフォルトの名無しさん2008/08/14(木) 23:48:28
アクティブじゃなくてフォーカスのあるウインドウ
0163デフォルトの名無しさん2008/08/14(木) 23:49:44
アンダースコートがどうしたって?
0164デフォルトの名無しさん2008/08/15(金) 01:35:20
アポリケーションの追加と削除で、VCEEとインストロール日時が同じで、見覚えの無いやつを全部消しちゃえば?
0165デフォルトの名無しさん2008/08/15(金) 01:56:31
SQL Server CompactとWindows SDKとあと何があったっけ?
0166デフォルトの名無しさん2008/08/15(金) 07:03:44
>>161
Microsoft .NET Framework 3.5
Microsoft .NET Framework 3.5 Language Pack - 日本語
Microsoft Visual C++ 2008 Express Edition - 日本語
Microsoft Windows SDK for Visual Studio 2008 Express Tools for .NET Frameword
Microsoft Windows SDK for Visual Studio 2008 Express Tools for Win32
Microsoft Windows SDK for Visual Studio 2008 Headers and Libraies
MSDN Library for Microsoft Visual Studio 2008 Express Edition
Microsoft Silverlight
01671612008/08/15(金) 09:12:27
(TдT)アリガトウございました無事インスコ出来ました
01681212008/08/15(金) 16:16:15
コードに問題があれば指摘してください。
以下のページに記載されている方法を試しましたが、効果がありません。
http://homepage3.nifty.com/endou/tips/04/tips39.htm
本体のウィンドウでは、このような現象は起きません。
開発環境はVC++ 2008 Express Editionです。WindowsXP SP3で動作確認しています。
0169デフォルトの名無しさん2008/08/16(土) 13:39:15
これまではC言語の学習用にEmacsを使用していたのですが、今回VisualStudio2008を購入しました。
そこで質問なのですが、VisualStudio2008にはEmacsのようにtabキーを押したときに必要なだけ字下げする機能がありますか?
0170デフォルトの名無しさん2008/08/16(土) 20:18:08
複数行選択時の、TAB、ShiftTABの動作が近い?
0171デフォルトの名無しさん2008/08/16(土) 20:22:56
>>169
とりあえずキーバインド設定は変更したのか?
0172デフォルトの名無しさん2008/08/16(土) 20:48:58
ちょっと質問があります。

std::cout << std::toupper('a') << '\n';
std::cout << toupper('a') << '\n';

この二つは何か違うのでしょうか?
上のやつは #include <cctype> しないといけないようだが・・・
01731692008/08/16(土) 21:20:11
キーバインド Visual Studioで検索したらやり方がわかりました。
どうもありがとうございました。
01741692008/08/16(土) 22:53:11
インデントはEmacsのようにできるのですが、
データの保存など他のキーの設定もEmacsのものになってしまいました。
インデントだけをEmacsのものにする方法はありますか?
0175デフォルトの名無しさん2008/08/17(日) 02:19:20
そうきたか、
コマンド検索のとこに「インデント」っていれて
適当なコマンドと設定を入れ替えろ

あと、プログラマ志望なら
今のうちにEmacs操作覚えた方が良いぞ、楽だから
vi派って訳じゃないんだろ
0176デフォルトの名無しさん2008/08/17(日) 02:51:42
( ´д)ヒソ(´д`)ヒソ(д` )今時Emacsだって・・・
0177デフォルトの名無しさん2008/08/17(日) 04:41:46
最近の流行はなんなんだ?
0178デフォルトの名無しさん2008/08/17(日) 06:58:46
スレ違いかもしれませんが、教えてください。
Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)をダウンロードしてきて
インストールしたのですが、インストールディレクトリが”一番空き容量が多いドライブの直下”に
インストールされてしまいます。これは仕様なんでしょうか?
0179デフォルトの名無しさん2008/08/17(日) 10:39:00
テンポラリ展開じゃなくて?
0180デフォルトの名無しさん2008/08/17(日) 11:17:04
>>179
一時ファイルのようで、展開されたファイルは削除しても問題ないっぽいです。
お騒がせしました
0181デフォルトの名無しさん2008/08/17(日) 13:53:54
Visual C++ 2008 Express Editionで、
ファイル → 新規作成 → プロジェクト → Win32 コンソールアプリケーション

プロジェクト → 新しい項目の追加 → C++ファイル

として、
stdio.hをインクルードして文字列を表示させる簡単なコードを書いて実行したのですが、
コマンドプロントみたいなウィンドウが一瞬開いてすぐに閉じてしまったため
文字列をよく確認出来ませんでした。

どうしたら開いたままにしておけるのでしょうか?
0182デフォルトの名無しさん2008/08/17(日) 14:31:25
あるあるw
どうするんだろ

出力ウィンドウにも何も出ない?
0183デフォルトの名無しさん2008/08/17(日) 15:16:03
「○○を読み込みました」・「シンボルが読み込まれました。」
っていうのが4行と、
あともう1行、
「プログラム○○はコード0(0×0)で終了しました。」
っていうのが出ます。
コード0っていうのはreturn 0にしたからだと思うんですが…。
0184デフォルトの名無しさん2008/08/17(日) 15:19:07
邪気眼がどーのこーの
0185デフォルトの名無しさん2008/08/17(日) 15:35:48
>>181

同じく初心者で、昨日から始めたんですが
returnの前に、文字を入力する関数を入れることで対処してます。
Cだと
scanf("%d",n);
とかなんですが。
01861852008/08/17(日) 15:38:07
ごめん。
今見たら
scanf("%d",&n);
でした。もちろん、先にnは宣言するものとして。
でもC++だと入力するための関数違うと読んだ気も。
0187デフォルトの名無しさん2008/08/17(日) 15:40:48
Ctrl+F5でいいじゃね?
0188デフォルトの名無しさん2008/08/17(日) 15:45:39
そうか、、、
とりあえず、
・確認したいだけなんだったら、stderrでメッセージ出せる
・あと処理の最後に無限ループ入れる
0189デフォルトの名無しさん2008/08/17(日) 15:46:25
>>187
ガチで知らなかったんだがw
0190デフォルトの名無しさん2008/08/17(日) 15:50:17
全ての質問が初心者ではなく初心者を装った釣師によるものだと仮定して
いかにうまくボケるかを競いあう
ここはそういうスレの一つだと思い込んでいる
0191デフォルトの名無しさん2008/08/17(日) 16:01:39
>>190
ガチで知らなかったんだがw
01921812008/08/17(日) 16:30:01
>>185,>>187,>>188
出来ました!ありがとうございます!
0193デフォルトの名無しさん2008/08/17(日) 16:42:45
dialogBoxにPostMessageしても届かないんだが、ちなみに
PostMessage(hDlg,0x500,123,456);
なぜだ?
0194デフォルトの名無しさん2008/08/17(日) 16:52:28
お前ぜんぶ聞く気だろ
調子乗んな
0195デフォルトの名無しさん2008/08/17(日) 20:53:27
アふぉはだまっとれ
0196デフォルトの名無しさん2008/08/18(月) 10:52:14
>>185
getchar()でいいじゃん。わざわざ変数を用意する必要があるscanf()を使うのはナンセンスだ。

>>188
無限ループってあんた、エコじゃないな。

>>181
cmd動かしておいて、コマンドラインから動かすって手もあるよ。
0197デフォルトの名無しさん2008/08/18(月) 10:58:29
昔から、return 0; の部分にブレークポイント置いている。
まあデバッグ必要ないときはCtrl-F5だが。
0198デフォルトの名無しさん2008/08/18(月) 17:12:40
_findfirst("tes*.tx", &searchData) でファイルを検索した場合には
test.tx は見つかり test.txt は見つかりません。
しかし、_findfirst("tes*.txt", &searchData) で検索した場合には
test.txt も test.txtx も見つかります。
Q1. ドキュメントには書いてないのですが、この関数は拡張子を3文字しか見ないのでしょうか。
Q2. 4文字以上の拡張子に対応したファイル検索関数にはどんなものがありますか。
0199デフォルトの名無しさん2008/08/18(月) 17:45:36
>>196
>getchar()でいいじゃん。

あらほんと。今度からこっち使います。
ありがとう。
0200デフォルトの名無しさん2008/08/18(月) 18:39:01
VC使ってるならsystem("pause");でいいかと
0201デフォルトの名無しさん2008/08/18(月) 20:15:09
変なクセつけちまうから
getchar()で良いでしょ
0202デフォルトの名無しさん2008/08/18(月) 23:10:13
>198
たしかWindowsが隠して格納してる8.3なファイル名がひっかかるんだな。
Short Filenameってやつ。findfirstしてあらためて排除するとか。
0203デフォルトの名無しさん2008/08/19(火) 02:02:38
メソッド名の頭にアンダーバー付いてるのとか
何か意味があるのですか?
0204デフォルトの名無しさん2008/08/19(火) 02:21:43
ttp://msdn.microsoft.com/ja-jp/library/45aft37a.aspx
0205デフォルトの名無しさん2008/08/19(火) 12:28:52
ありがとう
0206デフォルトの名無しさん2008/08/20(水) 05:52:40
Dドライブに今までなかったファイルがいくつか作成されてる。。。
Eula.1041.txt
globdata.ini
install.exe
install.ini
install.res.1041.dll
VC_RED.cab
VC_RED.MSI
vcredist.bmp
しかも作成日時が2007‎年‎11‎月‎20‎日。
二週間ほど前にPC買い替えたばかりだからこの作成日時はおかしいと思う。
調べてたらvisualC++が関係してるっぽい。
これなに?
0207デフォルトの名無しさん2008/08/20(水) 08:00:59
インストーラが一時ファイルを展開したんだろ。
0208デフォルトの名無しさん2008/08/20(水) 09:56:20
VS2008のインストールしたんだろうな
0209デフォルトの名無しさん2008/08/20(水) 11:36:28
インストーラって怖いな
0210デフォルトの名無しさん2008/08/20(水) 12:32:56
やっぱりか
2005は初めから入ってたんだけど、これって勝手に更新したりするものなの?
2008なんてインストールした覚えがないし、気味わるいからアンインストールしたいんだけど。。
0211デフォルトの名無しさん2008/08/20(水) 12:47:25
別に一時ファイルだし勝手に消せば?
とりあえずそのファイル群は再配布可能なやつだと思うから
なんかのソフトが必要としたんじゃないの?
2008というのは2007/11/20だからそう思ったんだけど。
0212デフォルトの名無しさん2008/08/20(水) 13:03:48
なんかのソフトが必要としてるんならアンインストールしないほうがいいね。。
一時ファイルだけ削除しておく。
>>207-210サンクス
0213デフォルトの名無しさん2008/08/20(水) 13:03:53
> 2005は初めから入ってたんだけど、
VisualStudioプリインストールなんてどこで売ってるの??

> これって勝手に更新したりするものなの?
しない。
0214デフォルトの名無しさん2008/08/20(水) 13:06:36
visualstudioというのははいってなかった。
visualC++2005Redistributableというのが初めからはいってた。
0215デフォルトの名無しさん2008/08/20(水) 13:12:58
それはランタイム。VCどころかパソコン初心者レベルの話になってきたな・・・
0216デフォルトの名無しさん2008/08/20(水) 19:01:21
そのランタイムというやつは消しても問題ない?
0217デフォルトの名無しさん2008/08/20(水) 19:23:17
消すな。最初から入ってたということは他のソフトが使ってる。
0218デフォルトの名無しさん2008/08/20(水) 20:57:37
Visual Studio2003でWindowsプログラムを作ってるんですが、
よくバグってメモリリークしたり、既に解放済みのアドレスを解放したりしてます。
そういうのって、PCに悪影響は無いんでしょうか?
0219デフォルトの名無しさん2008/08/20(水) 21:11:17
悪影響はあります
0220デフォルトの名無しさん2008/08/20(水) 21:28:19
>>217
最初から入ってたのは2005。
今日気づいたら2008がインストールされてた。
まぁ気にしないことにする。
0221デフォルトの名無しさん2008/08/20(水) 21:35:34
>>220だけど自己解決。
BUFFALOの
ttp://buffalo.jp/products/catalog/multimedia/chideji/streamtest.html
をインストールしたときに一緒についてきたみたい
0222デフォルトの名無しさん2008/08/20(水) 22:02:47
>>220
気付いたらってどういう意味だおいw
0223デフォルトの名無しさん2008/08/20(水) 23:41:28
>>222
もう放っとこうぜ

>>218
OSがうまくやってくれる、たぶん
0224デフォルトの名無しさん2008/08/21(木) 13:36:39
ちょっとよろしいでしょうか?
MFCを勉強しようと思って
http://www.kumei.ne.jp/c_lang/mfc/mfc_01.htm
のページのコードをコンパイルしてみて
うごいたのですが
プロジェクトの設定は「MFCを使用しない」に
なっていても問題ないみたいなのです。
MFCを使っているのに「MFCを使用しない」でよいのでしょうか?
0225デフォルトの名無しさん2008/08/21(木) 13:48:07
>>224
そんな設定どこにあった?
基本的にMFCを使うかどうかはヘッダのincludeとリンクするライブラリで決まる。
0226デフォルトの名無しさん2008/08/21(木) 14:05:37
>>225
なるほど。MFCを使用するかしないかを変更することによって
リンクするライブラリやコード生成のオプションが変わるみたいです。
なのでMFCを使用するかしないかの設定はあくまで
テンプレートということですね。
やっぱウィザードに頼っているとだめっすね。
0227デフォルトの名無しさん2008/08/21(木) 14:16:49
やべー
なんかMFCマスターした気がする
0228デフォルトの名無しさん2008/08/21(木) 14:19:55
おめでとう
0229デフォルトの名無しさん2008/08/21(木) 14:26:17
ありがとう
0230デフォルトの名無しさん2008/08/21(木) 14:38:50
オナニーマスター黒沢
0231デフォルトの名無しさん2008/08/21(木) 14:57:30
http://fatalita.sakura.ne.jp/3DLib/Ref/_T/
にCStringはマルチスレッドに対応してないって書いてあるんだけど
マジで?
やべーじゃん。
0232デフォルトの名無しさん2008/08/21(木) 15:43:32
>STLのstring型やwstring型は利便性においてはCString型にあるマルチバイトとユニコードの相互変換機能が無い分劣りますが、
>スレッドセーフである為classやtypedef内の変数に宣言するのに向いています。
>マルチスレッドで文字列を扱う際にはstring型かwstring型を使いましょう。

大嘘やん。標準にはスレッドの概念が無いし、スレッドセーフかどうかは実装依存になる。
CStringも使い方さえ間違わなきゃマルチスレッドで使える。
ttp://msdn.microsoft.com/ja-jp/library/h14y172e.aspx
0233デフォルトの名無しさん2008/08/21(木) 15:47:26
なーんだ
0234デフォルトの名無しさん2008/08/21(木) 15:48:29
そして、VC++のstd::stringはどうかというと、こうなっている。
http://msdn.microsoft.com/ja-jp/library/c9ceah3b.aspx
ちゃんとやらないとだめだという点でCStringと互角。
0235デフォルトの名無しさん2008/08/21(木) 19:32:26
charに0〜255の数値を設定することはできるようですが
char[]にintやfloat等の数値を設定したり取得するにはどうすればいいですか?
0236デフォルトの名無しさん2008/08/21(木) 19:39:53
union使うかビットシフトかキャストで。
目的による。
0237デフォルトの名無しさん2008/08/21(木) 20:50:24
型について学び直せ。
0238デフォルトの名無しさん2008/08/21(木) 21:13:58
文字列として受け取って変換するとかの話?
0239デフォルトの名無しさん2008/08/21(木) 23:59:01
>>236

int i=1234;
char ic[50];
ic = (char[50])i;

こうですか?
キャストできませんでした
0240デフォルトの名無しさん2008/08/22(金) 00:28:12
一体何がしたいんだ
0241デフォルトの名無しさん2008/08/22(金) 01:03:46
冗談きつすぎるだろこれは…
0242デフォルトの名無しさん2008/08/22(金) 09:30:00
int型をchar型に入れなきゃならない理由を述べよ。
0243デフォルトの名無しさん2008/08/22(金) 09:46:01
>>239
あえてそういう風にキャストしたいのなら、例えば・・・
*(int *)&ic[0] = i;
とか
0244デフォルトの名無しさん2008/08/22(金) 10:00:39
&と[0]は説明のためにあえて入れただけでなくてもいける
0245デフォルトの名無しさん2008/08/22(金) 10:10:37
memcpyでいいじゃん
0246デフォルトの名無しさん2008/08/22(金) 18:43:37
>>242
ネットでデータ送るときに、パケットサイズを固定長にしたいときとか
0247デフォルトの名無しさん2008/08/22(金) 18:54:16
>>243
ありがとうございます。 下記のようにしたところ

int i=256;
char ic[50];
*(int *)&ic[0] = i;

char[]の最初の4バイトにそれらしい値が入るようになりました
int=32bit char=8bit なので期待通りの結果が得られてる ような気がします
これはcharの参照をintのポインタのポインタにキャストしてるんでしょうか?
char[]に入れることはできましたがintに戻すにはどうすればいいかわからんので
もっと勉強が必要なようです ありがとうございました
0248デフォルトの名無しさん2008/08/24(日) 09:34:37
C++を仕事で扱い始めて自宅でも勉強したいと思っています。

そこで質問なのですがVISUAL STADIOの学生用の安いものとそうでないものとの間で機能に差はありますか?
0249デフォルトの名無しさん2008/08/24(日) 09:46:05
>>248
C++の勉強よりも、英語を始めとした一般常識を身につけることをこそ、お勧めします。
0250デフォルトの名無しさん2008/08/24(日) 14:12:06
>>248
仕事してるんじゃないのか?
なで学生用なんだ
経費で落とせないのか?
0251デフォルトの名無しさん2008/08/24(日) 14:29:10
EEならフリーで学生じゃなくても手に入れられます。
0252デフォルトの名無しさん2008/08/24(日) 15:53:05
EE(笑)
■ このスレッドは過去ログ倉庫に格納されています