[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 03/18 18:44 / Filesize : 201 KB / Number-of Response : 779
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2007/01/10(水) 00:00:39 ]
1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

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

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

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

過去スレ、関連スレなどは>>2-5


285 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 18:10:28 ]
スプラッシュムービー

286 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:14:03 ]
VC++.NET2003 Windowsフォームを使用して開発しています。

1画面でかなり多くの数のコントロールを貼り付けているのですが、
デザイン画面を開くとき重くて時間が掛かっています。
また、Releaceでコンパイルしようとすると30分掛かっても終わりません。。
解決策はあるのでしょうか。

1画面で多くのコントロールを表示する理由は、
画面を切り替えずに複数の画面(?)を表示させるという仕様になっているからです。
今はパネルでコンテナ化し、各画面を出したい時にパネルの表示・非表示を
切り替えているのですが、正直限界です。

良い方法があればぜひ教えて下さい。

287 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 08:05:43 ]
メモリを増やす

288 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 08:16:12 ]
お母さんに相談する。

289 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 08:49:20 ]
メモリは1ギガなんですけど・・・
それでも足りないとなると、他の人に委託しずらい等、
色々支障が出てくると思います。
それに、2ギガに増やして早さが倍になっても、
やっぱり遅い気がします。。

290 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 09:16:16 ]
それはメモリの問題ではなくてCPUが余りにも余りにもなんではないだろうか。

291 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 10:23:42 ]
でも1GBと2GBでは段違いの差が出る

292 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 10:49:16 ]
数ヶ月前に購入したマシンなので、環境を変える事はできないです。
そこまで最新のマシンでなければ動かせないのは
やはりおかしいと思うんです。

画面を分け、あたかも1つの画面で動くように見せるという方法がありましたので、
それでやってみたいと思います。
ありがとうございました。

293 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 11:47:33 ]
コントロール並べすぎなのがわるいと気づけ



294 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 12:31:10 ]
それはもちろん分かってました。
だから、それ以外の方法があれば教えて欲しいと思い、
相談させてもらったのですが、、、。

295 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 12:40:13 ]
コントロールが問題になるほど多数あるということは、それらの配置には規則性があるはずだ。
だとすれば、ポトペタせずに自前で生成すればいい。

296 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 19:54:33 ]
うーん。
規則は、ある部分もあるのですが、
画面10枚分ぐらいのコントロールを1つのフォームで配置してるので
自分で書くのはちょっとしんどいですね。。
変わる可能性大ですし。

結局、ユーザーコントロールを画面分用意してやる事にしました。

297 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 23:51:25 ]
……多いと思った段階で分けようって思わないもんかね。

298 名前:デフォルトの名無しさん [2007/02/03(土) 00:14:14 ]
MFC,SDIでCEditViewを使ってファイルから読み込んだ結果を
エディットボックスに表示しようと考えています。

表示の仕方は下記です。
void CtestView::setEditBox(char *str){
CEdit &edit = GetDitCtrl();
edit.SetWindowText(str); }

ファイルを読み込んで処理した結果をstrに入れるという感じです。
メニューのファイルオープンから読み込んだ場合は下記の
処理でいけるんですが・・・

CtestView *pView = ((CtestView*)(((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView()));
pView->setEditBox(str);

実行ファイルにファイルをドロップして起動させた場合、
ドキュメントの
BOOL CtestDoc::OnOpenDocument(LPCTSTR lpszPathName)
に入るようですが、ここから上記のsetEditBox()を呼び出してもエラーに
なります。
原因は起動時でまだViewが出来ていないことであることは分かっているのですが、
どのタイミングで呼び出せばよいのか分かりません。

どうすればよいのでしょうか?

299 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:51:59 ]
>>298
新しいドキュメントを開いたあとは必ず
void CtestView::OnInitialUpdate()
が呼び出されるので、そこで
setEditBox(GetDocument()->GetYourString());

300 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 06:22:59 ]
ファイル読んで表示が終わってからもう一回表示しなおし?
読むときに処理すればいいのでは?

301 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 07:40:52 ]
>>299
今環境がないので試せないですが、そのタイミングでは必ず
ビューが作成されているんですか?

>>300
読むときに処理すればいいんですが、アイコンにドロップして
起動させた場合はタイミングによってビューが作成されていないので
エラーになるんです。

302 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 07:44:51 ]
表示しなおしじゃなく、299をやった上で

