将MFC消息处理程序转换为VCL消息处理程序

时间:2016-08-02 20:34:04

标签: c++ mfc c++builder messaging vcl

我正在将MFC应用程序中的一些代码应用到C ++ Builder VCL应用程序中。此代码正在处理实时相机。

问题是如何捕捉有关相机的Windows消息。在MFC代码中,定义了以下消息映射:

BEGIN_MESSAGE_MAP(Cuc480LiveDlg, CDialog)
 ... //Code omitted

   ON_MESSAGE(IS_UC480_MESSAGE, OnUSBCameraMessage)

 ... //Code omitted
END_MESSAGE_MAP()

其中'处理'功能是:

LRESULT Cuc480LiveDlg::OnUSBCameraMessage( WPARAM wParam, LPARAM lParam )
{
    switch ( wParam )
    {
        case IS_DEVICE_REMOVED:
            Beep( 400, 50 );
            break;

        case IS_DEVICE_RECONNECTED:
            Beep( 400, 50 );
            break;

        case IS_FRAME:
            if(m_pcImageMemory != NULL)
                m_camera.RenderBitmap(m_lMemoryId, m_hDisplay,     IS_RENDER_FIT_TO_WINDOW);
            break;
    }

    return 0;
}

如何将上述内容翻译为在VCL应用程序的消息处理中工作?

创建以下表单处理程序

BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER(IS_UC480_MESSAGE, unsigned int, OnUSBCameraMessage);
END_MESSAGE_MAP(TForm)

和功能

LRESULT TMainForm::OnUSBCameraMessage( WPARAM wParam)//, LPARAM lParam )
{
switch ( wParam )
{
    case IS_DEVICE_REMOVED:
        Beep( 400, 50 );
        break;

    case IS_DEVICE_RECONNECTED:
        Beep( 400, 50 );
        break;

    case IS_FRAME:
        if(mImageMemory != NULL)
            mCamera.RenderBitmap(mMemoryId, mDisplayHandle, IS_RENDER_FIT_TO_WINDOW);
        break;

    case 1280:
        if(mImageMemory != NULL)
        {
            mCamera.RenderBitmap(mMemoryId, mDisplayHandle, IS_RENDER_FIT_TO_WINDOW);
        }
        else
        {
            Log(lError) << "No Image memory";
        }
        break;

}

//  Log(lDebug) << "Got message: "<<wParam;
return 0;
}

这似乎无法正常工作。捕获了IS_UC480_MESSAGE,但消息值(wParam)始终相同(1280)。

有谁知道如何将MFC代码翻译成VCL?

这个问题是关于如何将MFC代码翻译成VCL代码,而不是如何一般地发送/接收消息。

0 个答案:

没有答案