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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/04/12(木) 23:25:17
1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

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

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

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

過去スレ、関連スレなどは>>2-5。
0153152(追記)2007/05/20(日) 18:53:27
* Crypto++ Library 5.4
http://www.cryptopp.com/
cryptopp/sha.h
cryptopp/sha.cpp

展開するとみたいになっていました。これを利用したいです。
0154デフォルトの名無しさん2007/05/20(日) 18:54:15
#include <file-name>
使うならちゃんとpath通しとけよ
0155デフォルトの名無しさん2007/05/20(日) 18:59:35
>>152
相対パスの元は、stdafx.h の場所ではなく
コンパイルしている cpp の置かれた場所なんじゃね?
0156デフォルトの名無しさん2007/05/20(日) 19:13:50
解凍してそのまんまビルド
ライブラリができたらヘッダとlibを適当な場所へ置いて使うだけ
0157デフォルトの名無しさん2007/05/21(月) 21:29:58
C++で普通に関数にするのとクラスのメンバ関数にするのとではとちらが遅いのでしょ?
0158デフォルトの名無しさん2007/05/21(月) 21:38:42
一概には言えない。コンパイラの最適化で、実質的な差が出ない可能性も高い。
速度に関しては、個別に実測する以外は全てただの憶測。
0159デフォルトの名無しさん2007/05/21(月) 22:33:48
オーバーヘットとかは無いの?
0160デフォルトの名無しさん2007/05/21(月) 22:40:45
非仮想関数ならthisを積む程度の差しかないだろうなあ
まぁそんなこと考えるのは時間の無駄だから、コードの見易さ・美しさを考える方がいいよ
0161デフォルトの名無しさん2007/05/22(火) 00:00:15
>オーバーヘットとかは無いの
なんですか? その「オーバーヘット」って。
0162デフォルトの名無しさん2007/05/22(火) 00:06:05
夏塩蹴
0163デフォルトの名無しさん2007/05/22(火) 00:54:16
まあ韓国の文化は冷麺のどんぐり麺?あれだけは評価できるね
0164デフォルトの名無しさん2007/05/22(火) 01:07:28
VC++2005アカデミック日本語版で質問です

「warning C4996: 'scanf' が古い形式として宣言されました。」

scanf()を使うと2005から上記の警告が出ることはググって分かったのですが
当方の警告文は全て英語のままで上記の一文が出てきません

↓これだけ
'This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'

日本語の警告文の説明を表示させたいのですがどこを設定すればいいのでしょうか?
よろしくお願いします
0165デフォルトの名無しさん2007/05/22(火) 07:41:21
C4996でググればいい。
というより、MSDNライブラリインストールしろ
0166デフォルトの名無しさん2007/05/22(火) 07:58:06
役に立たねぇ香具師だなぁ。警告を日本語にしたいって書いてんだろ。
C4996だけの問題じゃねぇんだよ。判ってねぇなら書くなよ。
0167デフォルトの名無しさん2007/05/22(火) 08:11:29
すいませんした。俺が悪いんです。この通りです。許してください。読み違えただけなんです。怒らないでください。日本語にするやり方分かります。でも教えないです。ごめんなさい。
0168デフォルトの名無しさん2007/05/22(火) 08:13:17
どんな警告・エラーもCxxxxの番号が振られているんだから、
C4996以外もその番号でググればいい。
0169デフォルトの名無しさん2007/05/22(火) 09:58:06
わざわざ英語で出るように自分で設定変えたくせに
元に戻す方法は人に聞くのってどういう了見なんだ?
0170デフォルトの名無しさん2007/05/22(火) 11:00:13
C4996でググったらみんな日本語で警告が出るのに
俺の環境じゃ英語しか出ねえよ

て解釈した