> CtestView *pView = ((CtestView*)(((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView()));
> pView->setEditBox(str);

は当然削除だろ。個人的にはCtestDocにCtestView.hをincludeするのは、やってはいけない事だと思う。

303 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 07:48:31 ]
>>301
ドキュメントを読んだあとにビューを更新するために用意されているメソッドだし
当然ビューは存在してるよ。



304 名前:298 mailto:sage [2007/02/03(土) 08:20:28 ]
>>303
分かりました。
ありがとうございます。

305 名前:デフォルトの名無しさん [2007/02/03(土) 09:14:25 ]
>>272ありがとん

306 名前:デフォルトの名無しさん [2007/02/03(土) 09:54:09 ]
>>270
ありがとうございます。

せっかく教えて頂いたのにアレなんですが、インストールしようとしたところ
ちょっとCドライブの空きが足りなかったのでしばらくは秀丸とbccでやってみます。

307 名前:いーぶいしー [2007/02/03(土) 16:42:45 ]
クライアント(.exe)から
自分で作成したDLLに定義されているClassのpubicなメンバ変数に、アクセスしたい場合、
そのメンバ変数が構造体だと、その構造体の定義はクライアント側にも必要なのでしょうか?
定義を一箇所(DLL側のみ)にはできないのでしょうか?

308 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 16:49:16 ]
>>307
もちろん必要、共通でinlcudeする*.hファイルに定義しておく。

C++/CLIのrefクラス、ref構造体は例外だけど

309 名前:デフォルトの名無しさん [2007/02/04(日) 01:12:51 ]
二色刷りで動物の絵が表紙にデカデカと書いてある本を探しているのですが、
何方かこの本の題名を知らないでしょうか?
なんでも辞書みたいな感じの本で延々とコードが書いてあるらしいのですが。

あとみなさんはどのような本で勉強していますか?
ちなみに僕は学校の授業でやったもののほぼ未経験です。

310 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 01:52:01 ]
> 動物の絵が表紙にデカデカと書いてある本
沢山あるぞ。好きなのを選ぶが良い。
ttp://www.oreilly.co.jp/index.shtml

> どのような本
一冊で完結なんて出来ないんだから
自分の目的にあった本を
(良い意味で)適当に買いつづけていけばいいと思うよ。

↓参考
推薦図書/必読書のためのスレッド PART33
pc10.2ch.net/test/read.cgi/tech/1167140188/l50


311 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 18:14:46 ]
すいません。御存知の方がいたら教えてください。
環境:Windows XP,VC++6.0 「_MBCS」指定
Windowsのアプリを作っているのですが、リストビューの部分のみにUnicode文字のデータを表示
させたいので以下のようにリストビューの部分のみワイド文字仕様の構造体を使用しています。
リストビュー設定部のソース
static HWND hList;
LV_COLUMNW lvcol;LV_ITEMW item;
InitCommonControls();
hList = CreateWindowExW(0,WC_LISTVIEWW, L"",WS_CHILD | WS_VISIBLE | LVS_REPORT,
0, 0, 300, 200,hWnd,(HMENU)ID_LISTVIEW,hInst,NULL);
lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvcol.fmt = LVCFMT_LEFT; lvcol.cx = 100;
lvcol.pszText = L"項目1"; lvcol.iSubItem = 0;
ListView_InsertColumn(hList, 0, &lvcol);

item.mask = LVIF_TEXT; item.pszText = L"内容1";
item.iItem = 0;item.iSubItem = 0;
ListView_InsertItem(hList, &item);
これで実行すると、リストビュー部に表示される文字が全て16進で表示されてしまいます。
正常に「項目1」,「内容1」で表示させる方法は、無いのでしょうか?
ListView_InsertColumnの部分のヘッダファイルを見ると
#define ListView_InsertColumn(hwnd, iCol, pcol) \
(int)SNDMSG((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN FAR*)(pcol))
となっているから無理なのかな?よろしくお願いします。


312 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 18:39:30 ]
>>311
とりあえずListView_InsertColumn中のSNDMSGがSendMessageAになってる。
LVM_INSERTCOLUMNもAつきのほうだし。
マクロは全滅なきがする。

313 名前:311 mailto:sage [2007/02/04(日) 21:09:25 ]
>>312
ありがとう。
やっぱプロジェクト自体をUnicode仕様にするしかないのかな?
>マクロは全滅なきがする。
マクロ以外で実現する方法ってあるの?




