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


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

■MFC相談室 mfc17d.dll■



1 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 10:38:31 ]
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■MFC相談室 mfc16d.dll■
pc8.2ch.net/test/read.cgi/tech/1146117893/

321 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 09:00:21 ]
>新規作成でできるもんがドキュメント+ビューを型にしたインスタンスであることって方が
>重要のような気がするがわかっているならOK。

SDIでは100%成り立たないし、単一のドキュメントタイプをもつMDIなら自明で重要性は感じられない。
これが重要な意味を持つのは複数のドキュメントタイプをもつMDIしかないように思った。
確信犯だと思ったんだが、気に障ったのなら謝るよ。漏れの知らない世界があるんだろうね。

322 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 10:00:53 ]
>>321
え?じゃあ、君の勝手な妄想で俺につっかかってきたの?
それとあきらかにその文章で複数ドキュメントタイプの説明なんて書いてないのにその態度はなんなの。
しかも、確信犯の使い方も間違ってるし。
こんなの業務でやったら大変だぜ。改めろよ。

323 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 10:23:18 ]
いや、改めなくていいから一切社会活動を行なわないでください。

324 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 10:27:37 ]
>VS2005でMFCアプリのデフォルトプロジェクトがMDIになったのは大失敗な気がする。
これ昔からだろ、2005ではじめて触ったのか

325 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 11:07:34 ]
SDI MDI
MFC以前からある

ドキュメント/ビュー
MFC2.0で追加された

326 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 12:59:31 ]
CFrameWndの派生クラスをドキュメントテンプレートから閉じるにはどうしたらいいでしょうか。
つまり class CHogeDocTemplate : public C[Single/Multi]DocTemplate
の OpenDocumentFile で特定のフレームを閉じる様にしたいのですが、
閉じる時に CFrameWnd::DestroyWindow や OnCloseDocument を使うと
OnClose が呼びだされないがこれで大丈夫なのか、
だめだとしたら正しい閉じ方はどうなのかを教えていただきたいのです。
よろしくお願いします。

327 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 13:14:37 ]
普通に閉じればいいじゃん

328 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 13:34:04 ]
CFrameWnd::OnCloseからDestroyWindow呼んでるから
OnClose が呼びだされないのは当たり前

329 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 13:39:10 ]
>>327
普通にとはどのようにでしょうか?

>>328
その通りです。OnClose から閉じる方がドキュメントを閉じる等の処理も
正しく行われるように読めたので出来ればそうしたく質問しております。



330 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 13:47:01 ]
OnCloseからOnCloseDocument呼んでるから
OnCloseDocumentからOnClose が呼びだされないのは当たり前

331 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 21:50:20 ]
OnCloseはウィンドウを閉じる時
OnDocumentCloseはドキュメントを閉じる時
と考えれば何も問題ないべ

332 名前:デフォルトの名無しさん [2007/01/16(火) 04:24:49 ]
CPUやメモリをあまり気にせずにプログラム書いてたら
起動しただけでCPU使用率50%という異常な状態になっていました。
このプログラム自体、起動と同時に行う処理はほとんどなく、
SDIのスケルトンと同じようなもののはずなんですが。。

処理がないのにCPU使用率が高いまま下がらないのは
原因としてどのようなことが考えられますか?
もしくは原因を調べる方法とかってありますか?

333 名前:win32apiスレ17 mailto:sage [2007/01/16(火) 04:36:15 ]
pc10.2ch.net/test/read.cgi/tech/1168708801/17
に最初書き込みましたが、こちらのが適切かなと思って移動してきました。

Acrobatのページサムネール表示、あるいはPowerPointのスライド一覧表示のように、
イメージのリストを表示し、かつ、その順番をマウスのドラッグで調整したいと思ってます。
ドラッグ中、イメージが挿入される場所にカーソルの様な縦線が出てきて欲しいなと思ってます。

