2011-02-10 5 views
1

WndProcを使用せずにウィンドウを作成することができるのは不思議です。wndprocのないウィンドウ

私はNULLに設定されたlpfnWndProcフィールドでウィンドウクラスを登録したいと思います。 そして、TranslateMessage(& msg)によって与えられたmsgを自分のやり方で使ってください。

これには何らかの欠点がありますか?

先生、ありがとうございました。私の文法は残念です。

編集#1: さて、私は窓がありますが、私はどこか間違っています。

MSG msg; 
    while(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE)) { 
     if (msg.message == WM_QUIT) return false; 
     else { 
       TranslateMessage(&msg); 
       switch (msg.message) { 
       case WM_CREATE: 
        createContext(); 
        break; 
       default: 
        DispatchMessage(&msg); 
        break; 
       } 
     } 
    } 
    return true; 

createContextが呼び出されていません。 なぜですか?どこが間違っていますか? ええ、多分WM_CREATEメッセージがWndProc(DefWindowProc now)に送信されますが、WndProcからそれを取得する方法はありますか?

+2

これは、非常に珍しい種類のウィンドウで行うことです。なぜあなたはそれをしたいのですか?おそらく、より適切な別のアプローチがあります。 – Mac

+0

ほとんどの好奇心。 –

答えて

6

AFAIKでは、NULLに設定することはできません。しかし、DefWindowProcのシグネチャがWindowProcコールバックのシグネチャと一致することがわかります。合理的なデフォルトを希望する場合は単にDefWindowProcとしてください。

+0

ありがとう、私はこの解決策と一緒に行きます。 –

2

ごめんなさい。 wndprocがなければ、どのようにしてメッセージを取得することができますか?

ウィンドウがないウィンドウは、ウィンドウではありません。

2

いいえ、SendMessage()を無効にします。 PostMessage()だけが動作します。 SendMessageをサポートする必要があります。

関連する問題