2010-11-27 11 views
3

私はMsgProcのようなものをWin32で作成しようとしています。彼らがMsgProc関数を宣言するとき、その前にCALLBACK型があります。だから私がしようとしているのは、メッセージを処理する関数を呼び出す独自のmesssage関数を作成することです。メッセージが送信されて処理されるときは、基本的に同じことです。私の質問は、私はどのように同じプロセスを作成できますか?例が素晴らしいだろう。C++ CALLBACK関数タイプ

+4

CALLBACKは、__stdcallとして定義されたマクロです。これは、コールバックの呼び出し規約をwin32 APIの呼び出し規約に設定します。独自のコードでコールバックを実装するには、Windows APIを扱わない限りこのマクロは必要ありません。 –

答えて

1

新しいC++ 0x lambdasが興味を持っている古典的な関数ポインタと関数オブジェクト以外のものです。

ここでは、ラムダをタイマー関数に渡す例を示します。

#include <windows.h> 
#include <iostream> 
#include <functional> 

void onInterval(DWORD interval, std::function<void()> callback) { 
    for (;;) { 
    Sleep(interval); 
    callback(); 
    } 
} 

int main() { 
    onInterval(1000, []() {std::cout<<"Tick! ";}); 
} 
0

あなたはブーストを使用することができる場合、私は間違いなくBoost.Signalsに打撃を与えるだろう、彼らはあなたが探している機能を提供します(Boost.Signals2でもスレッドセーフな方法で)

関連する問題