こういうコントロールの既存の実装やコードのサンプルなど御存知でしたら御教示頂けないでしょうか?
codeguru、codeprojectは廻ってみたものの、どうにもサムネールの表示どまりでして・・・


334 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 05:27:51 ]
>>332
情報少なすぎでどうespしろと?


335 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 05:36:21 ]
>>333
自分でエディタとか作ったことない?


336 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 08:03:52 ]
>>332
プロファイルで

337 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 09:03:52 ]
ある場所から突然malloc(255)がNULLになります。直前のmallocは必ず成功で、場所は一定
HEAP、スタックを2000000(2M)や20000000(20M)で試しましたが、タイミングや場所は変わらないようです
お手上げです。解決策をお知りの方おりませんか?

338 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 09:15:52 ]
直前のmallocまでのすべての戻り値をここにさらしてごらん

339 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 09:42:17 ]
直前のmallocの戻り値でいいですか?

malloc(255);//必ず成功。 戻り値:0x00b72e68
WideCharToMultiByte
MultiByteToWideChar
malloc(255);//必ず失敗

こんな感じです



340 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 09:59:04 ]
ヒープ壊してんじゃねえの

341 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 10:05:25 ]
解決しました!
MultiByteToWideCharを2度使いmallocのサイズを指定していたのですが、wchar単位でNULLが含まれていないため少なくなっていました
成功するほうをmalloc((len+1)*sizeof(wchar_t));で動きました。
ありがとうございました。

342 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 12:49:33 ]
CStringWじゃ駄目なのか?

343 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 17:35:59 ]
>>332です。

>>336
ありがとうございます。
プロファイルで調べたところOnIdle()のreturnが原因だったようです。

そのreturnのことで質問なのですが、
OnIdle内でのレンダリングによってCGアニメーションを表示するプログラムを書いているのですが、
return TRUE;だと前述のようにCPU使用率が高くなるのですが、
アニメーションは正常に表示されます。
return CWinApp::OnIdle(lCount);だとCPU使用率の問題は解消されるのですが
OnIdle()が呼ばれる間隔が長くなるためか、アニメーションが滑らかに表示できません。

この2つを同時にクリアできる良い方法はありませんか?
よろしくお願いします。

344 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 19:02:17 ]
んー、、、目的の fps が取れてるなら Sleep(0)を呼ぶとかどうだろう、Sleep(1)でもいいが

345 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 19:27:01 ]
ほっといてやれ

346 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 21:57:57 ]
>>344
ありがとうございます!!
どうやらすごく基本的なことのようですね。。

347 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 21:52:58 ]
マルチラインエディットボックスで
水平方向のスクロールバーの位置から
列の何文字目から表示している知りたいのですが
どうすればいいのでしょうか?

やりたいことはエディットボックスの中身を編集して
かきかえても書き換える前と同じ位置を表示したいのです。
LineScrollを使用すれば垂直はうまくいくのですが、水平がうまくできません。

また、SetScrollPosを使用してもエディットボックス内が更新されないのでこまっています。

348 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 23:52:25 ]
>>347
「書き換えても書き換える前と同じ位置」というのもよくわからないんだけど、
わざわざスクロールバーを使っているのはなぜ?
単純にGetSelでカーソル位置を取得しておいてSetSelで戻すだけじゃダメ?
あと、エディットボックスの更新するにはUpdateData(FALSE)とUpdateWindow()
じゃない?
質問がよくわかってないのではずしてるかも知れんけど。

349 名前:347 mailto:sage [2007/01/19(金) 14:44:11 ]
>>348 さん
レスありがとうございます。

自己解決しました



350 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 16:13:48 ]
CWnd* CWnd::GetDlgItem(int nID); で得られるCWndのインスタンスの解放は
誰に責任があるんでしょうか?ソースコードを少し追ってみると、独自のアロケータ
でごにょごにょやってるような感じなんですが。

351 名前:350 mailto:sage [2007/01/19(金) 16:23:11 ]
自己解決しました。こういう一時的に作ったオブジェクトはMFCが勝手に
CWinApp::OnIdle() → CWnd::DeleteTempMap() あたりで解放するんですね。



