ATLに関する小さい問題…


清原  2006-04-26 11:04:41  No: 61451  IP: 192.*.*.*

MSDNのATLサンプルで(Polygon)、ATLを勉強し始めました。
ATLのクラスにはウインドウメッセージが追加できるんだって
けれど、WM_TIMERメッセージを追加するのはできるにはできるんだけど、
タイマーを起動する時、エラーが発生しました。

デバッグしてから、m_hWndハンドルがなんと0!
どうしてウインドウのハンドルが0ですか?
タイマーなどのメッセージがハンドルが必要なときはどうするんでしょうか?

ATLをはじめたばかりです、分からないところがいろんあるんです、
よろしくお願いします


WindowsXP , Visual C++.NET 2003で開発しています。

編集 削除
tot  2006-04-26 23:42:39  No: 61452  IP: 192.*.*.*

>どうしてウインドウのハンドルが0ですか?

ウィンドウが作成されてないから。
オブジェクトを作成しただけではウィンドウは作られないのは理解できてますか?

編集 削除
清原  2006-04-27 08:19:24  No: 61453  IP: 192.*.*.*

いま作成しているのはATLのコントロールです。

このコントロールクラスは、間接にCWindowの派生クラスで、
ひとつのウインドウだと思います。

ActiveXコントロール  コンテナ  にコントロールをロードする時、
コントロールが作成されて、そのコントロールのウインドウハンドルも
作成されると思いますけど、意外と0になった…

ATLコントロール作成した後、再びウインドウを作成する必要があるんですか

編集 削除
REE  2006-04-27 10:32:07  No: 61454  IP: 192.*.*.*

「タイマーの起動」と「コントロールの作成」は
どちらが先ですか?

編集 削除
清原  2006-04-27 11:05:15  No: 61455  IP: 192.*.*.*

コントロールの作成してから、WM_TIMERメッセージを作成、
SetTimerkメソッド呼び出したら、エラーです。m_hWnd == 0

編集 削除
YuO  2006-04-27 11:27:54  No: 61456  IP: 192.*.*.*

コントロールを作成したタイミングでのm_hWndの値がNULLで無いことは確認しているのですか?

編集 削除
清原  2006-04-27 12:11:35  No: 61457  IP: 192.*.*.*

MSDN から  勉強したATLプロジェクトを作成する手順で  ATLプロジェクト作成しました。


ファイル-->新規作成-->プロジェクト-->ATL-->ATL プロジェクト-->OK

そして、次のATLプロジェクトウィザードの「アプリケーションの設定」ページに
属性チェックボックスをオフにした。

で、プロジェクト作成されたら、プロジェクト-->クラスの追加-->ATL-->ATL  コントロール
ATL コントロールをプロジェクトに追加しました。

次のATLコントロールウィザードに

名前ページに  属性をオフにして
オプションに  接続ポイントをオンにして
表示ページに  挿入可能をオンにして

完了をクリックして  ATLコントロールを作りました。

OnDrawメソッドに  this->SetTimer(1,1000);  呼び出して、
ActiveX  テストコンテナ  で  テストしたら、再描画すると  エラーが発生、
デバッグしたら、m_hWnd  が  NULL  だと発見しました

MSDN  のサンプルもテストしました、同じ結果です。

m_hWnd  無効のようです。

編集 削除