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


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

■MFC相談室 mfc19d.dll■



1 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 18:37:47 ]
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■MFC相談室 mfc18d.dll■
pc11.2ch.net/test/read.cgi/tech/1185917008/

735 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 07:02:30 ]
>>733
でもそこなんでトレースいれるんだろうね
少なくとも俺の感覚としちゃそこでDestroyWindowを呼ぶのは当然の処理で
警告なんて出す意味がわからないんだけど

736 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 07:11:07 ]
CreateとDestroyWindowが対だからじゃね?
コンストラクタでCreateしないからデストラクタでもDestroyWindowしない方針

737 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 08:00:16 ]
>>736
しろよな
しない方針にすることでなにかいいことあるのか?って感じ

Create関数のヘルプにもそんなこと書いてねーし
DestroyWindow関数のヘルプには
MFC側で呼んだり呼ばなかったりするからユーザー側でうまくやれよマジで
とかかなりむかつく仕様だしで作った奴マジ嫌な感じだな

738 名前:732 mailto:sage [2008/11/30(日) 10:06:48 ]
>>733
> そんなことは、皆了解済みの上で話していると思うのだがどうか。

理解したり、(実際に呼ばれていることを)知っていたら『呼ばれなくね?』
なんて発言は、マヂでありえなくね。(w

C++の基本を理解し、警告メッセージの意味を正しく理解していれば、

> わざわざトレース文が入っているようなお情け処理を、
> 正式な仕様として扱う勇気は俺には無いな。

なんて発言も出てこないハズ。


739 名前:732 mailto:sage [2008/11/30(日) 10:08:09 ]
>>735
CDialogクラスのデストラクタで呼び出しているので、(この時点では
派生クラスのメッセージマップや仮想関数テーブルを参照できない、
もしくは存在自体を知りえないため)派生クラスのOnDestroy()やPost
NcDestroy()は呼ばれないだけ。 当然ながら、CDialog::OnDestroy()
やCDialog::PostNcDestroy()の呼び出しは行われる。

派生クラスのOnDestroy()やPostNcDestroy()で独自の実装(例:閉じた
時のウィンドウサイズを取得してレジストリやINIファイルに保存する
等)を呼び出していなければ、デストラクタに処理を任せてもなんら
問題ない。

だからこそ「Error:」じゃなく、あくまで「Warning:」ってなってる。

CFileクラスのデストラクタや、CGdiObjectクラス(CPen,CBrush等の基本
クラス)のデストラクタでも同様のことをやっているけど、これらはメッセ
ージループを廻す必要がないので、TRACE記述はない。

740 名前:732 mailto:sage [2008/11/30(日) 10:13:43 ]
>>736-737
こういう文句を言う連中は、MFCはおろかC++の基本的な仕様(派生クラスと
基本クラスのコンストラクタ/デストラクタが呼び出される順序や、仮想
関数など)さえロクに理解していないんだろうナァ。

方針なんて関係ない。強いて言えばデザインパターンってやつか?

コンストラクタでデフォルト値を代入してメンバ変数の初期化忘れを防ぐ
とか、デストラクタでメモリやハンドルの解放忘れを防ぐというのは、
基本中の基本。

インスタンスの消滅で確実にウィンドウを破棄し、なおかつ派生クラス
のOnDestroy()やPostNcDestroy()も呼び出されるようにしたければ、MFC
内部の実装に関係なく、派生クラスのオブジェクトが消滅するタイミング
でDestroyWindow()を呼び出せばいいだけ。

すなわち、自分が作るCDialog派生クラスで、デストラクタ関数を定義し、
m_hWndが有効ならDestroyWindow()を呼び出してやればいい。

class CMyDialog : public CDialog
{
  virtual ~CMyDialog();
};

CMyDialog::~CMyDialog()
{
  if(m_hWnd!=NULL)
    DestroyWindow();
}

ただそれだけのことだ。

741 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:14:42 ]
>>738
俺とそいつは別人だ
ちなみに「よばれてなくね?」は俺

>>739
警告の必要なくね?

742 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:18:33 ]
>>740
でもヘルプでだってどういうときに
DestroyWindowを呼ばなきゃいけないのか書いてないわけだし
当然MFCの中身の都合なんてこっちはしったこっちゃないわけで
もし、自分でこういうもんを作るとしたら解放はフレームワークのほうで自動でやってほしいかな?

743 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 11:15:41 ]
>>740のコードがまずいというのもわかりにくいしな



744 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 15:54:00 ]
何この流れ
どうせお互いまったく譲り合わないんだから、これ以上書いても無駄だよ

745 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 18:51:38 ]
Win7ってペイントとかワードパッドにリボン採用してるよな
今後作るソフトはリボンで作った方が惹きやすいのだろうか・・・2008SP1は持ってるが






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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