352 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 16:23:37 ]
ソース追うのもいいけど、ヘルプもみよう

353 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 16:34:29 ]
いや、だってヘルプには「返されるポインタは、一時的なポインタです。後で使用するために保存しておくことはできません。
」としか書いてないから、誰がどこでいつ解放するか気になるじゃん?

354 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 16:39:54 ]
一時的なポインタを解放するのか?

355 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 17:09:59 ]
そりゃ解放するでしょ。問題は誰がいつどこで開放するかであって、それに
よって「一時的なポインタ」とやらの有効範囲が決まってくるわけだから。

356 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 17:21:08 ]
クラスがなんだかわかってないのでは?

357 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 18:22:15 ]
あれ、FromHandle()あたりからDeleteTempMap()をたどって知ったんだったかな、、、
ヘルプだけで一時的なCWnd*がいつ消されるかも読んだ気がしたが・・・

358 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 18:27:04 ]
>>357
それがヘルプに書いてあれば悩む必要がないのにね。

359 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:39:22 ]
すいません。
自作でエクスプローラ風アプリケーションを作りたいのですが、
それ風なサンプルを説明しているサイトとか知りませんか?

全く、それ系のインターフェイス名も知らないんで、
ググれなく困っています。



360 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 19:00:58 ]
せっかく教えても無駄になりそうだからやめておこう

361 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 20:54:50 ]
>>359
えー!!
そんな殺生なぁ

362 名前:361 mailto:sage [2007/01/22(月) 20:56:48 ]
>>360
おねがいっす!!

363 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 11:03:34 ]
質問なんですけど
AppクラスからDocumentクラスのポインタの取得方法を教えてください
よろしくお願いします。

364 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 11:12:52 ]
自分で持ってそうな気がするけど

365 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 11:13:20 ]
Viewが一つだけなら
GetFirstDocTemplatePosition()、GetNextDocTemplate()、GetFirstDocPosition()、GetNextDoc()
あたりで。

366 名前:363 mailto:sage [2007/01/23(火) 11:19:24 ]
>365
GetFirstDocPosition()、GetNextDoc()で取得できました。
ありがとうございます。

367 名前:デフォルトの名無しさん [2007/01/25(木) 16:20:26 ]
スライダについて質問です

slider.SetRange(0, 100, true);
slider.SetTicFreq(10);
slider.SetPos(0);

このようなスライダを作り、スライダで設定した値をEditBoxに表示しています。
このとき、スライダのつまみをドラッグした場合には正しい値が得られますが
クリックで設定しようとした場合が上手くいきません

例えば、70を設定しようと思って該当する目盛りのあたりをクリックすると、
70の位置には来ず、マウスボタンが押されるたびに60と80で切り替ってしまいます。
クリックでも値を設定できるようにするには、何か特殊な処理が必要なのでしょうか?




368 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:32:40 ]
スライダの現在位置が0の時に70の位置をクリックしたら
0+GetPageSize()で得られる位置に移動するのがスライダ
コントロールの仕様だと思うんですが。

仕様が気に入らないのであれば、自分で必要なイベントを拾ってSetPos()すれば良い。

369 名前:デフォルトの名無しさん [2007/01/26(金) 01:06:48 ]
CEdit::SetFoces()に関する質問です。

任意のテキストフィールドをフォーカスさせたい場合は
CEdit::SetFocus()を行うと実現できますが、
このとき、フォーカス対象のテキストフィールドに文字列が
入力されているとき、文字列全体を範囲選択した状態で
フォーカス移動させるにはどのような手法があるでしょうか?

イメージとしてはタブでフォーカス移動させたときのような感じです。

よろしくお願い致します。



370 名前:369 mailto:sage [2007/01/26(金) 01:14:49 ]
ごめんなさい。自己解決しました。

CEdit::SetFocus();
CEdit::SetSel(0,-1);
で実現できるようでした。