英語にアレルギーがあるかしらんがこの機会に慣れたら?
0171デフォルトの名無しさん2007/05/22(火) 11:32:05
VC++2005日本語版に付属のコンパイラとは別に英語版のコンパイラも入れたの?
0172デフォルトの名無しさん2007/05/22(火) 11:33:59
特に何もしてない
0173デフォルトの名無しさん2007/05/22(火) 11:37:29
何もしないで変わるかっつーの
0174デフォルトの名無しさん2007/05/22(火) 13:00:30
MSのサポートに訊けばいい
0175デフォルトの名無しさん2007/05/22(火) 17:58:17
MSマンセー
0176デフォルトの名無しさん2007/05/22(火) 18:24:09
誰かがVC++2005EEでも入れて混ざってんじゃないのかね
0177デフォルトの名無しさん2007/05/22(火) 21:31:25
VS2005無印にSP1当てたら俺も英語だけになったぞ
でもたいして問題じゃねえしMSDNライブラリあれば心配ねえよ
0178デフォルトの名無しさん2007/05/22(火) 23:27:34
それは、英語版のSP1を入れてしまったのでは?
0179デフォルトの名無しさん2007/05/23(水) 09:56:28
(´,_ゝ`)プッ ソンナオチダッタノカ
0180デフォルトの名無しさん2007/05/23(水) 11:14:52
んなわけない
0181デフォルトの名無しさん2007/05/23(水) 11:24:41
そうだな。
本人は「特に何もしてない」と言ってるんだからSP1だってあててるわけが無い
0182デフォルトの名無しさん2007/05/23(水) 11:31:01
痴呆か。
0183デフォルトの名無しさん2007/05/23(水) 11:31:36
俺もSP1当てたからかしらんが英語だよ
その程度の日本語の説明なら要らんけど
あと、うちはProfessionalだな
0184デフォルトの名無しさん2007/05/23(水) 11:38:23
SP1入れてない。
MicrosoftUpdateで時々入れようとしてるんだけど毎回失敗する。
0185デフォルトの名無しさん2007/05/23(水) 14:17:33
俺も前失敗続いてたけど最近あらためてやったら成功したな
何が原因だったんだろ
0186デフォルトの名無しさん2007/05/23(水) 14:43:17
ちょっとツンだっただけさ
0187デフォルトの名無しさん2007/05/23(水) 17:18:31
SP1を当てたが別に英語になっていないぞ
0188デフォルトの名無しさん2007/05/24(木) 10:37:27
MFCで×ボタンを押してアプリケーションを終了するとき
どこになんと言う名前でその処理が書かれているか教えてください
終了するときに処理を付け加えたいのでお願いします
0189デフォルトの名無しさん2007/05/24(木) 10:54:40
WM_CLOSEのハンドラを追加
0190デフォルトの名無しさん2007/05/24(木) 10:58:08
SC_CLOSE → WM_CLOSE → WM_DESTROY
の順じゃないかな。それぞれのデフォルトハンドラで
MFCだと、OnSysCommand() からクローズ投げて
OnClose() が呼ばれ、そこでDestroyWindow()して OnDestroy()が呼ばれる。
もしかしたら違うかも。spy++やデバッガで確認してみて
0191デフォルトの名無しさん2007/05/24(木) 11:00:22
処理内容によっちゃExitInstanceでという選択肢も
0192デフォルトの名無しさん2007/05/24(木) 11:16:42
ありがとうございます処理内容はダイアログを表示させて
パスワード入力とOKボタンを押し終了させるものです
パスワードが違っているかキャンセルボタンを押した場合終了しません

という処理をしようと思っています
0193デフォルトの名無しさん2007/05/24(木) 11:47:00
クラックしてやんよ
0194デフォルトの名無しさん2007/05/24(木) 11:47:19
連レスすいません
ハンドラの追加でON_WM_CLOSE()を追加したんですが
対応する関数に反応ありませんでした
0195デフォルトの名無しさん2007/05/24(木) 11:54:15
×ボタンってダイアログの話なの?
何がどうなってるのかよくわからん、反応が無いとは何で判断?
0196デフォルトの名無しさん2007/05/24(木) 11:57:31
>>195
フォームビューによるダイアログです
プロパティのメッセージから追加しました

ブレークポイントをつけて通っているか判断しました
0197デフォルトの名無しさん2007/05/24(木) 11:58:45
http://www.kumei.ne.jp/c_lang/sdk/sdk_08.htm

↑簡単に言うとこういうことをMFCでやりたいのです
0198デフォルトの名無しさん2007/05/24(木) 11:59:40
んーと、WM_CLOSEが来るのはその閉じるウィンドウにくるんだよ。
こないのはおかしいね。spy++で観察してみては。
0199デフォルトの名無しさん2007/05/24(木) 12:14:47
spy++でみてみるとWM_CLOSEはちゃんとありました
0200デフォルトの名無しさん2007/05/24(木) 12:17:58
エスケープキーでダイアログが閉じないようにするので、そのへんやったことあるけど
ダイアログベースじゃない場合は、どのクラスがメッセージを処理してるかだな
0201デフォルトの名無しさん2007/05/24(木) 12:25:40
sdi/MDIでeditビューの場合は編集中にプログラム閉じようとすると
保存しますか?
みたいな確認でたような気がするけどどうだったかな?
0202デフォルトの名無しさん2007/05/24(木) 12:27:28
観察した結果は

WM_DESTROY→WM_NCDESTROY→WM_CLOSE→WM_SYSCOMMAND

でした
0203デフォルトの名無しさん2007/05/24(木) 12:45:28
CMainFrame::OnCloseにちゃんと来るじゃん
そのあと閉じていいか確認が出る
0204デフォルトの名無しさん2007/05/24(木) 13:13:44
閉じていいか確認が出ないのですが
CMainFrame::OnCloseをオーバーライドして使えばいいということですか?
そこも通らないような・・・
0205デフォルトの名無しさん2007/05/24(木) 13:15:33
あとWM_DESTROYは反応ありましたがウィンドウが閉じたあとでした
0206デフォルトの名無しさん2007/05/24(木) 13:24:39
sdi/MDIでeditビューが基本
最初からそういう風に動作するようになってる
0207デフォルトの名無しさん2007/05/24(木) 13:37:57
>>205
まあいろいろ試してあちこちにハンドラ置きまくってみればいろいろわかることもある。
0208デフォルトの名無しさん2007/05/24(木) 13:40:25
通りました!!CMainFrame::OnCloseでした!!
ありがとうございます!
0209デフォルトの名無しさん2007/05/24(木) 16:34:45
自作ダイアログ表示させようとしたら
自分でつけたコントロールのほかに

TODO: コントロールをここに置く のテキストボックスと
OKとキャンセルボタンがついてごっちゃになってました

Jisakudlg dlg(this);
dlg.DoModal();

なぜなのか教えてください
0210デフォルトの名無しさん2007/05/24(木) 16:47:48
>>209
ダイアログの選択したパーツを整列するボタン押したんじゃないの?
0211デフォルトの名無しさん2007/05/24(木) 16:52:44
すいませんよくわからないですけどhtmlが入ってたみたいで
作り直したらいけました
0212デフォルトの名無しさん2007/05/24(木) 22:34:23
可変個引数の簡単な使い方(できれば、va_arg,va_end,va_startを使わない)を教えてください。

やりたいことは、下記のようにprintf系の関数に引数をそのまま渡したいのです。
void printfWithHeader(char *str, ...) {
char buf[1000] = "Header:";

strcat(buf,str);
printf(char *str, ...);
}

環境は、Visual Studio 2003です。
皆様、お願いいたします。
0213デフォルトの名無しさん2007/05/24(木) 22:53:23
VCというか普通のCの質問だろ
そんなことをわざわざVCスレで質問する意味がわからん
0214デフォルトの名無しさん2007/05/24(木) 22:57:12
できません
規約も護れないやつぁ帰れ
0215デフォルトの名無しさん2007/05/24(木) 23:00:07
vprintf 系を使えよ・・・。
0216デフォルトの名無しさん2007/05/25(金) 00:06:50
Visual Studio.net2003を使っているのですが、
UTF-8のソースを扱うにはどうすればいいのでしょうか。
コンパイルはできるのですが、日本語の表示ができません。
0217デフォルトの名無しさん2007/05/25(金) 00:24:02
>>215
thx.
vprintf系でできそうです。


>>213
> VCというか普通のCの質問だろ
> そんなことをわざわざVCスレで質問する意味がわからん

レスありがとうございます。
VCの拡張機能も含めて、回答を頂きたかったからです。
老婆心ながら、>>213さんは行間をうまく読めないようですので、コミュニケーション能力を鍛えた方がよろしいかと思いました。
0218デフォルトの名無しさん2007/05/25(金) 00:27:25
質問等で、行間を読んでくれる事に期待するってのは、
一般社会ではコミュニケーション能力不足と判定されます。
02192172007/05/25(金) 00:29:21
確かにその通りですね... (-_-;)
0220デフォルトの名無しさん2007/05/25(金) 00:34:52
>>216
先にShift_Jisに変換してからコンパイル、が一番楽。
.NETベースのコンパイラは、文字列=Unicodeで保持、と決め打ちできるんだけどねえ。
0221デフォルトの名無しさん2007/05/25(金) 00:51:21
Windows は UTF-16 で動いてるけど、
.NET を通す場合だとどうなんだろう。
よく知らん。
0222デフォルトの名無しさん2007/05/25(金) 01:03:25
>217
人が多いスレで質問した方が適切な回答が得られやすい
ここはVC限定でしかも初心者限定だから人が少ない
0223デフォルトの名無しさん2007/05/25(金) 04:26:27
いやこんな質問初心者レベルだろ
0224デフォルトの名無しさん2007/05/25(金) 07:09:43
>>216
VS2003にもVBとか色々あるが、ここで質問するからにはVC++2003でいいんだな?
0225デフォルトの名無しさん2007/05/25(金) 09:14:21
仕様書の行間なんぞ読まれたらと思うと・・・
0226デフォルトの名無しさん2007/05/25(金) 11:24:20
>>217 は技術者としては失格だろ
技術者が設計図の行間とか読んだら、ものは出来上がらない
行間読むくらいなら、設計を詳細まで確認するのが正しい
0227デフォルトの名無しさん2007/05/25(金) 12:26:21
VC2002を初めて使っているのですが、DllプロジェクトとMainのプロジェクトがあり
DLL側のヘッダをincludeし、定義しているクラスをメインのexeで使いたいのですが
宣言はできるのですがビルドすると 未解決の外部シンボル と怒られます。

どうしたらよいのでしょうか。
0228デフォルトの名無しさん2007/05/25(金) 12:54:27
複数のプロジェクトをいっしょに扱うのが難しかったら
DLLを先にビルドしてしまえば、DLLで配布されてるライブラリなんかと同様に扱える
0229デフォルトの名無しさん2007/05/25(金) 13:29:18
即レスありがとうございます。

実はcppUnitを使用したいと思いまして、現在のプロジェクトをそのままに
新規でテスト用のプロジェクトから該当のクラスにアクセスしたいと考えておりました。

おっしゃられるように入出力だけのテストなら、dll呼び出せばできそうです。
ありがとうございます。
0230デフォルトの名無しさん2007/05/27(日) 07:54:30
フリーでVisualC++用のリファクタリングアドインある?
02312302007/05/27(日) 08:29:21
自己解決
http://www.devexpress.com/Products/NET/IDETools/RefactorCPP/
0232デフォルトの名無しさん2007/05/28(月) 12:20:46
VisualC++6.0でCDialogについて質問です。

1つのプロジェクトに複数のダイアログ画面でがあり、
各画面で同じ処理を行うメンバ変数・関数が存在します。
これをまとめるため、CDialogから派生したCCustomDialogを作成し、
各画面の基底クラスに使用することを考えました。

通常のC++クラスであれば、上記のことが可能であるとわかりますが、
CDialogクラスでも可能でしょうか?
(Windowsのイベントとかメッセージとかが、正常に処理されるのか心配しています。)
0233デフォルトの名無しさん2007/05/28(月) 12:32:20
>>232
CDialogを派生して各ダイアログクラスを作るように、CCustomDialogを派生すればいい。
CCustomDialogの作成には幾つかMFC特有のおまじないが必要だから、どっかでサンプルを探すのがいいね。
02342322007/05/28(月) 19:36:24
>>233
レスありがとうございます。
参考にさせていただきます。
0235デフォルトの名無しさん2007/05/29(火) 20:40:37
メッセージループとか使わないプログラムで、
キーボードの入力を待たないでキーボードの入力を取得するにはどうすればよいのでしょう?
(押されてなかったらNULLかなんかで抜けてくれる関数等)
0236デフォルトの名無しさん2007/05/29(火) 20:54:06
GetAsyncKeyState
0237デフォルトの名無しさん2007/05/29(火) 22:26:24
>>236
これで出来ました。どうもありがとう。
0238デフォルトの名無しさん2007/05/30(水) 13:17:56
VisualC++2005,XPで開発してます。
ダイアログボックスに画像とその説明のテキストのリストを載せたいのですが、
どのコントロールを使えば最適でしょうか?
0239デフォルトの名無しさん2007/05/30(水) 13:19:49
さあ
0240デフォルトの名無しさん2007/05/30(水) 13:43:28
>>238
ケースバイケース
0241デフォルトの名無しさん2007/05/30(水) 14:26:19
ありがとうございます。
適当にやります。
0242デフォルトの名無しさん2007/05/30(水) 15:29:04
使わないのが最適
0243デフォルトの名無しさん2007/05/30(水) 16:01:43
初めまして、VisualC++2005のC++/CLI でフォームのすべてのイベントに反応させたいのですが、
そのようなイベントが見つかりません。
そのようなデリゲートはないのでしょうか?
0244デフォルトの名無しさん2007/05/30(水) 16:33:18
メソッドだけどWndProcは?
0245デフォルトの名無しさん2007/05/30(水) 16:58:28
HideCaret(static_cast<HWND>(this->textBox1->Handle.ToPointer()));
で、キャレットを非表示にすることまでは分かったのですが、常に非表示にするにはすべてのテキストのイベントで実行させなければなりません。
もっと効率よくキャレットを非表示にする方法はないものでしょうか?
0246デフォルトの名無しさん2007/05/30(水) 16:59:47
またお前か
0247デフォルトの名無しさん2007/05/30(水) 17:11:25
ご無沙汰しております。
0248デフォルトの名無しさん2007/05/30(水) 17:27:57
ないだろ
どうせ普通はそんなこと誰もやらないし
0249デフォルトの名無しさん2007/05/30(水) 17:29:32
サブクラス化してしまえ
0250デフォルトの名無しさん2007/05/30(水) 17:31:36
テキストつかわなきゃいい
0251デフォルトの名無しさん2007/05/30(水) 17:34:25
ウインドウズの電卓はテキストBOX使ってない
0252デフォルトの名無しさん2007/05/30(水) 17:51:14
キャレットに用意されているマウスカーソルイメージを弄れば。
■ このスレッドは過去ログ倉庫に格納されています