0

正常に動作しているエラーチェックを2番目のスレッドに実行させる必要があります。メイン スレッドは、ウィンドウのない ActiveX OCX です。

私がやりたいのは、その2番目のスレッドにメッセージをメインスレッドに投稿させることです。メッセージ マップとメッセージ ハンドラをセットアップしました。2 番目のスレッド内から、PostMessage を使用してメッセージを表示します。PostMessage 呼び出しの戻り値が 1 (TRUE) になる限り、そこに到達し、メッセージが投稿されることはわかっています。メッセージ ハンドラーからの応答がありません。まったく呼び出されていないようです。

Visual Studio 2012 ActiveX プロジェクトのコード スニペット:

//Message handler definition from the .h file:
protected:

   afx_msg LRESULT OnHSAmessage(WPARAM wParam, LPARAM lParam);



//From the .cpp file:

BEGIN_MESSAGE_MAP(CHSAObserver_ActiveXControlCtrl, COleControl)
       ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
       ON_MESSAGE(WM_HSAMESSAGE, &CHSAObserver_ActiveXControlCtrl::OnHSAmessage)
END_MESSAGE_MAP()


// thread creation  (this works)
HSAWnd *pWnd = new HSAWnd(this);
hwndTarget = pWnd->Create();
HANDLE threadHandle = CreateThread(NULL,NULL, (LPTHREAD_START_ROUTINE)ThreadProc,  (LPVOID)     hwndTarget, NULL, &dwID);

//thread implementation
LONG ThreadProc(LPVOID pParam)
{
          BOOL status;
         //I know I get here the Postmessage call does not result
         //in the message handler being invoked
         MessageBox(_T("inside threadproc"));
         CHSAObserver_ActiveXControlCtrl *pCtrl = (CHSAObserver_ActiveXControlCtrl*)pParam;

         //post message using global HSAWnd
         status = PostMessage(hwndTarget, WM_HSAMESSAGE,(WPARAM)NULL,(LPARAM)NULL);

         //post message using Class window  (here for testing only)
         //status = PostMessage (pCtrl->m_hWnd, WM_HSAMESSAGE,(WPARAM)NULL,(LPARAM)NULL);

    return TRUE;
}


afx_msg LRESULT CHSAObserver_ActiveXControlCtrl::OnHSAmessage(WPARAM wParam, LPARAM lParam)
{
         //this never happens
         MessageBox(_T("message posted"));

   return 0;
}
4

1 に答える 1