314 名前:311 mailto:sage [2007/02/04(日) 21:25:03 ]
とりあえず以下のように自分でマクロを作ってみたらうまく表示できた。
#define ListView_InsertColumn_W(hwnd, iCol, pcol) \
(int)SendMessageW((hwnd), LVM_INSERTCOLUMNW, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMNW FAR*)(pcol))
これだけで問題ないんだろうか?


315 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 21:38:50 ]
>>311-312
SNDMSGは単にSendMessageとして定義されているから、
当然プログラム全体をUNICODE化すればマクロがそのまま使えるんだ。

逆に言えばSendMessageがSendMessageWになりさえすればいいわけだから、
UNICODEとしてマクロを使いたい部分の前にこれ、
#pragma push_macro("SendMessage")
#undef SendMessage
#define SendMessage SendMessageW
後に#pragma pop_macro("SendMessage")を置けばいけると思う。
push_macro/pop_macroがVC6でも使えるかどうかは知らないけど。

316 名前:311 mailto:sage [2007/02/04(日) 22:00:59 ]
>>315
ありがとう。
#pragma push_macro("SendMessage")
#undef SendMessage
#define SendMessage SendMessageW
InitCommonControls();


item.mask = LVIF_TEXT; item.pszText = L"内容1";
item.iItem = 0;item.iSubItem = 0;
ListView_InsertItem(hList, &item);
#pragma pop_macro("SendMessage")
上記のように修正してみたが、コンパイルは通ったが、表示結果は16進のままだった。
VC++6.0では、push_macro/pop_macroが使えないのかもしれない。
>>314に書いた方法でやってみます。
ありがとう。


317 名前:298 [2007/02/06(火) 07:43:06 ]
OnInitialUpdate() で実行することが出来ました。
もう一つ教えてください。
エディットボックスなどのコントロールの初期化処理を
したいのですが、どのタイミングでやればいいんでしょうか?

WM_CREATEではまだコントロールが作成されていません。
OnInitialUpdate() では問題ないのですが、最初の一度だけと
いう訳にはいきません。

static BOOL flag;
を使ってifで判定して最初だけ実行すれば出来たのですが、
もっとスマートな方法はありますでしょうか?

318 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 08:54:09 ]
OnInitialUpdateは最初の一度という意味

319 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 10:39:28 ]
>>317
Documentが変わってもView内のコントロールの位置やサイズが変わらない
タイプのアプリの場合は、自分もOnInitialUpdateでstaticなフラグ使って
一回だけやってる。特に問題ないと思うけど。

これ以上はアプリ形態と初期化内容が判らない限り何ともいえない。

320 名前:デフォルトの名無しさん [2007/02/06(火) 16:24:36 ]
ヘッダファイルに変数を追加するだけで
アプリケーション起動時にOSがエラーを出してくることがあります
もう一つ二つ意味のない変数を追加すれば治ることもあるのですが
これはどうしてなのですか?変数追加だけなので
プログラムの中で使ってもいません名前も被っていないです
どんな変数でもこの症状が起こるときは起こります

321 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 16:28:09 ]
領域外アクセスとかのバグが変数追加で表面化したんだろ

322 名前:デフォルトの名無しさん [2007/02/06(火) 16:29:38 ]
つまり他の変数になにか問題があるということですか?

323 名前:デフォルトの名無しさん [2007/02/06(火) 16:41:35 ]
Runtime Error!
Program:_xxxxxxxxxxx ←exeの場所
abnormal program termination

こんな感じで表示されます
今回は他の変数を追加しても直りません
助けてください。アクセス外ということは文字列かなにか
静的に領域をとってる配列等が原因なのでしょうか?



324 名前:デフォルトの名無しさん [2007/02/06(火) 16:48:23 ]
文字列20文字もいらない文字の領域を200にしたらいけました
うーん無駄に領域を確保すれば直るなんて謎だ

325 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 16:54:18 ]
謎っつーか、メモリの管理がすげー甘いんじゃなかろうか
一度きっちり調べ直してみることをお薦めする

326 名前:デフォルトの名無しさん [2007/02/06(火) 17:14:52 ]
すいません独学なんですがメモリ管理では
全てのメンバ変数にdeleteをしたほうがいいのでしょうか?

327 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:19:11 ]
newしたものにはdelete、new[]したものにはdelete[]。
逆にnewしていないものにdeleteは要らない。

