ライン、「あなたはそれが間違ってやっています。」
いいえ、hwndをJacobから設定することはできません。私はあなたがCWnd :: SetTimer()をどのように呼び出すのか興味深いでしょう。常に作成され、それに関連付けられたm_hWndを持つウィンドウからのものでなければなりません。したがって、有効なウィンドウがあると仮定すると、次のようになります。
// assume pWnd is a CWnd* or derived object that has been created.
pWnd->SetTimer(nIDEvent, nElapse, NULL);
CWnd(または派生)は既に作成されている必要があります。だから、あなたはいくつかのオプションを持っている...
は...
あなたは、いくつかのクラスを持っている必要があり、そのクラスからあなたはSubclassWindowを呼びたい....あなたは既にHWNDのHWNDを持っていると言う
CSomeWindow someWindow; // declaring these on stack probably bad idea
someWindow.SubclassWindow(hwnd);
someWindow.SetTimer(nIDEvent, nElapse, NULL);
他のオプションウィンドウを作成することである...
CSomeWindow someWindow; // declaring these on stack probably bad idea
someWindow.Create(.... create params);
someWindow.SetTimer(nIDEvent, nElapse, NULL);
または
CSomeWindow* pSomeWindow = new CSomeWindow();
pSomeWindow->Create(.... create params);
pSomeWindow->SetTimer(nIDEvent, nElapse, NULL);
上記の例では、funcは指定されていません。NULLのみです。その場合は、ON_WM_TIMER()ハンドラにルーティングされます。
OTOH、多分あなたはタイマーを設定したいウィンドウ(あなたのOCXコントロール?)があります。さて、ウィンドウ(HWND)が作成された後に必ず呼び出す必要があります。 OnCreate()メソッドが作成された後のいつか。それはあなたの問題かもしれませんが、あなたは情報がほとんどなく、私は暗闇の中でただ刺すだけです。
pYourOcx->SetTimer(nIDEvent, nElapse, NULL);
ただし、技術的には、ウィンドウは必要ありません。あなたはSetTimer()のWindows APIバージョンを呼び出すことができます...
::SetTimer(NULL, nIDEvent, nElapse, MyTimerFunc); // MyTimerFunc is your user defined timer function
ありがとう、私はそれを解決しました。非常に分岐したOntimerがあったので、私は既存のocxを修正して、SetTimerにダミーのHWNDを作成する必要がありました。 –