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

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

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

前スレ・関連スレは、>>2 ぐらい。
0098デフォルトの名無しさんNGNG
>>97
ムリ
009995と97NGNG
了解しました。
仕方が無いので、EUC形式が正しく表示出来る違うエディタで編集して、
編集が終わったらVCでコンパイルする事にします。
質問に答えて頂きありがとうございました。
010089NGNG
>>94
おぉ。いいスレですね。
ありがとうございます。
0101デフォルトの名無しさんNGNG
vc++.net でcursesライブラリを使うにはどうするんでしょうか?
0102デフォルトの名無しさんNGNG
なんだかCの参考書って難しくてさっぱりです。
この意味わかる方教えてください

某参考書の一節

#ifがよく使われるのは、ヘッダファイルの二重include防止です。

#if ANYHEADER_H
#define ANYHEADER_H
・
  ・
  ・
#endif
0103デフォルトの名無しさんNGNG
何が分からないのか分からん
0104デフォルトの名無しさんNGNG
と思ったがそれじゃまともに動かないじゃん
0105デフォルトの名無しさんNGNG
>>102
気持ちはわかる。以上
0106デフォルトの名無しさん NGNG
構文の例みたいなもんなんですが、二重includeって
なんですか?
0107デフォルトの名無しさんNGNG
二重includeとはなんですか?
0108デフォルトの名無しさんNGNG
#if ANYHEADER_H じゃなくて
#ifndef ANYHEADER_H じゃね。
0109デフォルトの名無しさんNGNG
二重にincludeすることです
0110デフォルトの名無しさんNGNG
>108
そうでした。108さんの言うとおり。
すみません、そちらの方でお願いします
0111デフォルトの名無しさんNGNG
現代人は #pragma once を使います。
0112デフォルトの名無しさんNGNG
>>111
両方使うのが普通です
0113デフォルトの名無しさんNGNG
どこで二重にincludeしてるかよくわかんないんです。
低レベルな話だと思いますがよろしくお願いします
0114デフォルトの名無しさんNGNG
>>113
気持ちはすごくわかる。以上
0115デフォルトの名無しさんNGNG
vc++.net でcursesライブラリを使うにはどうするんでしょうか?
0116デフォルトの名無しさんNGNG
>>113 ここを見ればわかるかも
ttp://www.02.246.ne.jp/~torutk/cxx/file/includeguard.html
0117デフォルトの名無しさんNGNG
釣られてあげよう。でも、この後のレスはないので念のため。

ひとつのファイルをコンパイルするのに
同じファイルを何回もインクルードするのは無駄。
だから、コンパイラが読み込みを省略してくれることもあるし、
万が一、2度読み込まれても構文解析が読み飛ばしてくれるように、
#ifndef ANYHEADER_H
#define ANYHEADER_H
・
・
・
#endif
と書いておく。
stdio.hみたいなファイルは、
ありとあらゆるヘッダーにかかれているから、
コンパイル時間の節約になるし、
同じ宣言が重複するエラーも出ない。

さらばじゃ。
0118デフォルトの名無しさんNGNG
http://www.agemasukudasai.com/bloom/
0119デフォルトの名無しさんNGNG
>どこで二重にincludeしてるかよくわかんないんです。

いいところに気がついたじゃないか。
プログラマのほとんどは、どこで二重にincludeしてしまうのか
わかってないんだよ。だけど、その呪文を書いておけば、
どこで二重にincludeしてしまっても気にする必要がないんだよ。
どーだ楽ちんだろ。
0120デフォルトの名無しさんNGNG
#ifndef ANYHEADER_H
#define ANYHEADER_H
#pragma once
・
・
・
#endif

まぁあれだ
『おまじない』だと思ってこれは必ず入れて置けと
0121デフォルトの名無しさんNGNG
つーか>>102は釣りだろ!
0122デフォルトの名無しさんNGNG
>>101
エスケープシーケンスでがんばったら。
0123デフォルトの名無しさんNGNG
>>122
VC++.NETが使えるのは2000/XP→2000/XPではエスケープシーケンス無理
 →がんばれない。