ただし可能な限り、std::vectorなどnew[]/delete[]を隠匿したものを使ったり、
boost::shared_ptr/arrayやboost::scoped_ptr/array、std::auto_ptrなど、
せめてdelete/delete[]だけでも隠匿して使うようにすべき。

328 名前:デフォルトの名無しさん [2007/02/06(火) 17:22:56 ]
文字列などは配列で静的に確保しないほうがいいのでしょうか?
newで動的確保するべきなのですか?

329 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:26:58 ]
大量にバッファを必要とするのならともかく、
そうでないのなら静的確保で十分

330 名前:デフォルトの名無しさん [2007/02/06(火) 17:30:17 ]
私はその他のオブジェクトもnewで動的確保はしていませんでしたので
deleteを使うところが見当たりません
原因は全て静的にしているせいなのでしょうか?

331 名前:デフォルトの名無しさん [2007/02/06(火) 17:36:36 ]
いまだにdllの仕組みが理解できません。
猫でものホームページ見ながら作ってみたんですが
dllを作った時のヘッダを含めて
かつその時出来たlibファイルを
#pragma comment(lib,"〜.lib)
か、リンカの設定でリンクしないと使えないのは
libを通してやらないと、dll内の関数を呼び出すことは出来ないと
いう事なんでしょうか。
LoadLibraryを使っても意味無かったので、よくわからないです。
どなたか教えて頂ければ幸いです。

VS2005というIDE環境で勉強してるから楽出来てる分その楽
出来ている理由が解って無く勉強不足になってると自らは思います。


332 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:41:21 ]
>>330
「静的」「動的」の意味が分かっていないような気がする。

コードの中で
  int i;
  char String[80];
とかやるのが「静的確保」。これらの変数は実行ファイルがメモリ上に
ロードされた時点で既に存在していて、終了と同時に消滅する。
グローバル変数だろうが(クラスの)メンバ変数だろうがそれは同じ。
したがって delete/delete[] は必要ない。

333 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:48:03 ]
>>331
LoadLibraryで読み込んだDLLの関数を呼び出すには、
GetProcAddressで関数のアドレスを取得するんだよ。



334 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:49:34 ]
>>331
VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、
この2つは完全に別種のもの。中身は一緒、ただ使い方が違う。

LIBファイルは静的リンク用のファイル。
自分の実行ファイルの中に(コンパイルの時点で)取り込んでしまって、
あたかも自分の書いたコードと同じように使えます、というもの。
だからLIBを組み込むときにはリンカなり#pragmaなりで予め設定をして、
コンパイルのときにリンクすることを明示しなければならない。

DLLは動的リンク用のファイル。
一般的には、まずLoadLibrary()でDLLファイルを読み込み、
(そこでもし成功したなら)次にGetProcAddress()で
DLLの中に埋め込まれた関数を取り出して使う、
最後にFreeLibrary()でDLLを自分のプログラムから取り外す、
という段取りを踏む。
コンパイル時には存在しなくても構わない、実行時にあればいい。

335 名前:デフォルトの名無しさん [2007/02/06(火) 17:55:16 ]
>>332
うーんということは私が知らず知らずのうちに
どこかで動的確保しているということでしょうか?

336 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 18:02:34 ]
>>334
>VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、 
このLIBはインポートトライブラリ。
LoadLibraryやらGetProcAddressやらメンドクサイ処理をしてくれる短いモジュール。
これを静的にリンクすればDLLの呼び出しが簡単に出来る。
インポートトライブラリがあるなら極力使ったほうが楽。

337 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 18:05:31 ]
インポートトライブラリ
インポートトトライブラリ
インポートトトトライブラリ

338 名前:320 [2007/02/06(火) 18:12:06 ]
スレッドオブジェクトの配列をグローバル変数にしてるんですが
これはまずいですか?せめて原因をつきとめたいです

339 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 18:12:57 ]
>>335
動的確保はスタックに積むケースとnewやmallocなどでヒープから確保するケースがある。
静的確保はstaticで定義した場合(明示的にstaticをg使わないケースも含む)
クラス内のメンバー変数はクラスがどう生成されたかによる。

>>336
誤字をさらにコピーしてしまったか、インポートライブラリだな。


340 名前:331 mailto:sage [2007/02/06(火) 18:44:51 ]
>>333さん
>>334さん
>>336さん
ご教授ありがとうございました。
GetProcAddress()FreeLibrary()ってのも必要なんですね。
それと、dll作った時のlibはインポートライブラリなんですね。
「プログラムはなぜ動くのか」って本を読んだにもかかわらず
流し読みで頭に入っておらず再読したらちゃんと書いてありました。
はぁ、馬鹿だな俺って。

