★初心者にVisual C++を教えるスレ★ Part24
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/09/15(金) 14:04:24Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。
■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。
質問の仕方については次のページが大変参考になります。
http://www.hyuki.com/writing/techask.html
http://www.geocities.co.jp/Beautycare/4965/public/template.html
http://myu.daa.jp/osiete/
■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
(MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。
過去スレ、関連スレなどは>>2-5。
0153149
2006/10/26(木) 16:38:40#pragma comment(lib, "user32.lib")
を追加したところ ビルドできました。�d☆
-[空のプロジェクト]
だとライブラリのリンクが不要で
-[windows フォームアプリケーション]
だとライブラリのリンクが必要になるのは、ちょっと不思議。
逆なら直感的に納得できるのに・・・
0154デフォルトの名無しさん
2006/10/26(木) 17:01:230155竹田箴言
2006/10/26(木) 17:04:41どなたか教えてください。
また、Cで使うrandomizeはC++では
どうなるのでしょうか。
0156デフォルトの名無しさん
2006/10/26(木) 17:22:00まずはCと同じようにやってみたらどうだ?
0157デフォルトの名無しさん
2006/10/26(木) 17:23:04Winと関係ないからCまたはC++のスレへ
0158デフォルトの名無しさん
2006/10/26(木) 17:49:03for(int x = 0;x < X;x++)
p[x] = new Class*[Y];
for(int x = 0;x < X;x++)
for(int y = 0;y < Y;y++)
p[x][y] = new SubClass();
としました
これを解放するために
for(int n = 0;n < X;n++)
for(int m = 0;m < Y;m++)
delete p[n][m];
for(int n = 0;n < X;n++)
delete [] p[n];
delete [] p;
としたらエラーが出ました
何が問題なのでしょうか?教えてください
0159デフォルトの名無しさん
2006/10/26(木) 17:50:330160デフォルトの名無しさん
2006/10/26(木) 19:43:03この板で聞いてるんだから、CryptAPIの事なんだよ。
初期化の必要は無い。
安心して使ってくれ。
0161デフォルトの名無しさん
2006/10/26(木) 23:07:42bad_alloc例外使えないみたいですが
どうすれば使えますか?
0162デフォルトの名無しさん
2006/10/26(木) 23:46:44XMLファイルを読み込みそのファイル内容にある行を挿入し
別ファイル名で保存するようにしたいと考えてます。
CStdioFile ofp;
CString buf;
int i;
ofp.Open("c:\\test.xml", CFile::modeCreate | CFile::modeWrite);
ifp.Open("c:\\read.xml", CFile::modeRead);
i=0;
while(TRUE){
if(ifp.ReadString(buf)==NULL){
break;
}
if(i==9){
ofp.WriteString("てすと\n");
}
ofp.WriteString(buf + "\n");
i++;
}
ifp.Close;
ofp.Close;
このような感じでこの場合は10行目に行を挿入するように組んだのですが
XMLファイルはUTF-8のコードのせいか挿入する行に全角があると文字化けがおこり
うまく書き込みができませんでした。
UTF-8と指定して書き込みする方法はないかと探しましたが
ネット上ではうまく情報がみつかりませんでした。
何かしら方法はありますでしょうか?
0163デフォルトの名無しさん
2006/10/27(金) 00:24:29標準C++だと、bad_allocがあるのは<new>。
0164デフォルトの名無しさん
2006/10/27(金) 01:25:39WideCharToMultiByteでUTF-8に変換してから書き込む
0165デフォルトの名無しさん
2006/10/27(金) 14:40:36WinXP SP2 VS2005を使用しています。
MDIでメニューから子ウィンドウを新規で表示したいのですが、
どのように作成したらよいか分かりません。
ご教授をお願いいたします。
0166デフォルトの名無しさん
2006/10/27(金) 14:53:13ウィザードでMDIにしたら最初からそうなってると思うけど
0167デフォルトの名無しさん
2006/10/27(金) 15:12:38メニューに新しい項目を追加して、その項目がクリックされた時に
あらかじめ作成したフォームビューを表示したいのです。
どうしたらいいでしょうか?
0168デフォルトの名無しさん
2006/10/27(金) 17:31:540169デフォルトの名無しさん
2006/10/27(金) 17:37:43分かりにくくてすみませんがよろしくお願いいたします。
0170デフォルトの名無しさん
2006/10/27(金) 17:48:42フォームではなくビューです。
0172デフォルトの名無しさん
2006/10/28(土) 23:26:31の内容をコピペして動かしたのですが、
「"0x5f477f58"の命令が"0x03ed0183"のメモリを参照しました。
メモリが"written"になることはできませんでした。」
と表示されてエラーになります。
ここ(ttp://grugru.mine.nu/file.cgi?v=guru_guru_4626.zip)に
ソースをうpしておきましたので、直すべき点を指摘していただけませんか?
0173初心者
2006/10/28(土) 23:36:00他の.exeファイル実行できるようにどうすればいいですか??
0174デフォルトの名無しさん
2006/10/28(土) 23:40:200175デフォルトの名無しさん
2006/10/28(土) 23:50:08CString ss = "notepad.exe";
ShellExecute(m_hWnd,"open",ss,args,NULL,SW_SHOWNORMAL);
0176デフォルトの名無しさん
2006/10/28(土) 23:52:27CString args;
そもそも質問の答えになっているのかわからんが
0177デフォルトの名無しさん
2006/10/28(土) 23:53:20マルチは市ね
0178デフォルトの名無しさん
2006/10/29(日) 02:29:28突っ込み所がありすぎたので、大幅に書き換えた。
http://grugru.mine.nu/file.cgi?v=guru_guru_4636.zip
このアーカイブのファイルで上書きしてビルドしる。
差分画像の作成はCMyDoc::OnMenuHyoujiで処理している。
元のソースと比較すれば見当はつくはず。
あと、2バイト文字をファイル名に使うの禁止な。
0179デフォルトの名無しさん
2006/10/29(日) 09:18:52どれほど違うのでしょうか?
それぞれの移行なんかは難しいものなのでしょうか?
VC++2005には問題もあり、いまだにVC++6.0を使い続けているという人も
いると聞きますが……いったいどこから入ればいいのやら……。
0180デフォルトの名無しさん
2006/10/29(日) 09:31:04初心者の場合はVC++じゃなくてC#がお勧め
VCじゃなくてCやC++がやりたいならVC++2005でもいい。
0181デフォルトの名無しさん
2006/10/29(日) 16:30:26わざわざありがとうございました。本当に助かりました。
>あと、2バイト文字をファイル名に使うの禁止な。
今後気をつけます。
0182デフォルトの名無しさん
2006/10/29(日) 20:47:24特にそれほど変わるというわけでもないのですね。
ゲームをつくりたいので、ゲーム制作にC#はあまり向かないと聞いたのですが……。
あと、C#は配布するのが面倒というようにも聞きました。
VC++2005がよいのですね。
0183デフォルトの名無しさん
2006/10/29(日) 20:57:42無料だし、とりあえず触ってみると良いと思うよ。うん。
0184デフォルトの名無しさん
2006/10/30(月) 00:38:45VC++ 2005 で、デフォルトで予約語が青色になりますが、
これに予約語を追加する方法はないでしょうか?
自分で typedef した、よく使う型を青色に変えたいのです。
0185デフォルトの名無しさん
2006/10/30(月) 02:00:25あとは適当に見てけばある
0186デフォルトの名無しさん
2006/10/30(月) 08:30:25うー、見つからないです・・・
おそらく、単語一覧?を記述したテキストか何かを読み込ませる必要があるため、
ファイルを選択できる、エディットボックス+"▼" の組を特に探したんですが・・・。
0187デフォルトの名無しさん
2006/10/30(月) 11:38:14特定のアドレスとポートに対して、ポートが開いているかどうかを
判定するプログラムを考えていますが、どのクラスのメソッドを
使えばいいでしょうか。
TcpClient.Connectだと、レスポンスがとても遅いです。
一瞬で判定できるメソッドなどないでしょうか。
0188デフォルトの名無しさん
2006/10/30(月) 14:26:05SDIであらかじめ用意されているCWinApp::OnFileOpenを使うときに、
ファイル名を取得するにはどうすればよいのでしょうか?
0189デフォルトの名無しさん
2006/10/30(月) 14:40:090190デフォルトの名無しさん
2006/10/30(月) 16:41:02usertype.datでググれ。
0191デフォルトの名無しさん
2006/10/30(月) 17:01:58CMDIFrameWndクラス内のON_COMMANDイベントハンドラ内で
CMDIChildWndクラスのOnCreateClientイベントを呼ぶことって出来ますか?
0192デフォルトの名無しさん
2006/10/30(月) 18:33:33はぁ?
それは呼ばれるものだ
0193デフォルトの名無しさん
2006/10/30(月) 22:37:50いけました、ありがとうございました!
0194デフォルトの名無しさん
2006/10/31(火) 11:56:26ダイアログにユーザーIDを入力するエディットと
JSPを起動するボタンがあります。
JSP起動時にユーザーIDを引数として渡すことは
可能でしょうか?
0195デフォルトの名無しさん
2006/10/31(火) 14:53:190196デフォルトの名無しさん
2006/10/31(火) 15:27:52in the current string, performing the same role
as the size() function.
らしいので、まったく同じということなんですね。
length() も size() も内部では '\0' をスキャンしているのでしょうか?
あと、resize() と reserve() の違いがわかりません。
0197デフォルトの名無しさん
2006/10/31(火) 16:34:20二つ以上のMIDI(a.mid,b.mid等)を同時に鳴らしたいのですが、
指定されたMIDIデバイスは既に使用されています。開放されるのを待ち、再実行してください。
とのエラーがでます。
二つ以上のMIDIファイルを同時に再生することは可能なのでしょうか?
0198デフォルトの名無しさん
2006/10/31(火) 18:32:15std::basic_stringが内部で保持する文字列はヌルで終わっている必要はない。
まあどうせc_str()があるし、ヌル終端させておく実装が多いとは思うけど。
reserveは予めメモリを確保しておくだけ。
resizeを呼ぶと、後のsize()の戻り値は、resizeで指定した値になる。
reserveを呼んでも、後のsize()はreserveを呼ぶ前と変わらない。
現在確保しているメモリの量はcapacityを呼ぶとわかる。
reserveを呼ぶとcapacity()の大きさは、reserveの引数に指定した値以上になることが保障される。
勿論reserveを呼んだとき以外でもcapacityは変化する可能性はある。
標準ライブラリのコンテナは何かにつけて多めにメモリを確保する傾向がある。
0199デフォルトの名無しさん
2006/10/31(火) 20:56:57UNIX におけるドットファイルに相当するユーザ毎の設定ファイルの置き場を探しています。
0200デフォルトの名無しさん
2006/10/31(火) 21:09:070201デフォルトの名無しさん
2006/10/31(火) 21:27:42それぞれにボタンを配置し、クリックすると各ペインの
サイズを拡縮したいのですが、どのようにしたらよいでしょうか?
0202デフォルトの名無しさん
2006/10/31(火) 21:33:420203デフォルトの名無しさん
2006/10/31(火) 21:40:16CSplitterWndクラスののCreateViewで作成しました。
0204デフォルトの名無しさん
2006/10/31(火) 21:45:08> 二つ以上のMIDIファイルを同時に再生することは可能なのでしょうか?
サウンドカードによるんじゃないか?
ってプログラミングの話か?
0205デフォルトの名無しさん
2006/10/31(火) 21:50:08CSplitterWndのメンバ関数でできなかった?
ビューからやる方法がわからないということ?
0206デフォルトの名無しさん
2006/10/31(火) 21:53:14プログラミングの話です。
新VisualC++6.0のサンプルを見ながら実装してみたのですが、
二つ以上同時再生ができませんでした。
何か方法のでしょうか。
0207デフォルトの名無しさん
2006/10/31(火) 21:57:42方法が分かりませんでした。
0208デフォルトの名無しさん
2006/10/31(火) 22:39:270209デフォルトの名無しさん
2006/10/31(火) 23:06:550210デフォルトの名無しさん
2006/11/01(水) 08:31:35メインフレーム
スプリッタ
こんな風になってると仮定して
appのポインタわかれば
app->メインフレーム->スプリッタ
メインフレームのポインタわかれば
メインフレーム->スプリッタ
0211207
2006/11/01(水) 11:57:39GetParentFrameで親フレームのポインタを取得することで
CSplitterWndクラスのメンバ変数にアクセスできました。
ありがとうございます。
0212207
2006/11/01(水) 14:58:59現在アクティブなペインを取得するため、GetActivePane関数
を使用しようとしたのですが、
error C2248: 'CSplitterWnd::GetActivePane' : protected メンバ
(クラス 'CSplitterWnd' で宣言されている) にアクセスできません。
というエラーが出てしまいました。解決方法を教えてください。
0213207
2006/11/01(水) 15:11:520214207
2006/11/01(水) 23:28:02分割バーがドラッグされたかどうかを認識するため、
CSplitterWndの派生クラスを作成し、OnLMouseDown、
OnMouseMoveイベントをマップしたのですが、なぜか
関数がよばれません、なにかほかに必要なことがあれば
教えてください。よろしくお願いいたします。
0215デフォルトの名無しさん
2006/11/02(木) 18:48:27分割バーまでいじるんだったら
自分で分割ウインドウ作った方が簡単じゃないか?
0216207
2006/11/02(木) 20:39:47派生クラスのメンバ変数を作成していないのが原因でした。
お騒がせいたしました。
0217デフォルトの名無しさん
2006/11/02(木) 21:26:270218207
2006/11/02(木) 21:45:22>派生クラスのメンバ変数を作成していないのが原因
ではなく
派生クラスのメンバ変数を使用してスプリッタウィンドウ
を作成していないのが原因
です。
0219デフォルトの名無しさん
2006/11/03(金) 08:34:32あります。指定は、プロジェクトのプロパティのプリプロセッサでしています。
構成を Release にしたときに、このマクロで #ifdef している部分が「アクティブな
プリプロセッサブロック」となってしまいます。Release のときは IntelliSense で灰色に
してほしいのですが、どのようにすればよいでしょうか。
0221デフォルトの名無しさん
2006/11/03(金) 10:41:58引数を調べるプログラムで
int _tmain(int argc, _TCHAR* argv[])
{
int i;
printf("argcは %dです。\n",argc);
for(i=0; i < argc; i++)
printf("argv[%d]=%s\n", i, argv[i]);
printf("おしまいっ!\n");
rewind(stdin);
getchar();
return 0;
}
a.exe abc def
と引数を入れても、
Visual C++ 2005では C a d と、最初の1文字しか出ません。
277 名前: デフォルトの名無しさん [sage] 投稿日: 2006/11/03(金) 10:28:05
>>276
Unicode文字列をascii文字列として出力しようとしているから。
詳しくはVSスレなりどこへでも。
とのことですが、
どうすればいいのでしょうか
0222デフォルトの名無しさん
2006/11/03(金) 11:01:27環境依存になるが、UNICODE/非UNICODEどちらの設定でもコンパイルできるようにしたければ_tprintf。
0223デフォルトの名無しさん
2006/11/03(金) 11:18:25出来ました
ありがとうございます。
0224デフォルトの名無しさん
2006/11/03(金) 13:52:39誘導したやつが間抜け
あとwprintfや_tprintfとかいらんこと教えられて今後の人生が思いやられる
0225デフォルトの名無しさん
2006/11/03(金) 16:43:53アホか
0226デフォルトの名無しさん
2006/11/03(金) 19:06:30起動する実行ファイル名を取得したいのですが
可能でしょうか?
VS2005 MFCを使用しています。
0227デフォルトの名無しさん
2006/11/03(金) 19:17:58STDのvectorや、size_tなどVC++内に組み込まれている関数を、
int や double のように水色で表示させる方法を教えてください。
0228デフォルトの名無しさん
2006/11/03(金) 19:54:27たぶんgetで始まるapiで可能
>>227
水色は知らない
0229デフォルトの名無しさん
2006/11/03(金) 20:44:45ツール→オプション→フォントおよび色
もしくは
usertype.dat
0230デフォルトの名無しさん
2006/11/03(金) 21:18:50m_pszExeName
0231デフォルトの名無しさん
2006/11/04(土) 01:07:480232デフォルトの名無しさん
2006/11/04(土) 01:36:210233デフォルトの名無しさん
2006/11/04(土) 10:10:03デバッグ時に標準ライブラリ関数にステップインする方法を教えて下さい。
ソースをインストールして、マイコードのみステップインを無効にしましたがNGでした。
もちろん、デバッグのときにはステップイン操作を行っています。
お手上げです。
0234デフォルトの名無しさん
2006/11/04(土) 10:43:000235デフォルトの名無しさん
2006/11/04(土) 10:57:43class CBase { ... public: virtual int vfunc() = 0; }
class A : public CBase { ... public: int kazuA; int vfunc() { return kazuA; } }
class B : public CBase { ... public: int kazuB; int vfunc() { return kazuB; } }
...
... std::vector<CBase*> objList;
... objList.push_back( static_cast<CBase*>( new A ) );
... objList.push_back( static_cast<CBase*>( new B ) );
0236デフォルトの名無しさん
2006/11/04(土) 11:08:42>... objList.push_back( static_cast<CBase*>( new B ) );
この場合static_castはイラン。
ダウンキャストは別にダメではない。
dynamic_castがあるし、オブジェクトの本当の型がわかっているのならstatic_castでもいい。
0237デフォルトの名無しさん
2006/11/04(土) 11:27:42>>233です。
>標準ライブラリのソースをどっかから盗んできてexpressに入れたということ?
Platform SDK についていたソースをインストールしました。
たとえば、printf()にステップインしたい場合どうすればよいのでしょうか?
盗人じゃないよ(^^;)
0238デフォルトの名無しさん
2006/11/04(土) 11:34:19ステップインは普通にやれば勝手に中に入っていく
0239デフォルトの名無しさん
2006/11/04(土) 15:03:23メインウインドウの中にいくつかエディットコントロールや
ボタンを配置したいと思っているのですが、
ダイアログボックスを作ってそれをメインウインドウにはめ込む
なんていうことはできるのでしょうか?
何個もCreateWindowを書くやり方しか知らず、
他にやり方はないかなと本を読んだりググったのですが
わかりませんでした。
0240デフォルトの名無しさん
2006/11/04(土) 15:20:020241239
2006/11/04(土) 15:37:35ダイアログを見直して、スタイルをオーバーラップにしたら
はりついてくれました。初歩的すぎてごめんなさい・・・。
ありがとうございました。
0242デフォルトの名無しさん
2006/11/04(土) 17:56:230243239
2006/11/05(日) 16:48:40うっかりDialogBoxマクロで組んでしまっていました・・。
これをCreateDialogに修正したらまた見えなくなって。
今はダイアログボックスのプロパティをいじくってます。
親っていうのはメインウインドウのハンドルのことでしょうか?
242さんのWS_CHILDも含めて理解が足りてないので
もうちょっと勉強してきます。失礼しました。
0244デフォルトの名無しさん
2006/11/05(日) 16:51:160246デフォルトの名無しさん
2006/11/07(火) 16:10:040247C++ 一年生
2006/11/07(火) 17:24:29キーストロークフックをグローバルフックで取りたくて
VS2005(アカデミック版)、winXP,併用ソフトはATOK、シマンテックアンチウイルス
DLLこさえて 宣言は
class __declspec(dllexport) Hook{
public: static int makeKhook();..........................}
定義を
int Hook::makeKhook()
{
hHOOKKEY = (HOOKPROC)KeyboardProc;
hhk = SetWindowsHookEx(WH_KEYBOARD,// フックタイプはキーストローク
hHOOKKEY,// フック処理プロシジャへのポインタ
NULL,//フックプロシジャは同一ファイルで記述
0);// 対象スレッドはすべて
if (hhk == NULL)
{ MessageBox(hWnd,TEXT("フックかけられないじょ"),TEXT("Error"),MB_OK); return 0;}
return 1 ;}
とすると 毎回フックが設定できない。(必ずhhk == NULL で戻ってくる)
それで、ヘルプのSetWindowsHookExの記述を見ると、
「解説:hMod パラメータで NULL を指定し、dwThreadId パラメータで 0 またはほかのプロセスが作成したスレッドの識別子を指定すると、エラーが発生することがあります。」と書いてある。
これは、グローバルフックをかけたければフック設定とフック処理のDLLを分けろ
と言うことなんでしょうか。EXE側で、ほとんど同じコードでフックをかけようとする
と100%うまく行くのですが、ローカルフックにしかならない。
それとも、なにか別にオタンコな事やっていてセットできないだけ? ご教示下さい。
0248デフォルトの名無しさん
2006/11/07(火) 17:28:20実行結果をノートパッドなどに出力するプログラムを作る
0249デフォルトの名無しさん
2006/11/07(火) 20:57:16DateTimePickerコントロールのValueを空白で表示することは
可能でしょうか?エディットに置き換える方法もあるのですが
あまりコントロールを増やしたくないので・・・
よろしくお願いします。
0250デフォルトの名無しさん
2006/11/07(火) 22:17:41resource.hの中のリソースIDの中身を変更したら
resource.h
このファイルはMicrosoft Developer Studio以外で修正されています。○○.rcを再ロードしますか?
とでてきてここで「はい」を選んだらダイアログ画面などが開けなくなってしまいました。
どうしたらよいでしょうか?
0251デフォルトの名無しさん
2006/11/07(火) 22:38:29コントロールに振られているリソースIDを間違って削除したんじゃない?
0252デフォルトの名無しさん
2006/11/08(水) 01:08:23libができたのでテストアプリにリンクしてビルドしたところ、以下の
warningがでてしまいました。libの利用者が意識することなく、
このwarningを解消したいと思っているのですが、方法をご存知の
方がいましたら教えて頂けませんか。
・warningメッセージ
d:\projects\testlib\src\hoge.h(11) : warning C4142: 型が再定義されていますが、それはコード生成上何の効果もありません。
・上記行数にあるコード
typedef unsigned long U_INT32;
ライブラリをビルドする際に宣言されたtypedefが、アプリを
ビルドするときにも有効のまま残ってしまっているのだと推測
しているのですが、どう解消したらよいのか見つけられていません。
作業環境は以下のとおりです。
Windows XP Home SP2
MS VC++ 2005 Express Edition
MS Platform SDK for Win Svr 2003 SP1
よろしくお願いいたします。
■ このスレッドは過去ログ倉庫に格納されています