0124デフォルトの名無しさんNGNG

VC++.NET 使ってる人にお尋ねしますが、これにも
MSDN Library が付属してると思うんですが、これの
Platform SDKの解説は相変わらず大部分英語ですか?
それとも完全に日本語訳になったでしょうか?

VC++6.0使ってるんですが、翻訳がホントに一部だけで
WNDCLASS構造体の解説ですら英語という状況なので
完全に訳されているなら.NETに移行しようかと思ってる
んですが。

0125デフォルトの名無しさんNGNG
COleVariant オブジェクトにCHAR型の文字ををセットするのには
どうすればよいのでしょうか?
0126bloomNGNG
http://www.agemasukudasai.com/bloom/
0127デフォルトの名無しさんNGNG
>>125
char c;

COleVariant v(CString(c));
0128デフォルトの名無しさんNGNG
>>124
英語を学んだほうが現実的だと思うけど。
ネット版なら翻訳されてるかな?
ttp://www.microsoft.com/japan/msdn/library/
0129デフォルトの名無しさんNGNG
ヘルプの英文に英語の知識はほとんどいらない
0130デフォルトの名無しさんNGNG
#include <stdio.h>
int main()
{
int a, b;
printf("a, bを入力してください\n");
scanf("%d, %d", &a, &b);
printf("a = %d b = %d\n", a, b);
printf("何かキーを押してください");
getchar();
printf("end");
return 0;
}
実行するとgetchar()の入力待ちが起きずに終了してしまうんですが
なぜでしょうか。コンパイラはvc++.netです。
0131デフォルトの名無しさんNGNG
scanfでデータを取りこぼしているから
0132デフォルトの名無しさんNGNG
<<127
ありがとうございます。
0133デフォルトの名無しさんNGNG
VC++.NETを使ってますが、先日までは自分が記述したプログラムだけ
ステップインしてデバッグ出来ていたのですが、先ほどやってみると
strcpy,strncpy,starcat,CString等他の関数の中身(アセンブリ?)
までステップインしてしまってます。
きっとどこかの設定を触ってしまいこうなったのだと思いオプション
設定を見直したのですが、わかりませんでした。
教えてください。
0134デフォルトの名無しさんNGNG
>>133
ステップアウト (関数から抜け出る)
ステップオーバー (次の関数へ)
のボタンないですか?
0135デフォルトの名無しさんNGNG
<<134
ありがとうございました!
ステップアウトでできました。以前はF8ステップインだけを押して
いてそんな事してなかったと思ったのですが。。
これでデバッグがまたはかどります。
ステップインって必要ないじゃん!
0136デフォルトの名無しさんNGNG
>>135
んなこたーない。
自分の書いた関数の呼び出しもトレースしなくなるぞ。
0137デフォルトの名無しさんNGNG
本に載ってたソースを元にファイル出力をしてみようと
↓のコードを書いたのですが

if(GetAsyncKeyState(VK_TAB) & 0x8000) {
HANDLE hmap;
char *map;
PDWORD bite=0;
map=(char *)bData;
hmap =CreateFile("C:\\map.txt",GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_ALWAYS,NULL,NULL);
if(hmap != INVALID_HANDLE_VALUE){
WriteFile(hmap,map,lstrlen(map),bite,NULL);
CloseHandle(hmap);
}
}

WriteFileができず
「ハンドルされていない例外 は Sample11.exe (KERNEL32.DLL) にあります: 0xC0000005: Access Violation。」
とでてしまいます。

どうすれば書き込むことができるのでしょうか?
0138137NGNG
VC++6.0
を使ってます
0139デフォルトの名無しさんNGNG
>>137
>PDWORD bite=0;
これはないでしょう。
0140137NGNG
「第四引数は実際に書き込まれたBITE数が代入されるだけ」
と書いてあったので適当に初期化してみたのですが
まずかったでしょうか。