341 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 19:56:07 ]
SendMessageであるウィンドウにDボタンを送りたいのですが、
SendMessage(hwnd,
このあとをどうすればよいのでしょうか。
ご教授願います。

342 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 20:06:34 ]
>はぁ、馬鹿だな俺って。
それに気がつくことができれば、今後はもっと「馬鹿」じゃなくなるでしょう。
そうやって向上できる人間が、「賢い」のです。
#で、「ご教示」ですね。

>>320
ソース公開しちゃった方が話が早そうですね。

343 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 20:07:43 ]
>>341
Dボタンってなんですか?
マウスクリックのイベントを送りたいなら、Spy++でどういうパラメータを渡せばいいか覗いてみると宜しいかと。



344 名前:317 mailto:sage [2007/02/06(火) 21:25:08 ]
>>319
フラグを使うのは普通なんですね。
ありがとうございました。

345 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 00:17:13 ]
>>320
いろいろ言われてるけど、とりあえず
配列利用時に、添え字がオーバーアクセスしてないか確認するべし。

> 原因を突き止めたい
デバッガを上手に利用しましょう。
ある特定のメモリ空間にアクセスした時にbreakかけることも出来たはず。
詳しくは「ブレークポイント」をMSDNで調べてくれ。

346 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 00:59:43 ]
基礎的すぎる質問なんですが、


ダイアログエディタで適当にあれこれコントロールを張ったとき、
VC++2003でビルドしたプログラムを98SEで走らせると、

コントロールのマルチバイト文字がすべて文字化けする。
エディットボックスに直接マルチバイト文字入れても同じく。
メニューバーやステータスバーは文字化けしない。

文字はTCHAR系統を使い、ビルドした結果はすべてwchar_tになっているはず。


このような状況で、文字化けさせない用にする方法を教えてくださいませんでしょうか?

347 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 01:47:02 ]
9xはUNICODE対応していないから、MSLUを使うか非UNICODEにするかしないとだめだよ。

348 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 02:07:28 ]
2000とXPは内部コードはUnicodeだけど98とかはどうなんだろう。
localeまわりかな?Unicode適応しないでビルドしたらSJISになっていけるのかな?

349 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 02:23:29 ]
>>347
なるほど…
わかりました。
ありがとうございました。

350 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 09:03:22 ]
>>346
マルチバイト文字(列) と ワイド文字(列) の意味を
使い分けられて無い気がするぞ。

マルチバイト文字列は char* で
ワイド文字列は wchar_t* だ。

351 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:14:21 ]
そもそもダイアログでコードページ932で作ってたりして

352 名前:デフォルトの名無しさん [2007/02/07(水) 10:18:25 ]
クラスのメンバ変数についての質問です
グローバル変数としてビュークラスの外で宣言したクラスの
メンバ変数は0や空文字で初期化されてるんですが

そのクラスをビュークラスのメンバとして宣言するとそのクラスの
メンバ変数が初期化されないのはどうしてですか?

353 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:26:03 ]
>>352
C++スレ行くか
C++の入門書でも読んで勉強してください



354 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:31:05 ]
>>353
わからないんですね

355 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:36:05 ]
入門書にしっかり書いてある

356 名前:デフォルトの名無しさん [2007/02/07(水) 10:39:04 ]
pc10.2ch.net/test/read.cgi/tech/1167476845/
ではここで教えてください

357 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 11:03:34 ]
グローバル変数はコンパイル時に場所が決まってるから

358 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 16:30:17 ]
というより、C/C++の規格でそうなると定められているためと言ったほうがいいと思う。

359 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 16:33:10 ]
どうだろね。
仕組みから入ったほうが、そう決まってるからそうなんだ、より納得いくかもしれんし

360 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 17:01:56 ]
実装がそうだからそれが正しいという保証はどこにもない

361 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 17:25:43 ]
逆にこれは実装が先にあって仕様が追いついた例でもあるな。
構造体のコピーも似たようなもの。

362 名前:デフォルトの名無しさん mailto:age [2007/02/07(水) 18:49:23 ]
VC++7.0でライブラリファイルをリンクする方法を教えてください
winsockライブラリを使いたいのでお願いします

363 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 19:23:53 ]
#pragma comment(lib, "Mswsock.lib")



