我正在将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代码,而不是如何一般地发送/接收消息。