371 名前:デフォルトの名無しさん [2007/01/27(土) 01:54:56 ]
ダイヤログベースのアプリです。
英語化について教えてほしいです。

タイトルアイコンをクリックした時のシステムメニューや、
AfxMessageBoxを表示させたときのキャンセルの表示など
あらかじめ用意されている部分に日本語が表示されますが、
すべて、一切がっさいを英語にしたいと考えています。

どのような方法で英語かすることができるでしょうか?

372 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 02:56:08 ]
>371

アプリケーションを実行するとき、デフォルトのコードページを英語に変更する。
でも、システムのバグをたたくこともあるからお勧めしない。


373 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 06:21:45 ]
英語環境でビルドしてあるやつでもそうなるから
OSの問題だろ

374 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 13:08:41 ]
だから実行時指定

375 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 15:15:32 ]
>>371
日本語関連を全くインストールしていない、設定も悉く日本にしていない端末で、実行する。

376 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 15:21:43 ]
MFCは全くの初心者なのですが、MFCにもバージョンはあると思うのですが
Visuall C++(VC6)に付属のMFCのバージョンはいくらになりますか?


377 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 15:31:00 ]
6.0

378 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 17:48:04 ]
WikipediaのMFCの項目、批判の所見てワロタ。
どこの知障だよ、書いたの。

379 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 18:41:44 ]
>378
DelphiやJavaはライブラリらしい。しかも、C++はコンパイル時間が長いらしい。



380 名前:372 mailto:sage [2007/01/27(土) 19:01:12 ]
>371

あと、afxMessageBoxにはユーザ拡張用の前呼び出し処理があるから、
それを横取りして自作のメッセージボックスを表示する。

とかかな。


381 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 19:01:26 ]
コンパイル時間は長いとは思うけど、他のオブジェクト指向言語と
比べてどうなのかはわからんな。

ただ、「C++だから」ってより「色々インクルードするから」長いんだけど。


382 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 19:06:08 ]
実行時コンパイルの方が好感もたれるのか

383 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 19:52:07 ]
すみませんMFCど素人です
ANSIの
unsigned char foo[64]
MFCではどの様に書いたらいいのでしょうか?
コンパイラはVC6です

384 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 20:20:34 ]
unsigned char foo[64]

385 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 20:47:58 ]
ガベコレがないのが致命的欠点であるかどうかは検証不可能だから
これはもちろんWikipediaに書いてはいけない。

Delphiの方にもしょうもない書き込みしてるが、
群を抜いているのなら特定のソフトウェアをあげつらう必要はなかろうに。
「中立的な観点」を欠いてしまっているのが分らないのかね。

386 名前:デフォルトの名無しさん [2007/01/27(土) 23:24:57 ]
何で C# って使われてないの?
VC++ ネイティブのより多少計算とか遅いかもしれないけどさ、
開発が VB 並にめっちゃ楽だし、
文法は Java そっくりで習得も移行も容易だし、
全体的にスマートな印象を受けるじゃん
いい加減 VC++ 信仰は止めて欲しいんだよね
一々 Windows と UNIX(Linux) 版を作りたくねーんだよ
もうさ、時代は中間言語の時代だと思うね
頼むから、ネイティブ信仰は止めようぜ


387 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 23:34:26 ]
>>386
TPOで使い分けるでFAだろ。
まあその手の議論は実りがないから他でやったほうがいいな。

388 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 08:18:59 ]
InitDialog中で、必要なファイルがあるかのチェックをして
なければSendMessage(WM_CLOSE);として終了するようにしているのですが
一瞬Windowが表示されてしまいます。。。
Windowを表示させずにそのまま終了する方法はないでしょうか?

389 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 08:37:30 ]
ダイアログ出す前に調べる



390 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 10:07:30 ]
>>388
モーダルならEndDialog、モードレスならDestroyWindow。

391 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 11:06:29 ]
ほほぉ、それからそれから?