364 名前:269 mailto:sage [2007/02/08(木) 08:10:55 ]
269です。たびたび申し訳ありません。

SDK入れてWindowsアプリが作れるようになったんですが、ダイアログやアクセレータ等の
リソーススクリプトファイル(.rc)をエディットするResEditorがついてないみたいなので断念しそうです。
というかそれが目的だったので。
Windowsフォーム(.h)は作れるみたいですがどうしていいのかわかんないです。

Visual Studio 2005 Academic Editionだったらリソーススクリプトファイル(.rc)の作成は可能でしょうか?
可能ならば購入したいと思います。よろしくお願いします。

365 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 10:01:56 ]
MSに訊け

366 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 10:07:23 ]
>>363
ありがとうございます

367 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 10:35:00 ]
>>364
可能だがフリーのエディタもあるよ

368 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 11:04:04 ]
メモ帳でええがな

369 名前:デフォルトの名無しさん [2007/02/08(木) 11:50:13 ]
VisualStudio2005C++ExpressEditionにて
#include "stdafx.h"
#include"stdio.h"

int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp=fopen("d:/test.txt","rw");
というコードを書きました。
FILE文付近で「〜Expression:(Invalid file open mode",0)〜」
というダイアログボックスがでます。
CRTセキュリティ強化されたためということですが、このセキュリティを
弱くしたいと思います。どのようにすればよいですか?

370 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 11:50:39 ]
WinSockのAPIを使ってphpから文字列を取得することはできますか?

371 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 12:12:23 ]
>>369
セキュリティ強化用の関数が追加されたけど
標準関数の仕様はかわらないのでは?

372 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 12:18:22 ]
>>370
プロトコル次第

373 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 12:20:17 ]
>>372
httpなんですが
あとサーバーに送る文字列の改行コードは\nで大丈夫でしょうか?



374 名前:デフォルトの名無しさん [2007/02/08(木) 13:09:22 ]
>>371
標準関数の仕様はかわらないのでは?
たぶんそうだと思うのですがうまくいかないです。


375 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 13:18:46 ]
エラー通り"rw"が悪い

376 名前:デフォルトの名無しさん [2007/02/08(木) 14:04:09 ]
>>275
VisualStudio2003だとうまくいくのですが、
構文的にrwなんてつけたらだめなのですか?

377 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 15:05:50 ]
unicodeかなんかじゃないの?

378 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 15:56:14 ]
"rw" なんてのは無い

379 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 16:37:09 ]
MSDNこういう例ものってるし "rw" もあるだろ

msdn2.microsoft.com/ja-jp/library/yeby3zcb(VS.80).aspx

fopen("newfile.txt", "rw, ccs=<encoding>");

380 名前:デフォルトの名無しさん [2007/02/08(木) 17:11:52 ]
多分すごい有名な
「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」
を使って今勉強中なんですが、
241ページのサンプルプログラムで、
CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、
’旧ペン’と銘打って保存って書いてありますが、
これをする意味がわかりません。
わざわざポインタでなぜ確保しているのでしょうか?
pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、
別に’旧ペン’を保存しておく必要があるのでしょうか?
私が簡単に確認した程度では、
oldPen 自体設定しなくても実行可能でしたし、
最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。
他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、
やればやるほど意味がないのではという考えに傾きます。
大変限定的な質問ですが、
よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば
教えていただけないでしょうか?




381 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:21:08 ]
MSDNのサンプルだとこんな感じだね

void CMyView::OnDraw( CDC* pDC )
{
CPen penBlack; // Construct it, then initialize
if( newPen.CreatePen( PS_SOLID, 2, RGB(0,0,0) ) )
{
// Select it into the device context
// Save the old pen at the same time
CPen* pOldPen = pDC->SelectObject( &penBlack );

// Draw with the pen
pDC->MoveTo(...);
pDC->LineTo(...);

// Restore the old pen to the device context
pDC->SelectObject( pOldPen );
}
else
{
// Alert the user that resources are low
}
}

382 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:24:47 ]
forums.belution.com/ja/vc/000/049/00.shtml
メモリ上のDCは元に戻すべきか?

383 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:24:47 ]
>>380
ttp://msdn2.microsoft.com/en-us/library/ms533272.aspx
>An application should always replace a new object with the original, default object after it has finished drawing with the new object.



384 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:28:50 ]
げ、マルチか

385 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 18:10:14 ]
だな
pc10.2ch.net/test/read.cgi/tech/1164787254/200-






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<201KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef