2011-02-06 5 views
0

ウィンドウの作成時:WNDCLASS(Windows-C)はなぜそう設定され使用されますか?

1)なぜウィンドウクラスを登録する必要がありますか?CreateWindowは、希望するクラスをどのように理解していますか?そこにはmesssageはありませんので、我々は、tはループに入る’を獲得し、私たちはWinMain機能を終了します開始時に

MSG msg; 
While(GetMessage(&msg,0,0,0)) 
{ 
    TranslateMessage(&msg); 
    DispathMessage(&msg); 
} 

WNDCLASS wc; 
RegisterClass(&wc) 

2)なぜ我々はこのLOOPを使用する必要があります。

+2

@fredあなたはスペルを修正する担当者を持っています –

+0

@David私はいくつかを修正しました、それはあなたが考えていたかどうか分かりませんか? –

答えて

7

ウィンドウクラスを登録するのは、システムの仕組みだからです。タイプを定義すると考えてください。 GetMessageは、メッセージがキューに到着するまでブロックします。

あなたは本当にチャールズ・ペゾルドの本を読む必要があり、原則としてProgramming Windows

+0

問題の本にリンクしますか? –

+0

@pst私は私の電話にいます。タイピングは難しいです。ブックはプログラミングWindowsと呼ばれます。簡単に見つかります。気にしないで私の答えを編集してください! –

+0

あなたのリンクを追加しました – morechilli

2

あなたのプログラムはあなたの窓/プログラムがメッセージ受け入れる準備ができていることにWindowsを教えて起動する - それを登録しています。その後のメッセージ・ループは、ユーザー(およびシステム)との対話が発生する場所です。いくつかの対話が必要になるたびに、それはメッセージ(またはイベント)を介してアプリケーションに伝達されます。メッセージループでは、さまざまなメッセージに反応する方法を定義します。

UIメッセージの他に、タイマーイベントやメッセージシステム関連のメッセージなどの他のメッセージがあります。これらも同様に扱うことができます。

+2

ウィンドウクラスの登録は、開始する準備ができているということではありません。主にウィンドウprocを介してウィンドウタイプを定義します。 –

1

あなたはGetMessageについて間違った仮定をしています。メッセージがない場合は、「ループに入ることはありません」と述べています。つまり、メッセージがない場合、GetMessageはfalseを返します。

実際には、GetMessageは、WM_QUITというメッセージがある場合にのみfalseを返します。メッセージがない場合、GetMessageを返しません。メッセージが到着するまで待ちます。これは多くのプログラムにとっては非常に意味があります。入力がない場合、何もする必要はなく、プログラムはCPU時間を必要としません。

一部のプログラムでは、定期的にCPU時間が必要です。そのため、WM_TIMERを使用します:GetMessageがコードに制御を戻すようにします。

関連する問題