どう直せばよいのでしょう。




0141デフォルトの名無しさんNGNG
つまりアドレス0に代入されていることになるが・・・
0142デフォルトの名無しさんNGNG
Σ(゚Д゚
PDWORDなんてものがあるなんて知らなかった…。
0143137NGNG
mallocなどでメモリ領域を確保してそのアドレスを入れればよいのでしょうか?
0144デフォルトの名無しさんNGNG
あるある、俺も以前間違えた。
MSDNにも素直にFoo(HOGE* hoge);って書いてくれればいいのに
Foo(LPHOGE hoge);って出てたりするし。
0145デフォルトの名無しさんNGNG
>>143
答えから言えば
DWORD dwBit;
としといて関数に&dwBitを渡す。
たぶんMSDNにも「第四引数は〜へのポインタ」みたいなこと書いてあると思う。
0146137NGNG
ありがとうございます。
やってみます。
0147137NGNG
できました。
Pはポインタを示す冠詞のようなものなのですね。
初めてしりました。
0148デフォルトの名無しさんNGNG
LPとP両方定義されている物、
片方しか定義されていない物、
まったく存在しない物、
16bit時代の名残を引きずっているとはいえ、
M$の定義はいい加減すぎる
0149デフォルトの名無しさんNGNG
>>148
その癖型チェックはしっかりするし(w
0150デフォルトの名無しさんNGNG
すいません。
Directxを使ってクライアント領域に描写しているのですが
ダイアログのようなエディットボックスで
文字入力したいのです。

どのようにすればよいでしょうか。
0151デフォルトの名無しさんNGNG
VCでC++じゃなくてCをコンパイルするのて、
簡単に出来るんですか?
0152デフォルトの名無しさんNGNG
>>151
ソースの拡張子を .c にする。
0153デフォルトの名無しさんNGNG
ありがとうございます。
助かりました。
0154デフォルトの名無しさんNGNG
ダイアログウィンドウって子ウィンドウ作れますか?
0155150NGNG
解決しました
0156デフォルトの名無しさんNGNG
>>154
作れます。
0157デフォルトの名無しさんNGNG
>>156
つーか子ウィンドウの作れないウィンドウってあるか?
0158デフォルトの名無しさんNGNG
VRAMの表示バンク切り替えやクリッピング無しの描画によって見えなくなることはある
いくらでも対策はあるけど
0159デフォルトの名無しさんNGNG
VC++6.0をWin2kProで使用でのことについて質問です。
以前まで(今回の再インストール)は、VCの「ファイル、編集・・」などある
あのメニューから、ツールバーのカスタマイズをするときに引用できたのですが、
なぜかできなくなりました、ためしに完全インストールや上書きインストールなど
やってみましたが無理でした。
やりたいことは、
ツール→カスタマイズで、ファイル→ワークスペースを開く を
ツールバーに追加したいのですが、このメニューが何か違うのです、左端につまみ
がないメニューに(表現悪くてすいません)なっていて、
編集メニュー項目とかにアイコン付で項目があると思うのですが全ての項目に
アイコンがついてません、アイコンが描画される幅がない感じで狭いです。
友人から試しに上述のカスタム状態のレジストリをもらって上書きすると、一応
できたのですが、メニュー項目のアイコンなどは復帰しないです。
どなたかご教授下さい、わかりにくければ再度説明します。お願いします。
0160デフォルトの名無しさんNGNG
>>159
わかりにくいのでもう一度お願いします。
0161デフォルトの名無しさんNGNG
>>159
>ツール→カスタマイズで、ファイル→ワークスペースを開く を
>ツールバーに追加したいのですが

そんなに何度も使うものじゃないのにツールバーに必要ですか?

0162デフォルトの名無しさんNGNG
>>159
>引用できたのですが

この辺が謎。
0163159NGNG
>>161
私は結構つかうので…。まぁなくても不便とまではいかないかも
しれませんが、できなくなったのが一番嫌なことでしょうか。

>>162
えっと、ツール→カスタマイズ、でツールバーに
ファイル→ワークスペースを開く をD&Dしたら、ツールバーに
同じ機能のボタンが生成できるんですが、その機能ができなく
なったのです。
カスタマイズ設定時でのメニューの項目が全てグレーになって
しまっています。

そのほかの見える現象としては、メニューがWin95時代(?)の
感じみたいになっていて、IE5とかのように左の端につまみがなく
なっています。
IEですとお気に入りのなかの項目にアイコンがあると思います。
プログラムだとオーナードローする技法のやつです。
VC6.0のメニューもそういった感じだったはずが、上述のとおり
Win95チックになってしまっています。

画面をみてもらえばいいのですが、そういうわけにも
いかないですね。

文字で表現するのが難しい、どうか宜しくお願いします。
0164デフォルトの名無しさんNGNG
>>159
>今回の再インストール
これが謎だけど、単にIEのバージョンが古いというのではあるまいな?
0165159NGNG
>>164
IEは5.5SP2です、正確には今回のWindows2000Proインストール
以来ずっとこの現象が残っているのです。
あれはIEコンポーネント関連と考えてIE6にしたり(今はけしました)
しても無理でした、VCの再インストールも無理でしたし。
以前まではWinインスト後まっさきにVCインストールでも、
正常になっていました、Winまた再インストールすればよい気も
するんですがこれだけの為にするのにも手間がかかるから敬遠してます。

どこか自由に画像アップロードできるところがあればいいのですが、
検索の仕方が悪いのかいまいちでてこない…。
他何か足りない情報ありますでしょうか?

今ちょっと思いついたのでレジストリを完全削除してVC起動してみます…。
(これでうまくいかないかなぁ)
0166デフォルトの名無しさんNGNG
レジストリを完全削除したらOSが起動不能になるが
0167159NGNG
>>166
あ、もちろんVcのです、やってみましたが無理でした。

猫のところで画像があったので説明します。
ttp://www.kumei.ne.jp/c_lang/setvc.htm
ここにページにある画像の「||ファイル|編集・・・」や
プロジェクト→プロジェクト追加→[アイコン]ファイル
となってますが、これの
メニューは、ちょうどメモ帳のメニューのようになって一番左のCのアイコン無し
メニューポップアップはアイコンが一切ないです。

これでもっと分かりやすくなったでしょうか…。
0168デフォルトの名無しさんNGNG
(´-`).。oO(あきらめてくれよ頼むから)
0169159NGNG
うーん、2chにすら同じ症状でた人いないみたいですねぇ。
それともあほすぎる質問なのかな。
まぁ開発には直接影響ないので >>168 さんの言う通り
諦めることにします。
再三の書き込み失礼致しました。
0170デフォルトの名無しさんNGNG

自分のスキルアップに繋がる質問なら
モチベーションあがるんだけどね〜。

0171デフォルトの名無しさんNGNG
>>170
スレタイがスレタイだけにそりゃ難しいだろ。
0172デフォルトの名無しさんNGNG
>>159
ツール -> オプション -> ワークスペース -> 画面読み取り互換メニューを使用

ぢゃないか?
0173 NGNG
AfxRegisterWndClass ( NULL, AfxGetApp ()->LoadStandardCursor ( IDC_ARROW )
って関数があったんだけどAfxGetApp()->の文法で関数の後にアロー演算子って
どんな意味があったっけ、一度みたような気がしたんだけど
調べるキーワードおせーてください
0174デフォルトの名無しさんNGNG
>>173
「アロー演算子」で調べるといいよ。
0175デフォルトの名無しさんNGNG
条件が関数の後だと思っている辺り、Cの基礎をやり直した方がいいと思われる
0176デフォルトの名無しさんNGNG
条件がCだと思っている辺り、C++の基礎をやり直した方がいいと思われる
0177173NGNG
ネットと参考書ひらけたが構造体とオブジェクトでの
文法しかのってない、もう少しヒントを、、、
0178デフォルトの名無しさんNGNG
C言語でも可能な記述。ただしアローの先が関数ってのは有り得ないけど
構造体のポインタを返す関数に対して使える。
よって175の指摘どおりCの基礎をやり直すべき。
0179デフォルトの名無しさんNGNG
>アローの先が関数ってのは有り得ないけど
ん?
typedef struct
{ HRESULT (*LoadStandardCursor)(int); } func_struct;
func_struct *AfxGetApp();

AfxGetApp()->LoadStandardCursor( IDC_ARROW);
0180173NGNG
あ、なるほど。
そのままだったね
基礎たりないね
>アローの先が関数ってのは有り得ないけど
これはありえると思うんだけど、てかメソッドか?
0181デフォルトの名無しさんNGNG
構造体内の関数ってC言語の規格だっけ?
細かい所はぐちゃぐちゃなのでスマソ...
0182デフォルトの名無しさんNGNG
失礼良く見てなかった。
関数ポインタね。さらにスマソ...
0183173NGNG
>構造体のポインタを返す関数に対して使える。
ということでいいですね
動作テストははぶいちゃいます
0184173NGNG
軽いプログラムをつくっているのですが
1 API
2 MFC
3 ウィザード
この内どれで作るかまよってます
モノはアナログ時計でリージョン使おうと思ってます
ウィザードが安定してそうなんですが、ウィンドウを
作る前にオーバーライドするのってどうしてます?
0185デフォルトの名無しさんNGNG
>>173
( ゚д゚) <ポカーン…
0186デフォルトの名無しさんNGNG
>>184
手軽に作るならMFCが楽ぢゃない?
ウィザードってよく分からんが。

0187173NGNG
申し訳ない、、
全力で説明してるんだが、なんとか読み取ってくれないかの〜
ウィザードつかったときにもうすでにフレームとユーザビュー
が完成されてるんで、なんとかリージョンをかますことができんか
考えてます、、、
0188デフォルトの名無しさんNGNG

すんませんがリージョンってなんですか?

0189173NGNG
>>184
MFCはMFCウィザード使わないでという意味です
ウィザードはMFCウィザードを使うという意味です
MFCのみだとCWndクラスをそのまま継承してリージョンが
できるが手作りだと不安定なきがしました、メッセージ関係とか特に
0190デフォルトの名無しさんNGNG
>>187
SDIで作成すると白い背景のウインドウ
1つだけじゃない? そこにごちゃごちゃ
追加していけばいいのでは?

0191デフォルトの名無しさんNGNG
昔のEmi Clock みたいなの作りたいのかな?
丸いウインドウ。

0192173NGNG
>>188
リージョンはウィンドウのスタイルを自由な形で利用する意味で
書きました^^;
普通だとダイアログかSDIの矩形なので面白くないと思って、、
で、今回は時計なので楕円です
0193デフォルトの名無しさんNGNG
>>192
漏れもそういうのは作り方わかんないから、他の人の
アドバイスきぼんぬ。
0194173NGNG
>>190
SDIにごちゃごちゃ書くときに
ウィンドウの形を変えるには
ViewのPreCreateWindowメソッドに書いたらええですか?
Frameはほっといたらいいよね?

>>191
そう
0195デフォルトの名無しさんNGNG
ttp://techtips.belution.com/ja/vc/0007/

検索したらすぐ出てきたぞ。
0196173NGNG
>>194
なるほど、こりゃええわ
でも、APIやな

MFCウィザードやったらFrameクラスいじったらええみたいや
なんとかできそうや、ほな
0197デフォルトの名無しさんNGNG
>>188
DVDで使われている地域コードのこと。
■ このスレッドは過去ログ倉庫に格納されています