392 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 12:29:47 ]
VC8のMFCではダイアログボックスに貼り付けるボタンやテキストボックスのサイズや
表示位置をそれぞれのプロパティから数値で詳細に設定できるのですが、VC6のMFCでは
そのようなプロパティに項目が見当たりません、VC6で皆さんは位置決めやサイズを
何処で設定されているのでしょうか?

393 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 13:03:17 ]
テキストエディタ

394 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 13:16:13 ]
>>389、390
ありがとうございました!

395 名前:デフォルトの名無しさん [2007/01/28(日) 16:34:24 ]
ダイアログベースのアプリです。
ウインドウサイズをマウスで自由に変更できるようにするには
どのような設定、または処理を作れば良いでしょうか?
SDI/MDIベースでないとできないですか?

396 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 16:48:03 ]
いいえ。

397 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 17:04:26 ]
サイズ可変のスタイル付ければダイアログ自体のサイズは変えられるようになるが
中のコントロールもそれにあわせて調整したければ、自分で書くしかない。

398 名前:デフォルトの名無しさん [2007/01/28(日) 17:17:53 ]
>>397さん
お返事ありがとうございます。
サイズ可変のスタイルのつけ方は、具体的なコードイメージを教えていただけないでしょうか。
ダイアログ内部に設置したCEditのコントロールもあわせて変更するように実装します。

399 名前:396 mailto:sage [2007/01/28(日) 17:44:13 ]
スルーされたから要点だけ突っ込み。
>サイズ可変のスタイルのつけ方は、具体的なコードイメージを教えていただけないでしょうか。
MSDN嫁。リソースで定義したダイアログならリソースエディタのプロパティの該当項目をチェックするだけ。

>ダイアログ内部に設置したCEditのコントロールもあわせて変更するように実装します。
サイズ変更のメッセージハンドラを書く必要がある(勿論そこでCEditのサイズを調整する)ので、
初心者向けの解説サイトでも探して解説を読め。



400 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 18:57:22 ]
すいません。でも方法教えていただきありがとうございました。
これからはMSDNみてから質問します。
CEditのほうもありがとうございました。

401 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 21:19:27 ]
>>392ですが、どうしたらいい?


402 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 21:38:35 ]
>>401
VC6の場合画面の右下のステータスバーに座標とサイズが表示されてるから
それを見ながら、マウスかキーボードで配置する。
[↑↓←→]で位置の変更、[Shift]+[↑↓←→]でサイズ変更。
もしくはリソーススクリプトを直接編集する。

403 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 05:11:45 ]
ダイアログ上にコントロールを大量に貼り付けて等間隔に位置を合わせるtips。

1.テキストエディタで.rcファイルを開く。
2.DIALOG内のCONTROL行をcsvファイルとして保存する。
3.以下省略。

404 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 05:36:57 ]
すごい大量のとき役立ちそうだなw

405 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 06:20:10 ]
ダイアログエディタに位置そろえる機能ついてるけど

406 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 15:36:03 ]
>>403の3.の部分はストリングテーブルを書くときに便利だな。
defineと日本語/英語の文字列が一気に書ける。同時に仕様書も作れて一挙両得。
defineの数値はドラッグすれば1づつ増やせるからバグもでない。

407 名前:デフォルトの名無しさん [2007/01/30(火) 23:29:19 ]
フレームウィンドウとかの OnDestroy について質問です
通常 OnDestroy の中では親クラスの OnDestroy を呼んでいますが、
その親の OnDestroy の直前の部分でメモリ開放処理を行うのは良くないですか?
リストに登録されているアイテムを開放したいのですが・・・

408 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 23:50:16 ]
>>407
良くないと思う理由は?
リストってリストボックスやリストビューコントロールのこと?

409 名前:デフォルトの名無しさん [2007/01/31(水) 00:00:58 ]
>>408
CListCtrl のことです
これに new で生成したオブジェクトを登録?しています
そのまま終了するとメモリリークが発生してしまうので、
ウィンドウが破棄される直前に開放しようと思いました
それで OnDestroy に追加することにしました

良くないと思った理由は、親クラスの OnDestroy を
呼んでいるところの下にデフォルトで「ここに追加」
的なコメントが入っているからです



410 名前:デフォルトの名無しさん [2007/01/31(水) 00:10:13 ]
CListCtrlが消えるのいつなん?
プログラムが生成→消滅→生成→消滅→・・・ってやってるか
生成→表示→非表示→表示→非表示→・・・消滅ってやってるかでタイミング違ってくるじゃん。
生成したインスタンスを消したいタイミングはいつよ?
最終的に(それがいつだかはアプリにもよるが)インスタンスを確実に消滅さしときゃ問題ねーんだしよ。

411 名前:デフォルトの名無しさん [2007/01/31(水) 00:29:46 ]
リストは起動時から終了時までずっと表示です
終了時に一覧情報を保存して破棄することにしています

できるだけ綺麗な(オブジェクト指向的な)ソースコードを
書きたいので、親の OnDestroy の前が正解か後ろが正解か
が気になります

412 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 00:49:58 ]
>>411
WM_DESTROYを処理してる間は、子ウィンドウは存在している。
ttp://msdn2.microsoft.com/en-us/library/ms632620.aspx

リストビューアイテムに設定しているデータを削除するのは、LVN_DELETEITEM, LVN_DELETEALLITEMSでやるといい。

413 名前:デフォルトの名無しさん [2007/01/31(水) 00:51:06 ]
>>412
ありがとうございます!
やってみます!

414 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 00:52:14 ]
>>411
だったらOnDestroyは関係ないんじゃない?
つか、親のOnDestroy後にCListCtrlにアクセスされたら(するのか?)死ぬじゃない。
親のデストラクタでdeleteしとけばいいんじゃね?やってみ、やってみ。やってみたら結果報告ヨロ

415 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 00:53:07 ]
CMainFrame::OnDestroy()の前後どっちか2択と言われたら後に1票。

個人的には、Documentで扱っているデータなら
CHogeDocument::OnCloseDocument() or OnSaveDocument()
ViewのみでやってるならCHogeView::PostNcDestroy()でやると思う。
CMainFrameにCListCtrlのデータ持たせるとViewからデータへの
アクセスが面倒じゃない?

416 名前:デフォルトの名無しさん [2007/01/31(水) 01:08:09 ]
>>414-415
ありがとうございます!
いろいろと試してみます!

417 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 08:40:38 ]
親ウインドウと関係あるのはopenからcloseまで
closeしたらウインドウ関係ないから心配いらん

>綺麗な(オブジェクト指向的な)ソースコード

普通はデストラクタで解放

418 名前:デフォルトの名無しさん [2007/02/01(木) 00:21:49 ]
CListCtrl コントロールのイベント処理ですが
クリック時とダブルクリック時とで処理を分けたいと思っています
しかし、ダブルクリック時には先に必ずクリックイベントが
発生してしまってうまくいきません
NM_DBLCLK の直前に NM_CLICK が発生するのを
防ぐことはできませんか?

419 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 00:53:14 ]
仮にNM_CLICKが発生しないようにしたらシングルクリック時の処理が出来ない。
コントロールの身になって考えれば、ユーザーのクリックがシングルなのかダブルの1発目
なのかの判断はできない。

シングルクリック時の処理開始をしばらく待ってみる以外手はないと思う。



420 名前:デフォルトの名無しさん [2007/02/01(木) 01:11:47 ]
>>419
レスありがとうございます
つまり、NM_DBLCLK 前には NM_CLICK が
絶対に発生してしまうということですね
何か良い手はないですかね・・・

421 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 01:20:02 ]
だからシングルクリックのイベント後、しばらく待ってみてダブルクリックが来ないようなら
シングルの処理。来たらダブルの処理するだけ。

VBのサンプルではタイマー使ってるみたい。
support.microsoft.com/kb/109865/ja






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

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

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