当光标停在edit控件上时,敲击键盘时,线程不响应键盘消息,如何实现让edit控件响应数字按键消息,让线程响应其它字母按键产生的消息?谢谢!
解决方案 »
- 关于调试DLL的配置文件放哪里的问题?
- 求救ftp rfc959中文翻译
- 求Vc 1.5
- 请问怎样在代码中把如“D:\bmp\123.bmp”这样的图片加载入CBitmap对象中去?(新手上路)
- 消息映射的问题
- 用VC做一个数学函数作图的软件要什么算法呀??
- (急!在线等待)动态生成菜单,怎么定义对应的响应函数?
- 请问如何在程序开始前播放一段动画!万分感谢!!
- 如何在VC中加入一个函数? 有简单例子吗? 50分
- 在自己的窗口里面 干掉其它窗口给窗口调用的 showwindow(本窗口句柄,sw_hide)
- 这样的高中题目,哥竟然做不出了。小小的惭愧一下。
- 使用Win32 API函数如何实现VS2008中的应用程序向导的功能
该窗口是把static text的句柄传给仿真线程开启的窗口
如果焦点在某个控件上,那么所有键盘消息最终都会到那个控件的窗口函数中处理,你可以继承控件并重载WindowProc消息处理函数。
你现在连Windows消息及至都没搞多清楚,用钩子跨度太大了。
以下是用静态变量和静态函数实现的全局变量PublicMember.cpp
/*
//
***********************************************************
公共成员变量
包含主要的公共成员变量.
************************************************************/ //场景窗口句柄
HWND PublicMember::CTS_RunningWindow =NULL; //控制VP线程运行的变量
bool PublicMember::CTS_continueRunVP=NULL; //VP线程变量
CWinThread * PublicMember::CTS_vegaThread=NULL; //VP对象容器
InstancesList* PublicMember::CTS_s_pInstancesToUnref=NULL ; //VP对象文件路径
vpSearchPath * PublicMember::CTS_pSearchPath_mySearchPath=NULL; //VP场景对象
vpScene* PublicMember::CTS_pScene_myScene=NULL; //VP观察者对象
vpObserver * PublicMember::m_pObserver=NULL; //vpCoordSys* PublicMember::m_local=NULL; //vpCoordConverter* PublicMember::m_localCoordConv=NULL;
//VP对象外挂物
vpObject* PublicMember::CTS_pObject_other=NULL; CString PublicMember::CTS_RunPath=NULL; //VPTestDialogDlg* PublicMember::vpdialog = NULL; //vsDOF * PublicMember::m_turret=NULL;
//vsDOF * PublicMember::m_barrel=NULL; //vpFxParticleSystem *PublicMember::m_mainGunFlash=NULL; vpMotionTetherSpin* PublicMember::m_pTetherSpin = NULL; bool PublicMember::m_bPositionShip = true;
double PublicMember::m_dX0 = 0.0;
double PublicMember::m_dY0 = 250.0;
float PublicMember::m_fRadius =190.0f;
int PublicMember::m_fWind_Speed = 0.0f;
float PublicMember::m_fWind_Direction = 0.0f;
float PublicMember::m_fSigWaveH = 0.0f;
float PublicMember::m_fModal_Period = 0.0f;
float PublicMember::m_fSSWF = 0.0f;
vpObject* PublicMember::m_pShipObj= NULL; vpMarineOcean *PublicMember::m_pOcean = NULL;
vpMarineShip* PublicMember::m_pShip = NULL; vuField< vpMarineShipMotionStrategy * > PublicMember::m_pShipMotionStrategy = NULL; vpMarineWaveGeneratorFFT* PublicMember::m_pWaveGenerator = NULL; vpTransform* PublicMember::m_pXFormShipFront = NULL; vpTransform* PublicMember::m_pXFormShipRear = NULL; vpPositionable::StateVector PublicMember::sv;
/* ***********************************************************
公共成员函数
包含主要的公共函数.
************************************************************/PublicMember::PublicMember(void)
: m_dTimeToStart(0.0)
, m_bCruising(false)
, m_dInitialAngularVelocity(0.0)
{
}PublicMember::~PublicMember(void)
{
}void PublicMember::CTS_Keyboard(vpWindow *window,vpWindow::Key key, int modifier,void *)
{
switch(key)
{
/*
位置控制*/
case vrWindow::KEY_m:
m_bPositionShip = ! m_bPositionShip;
break;
//控制观察位置
case vrWindow::KEY_w:
m_pObserver->setStrategy( vpMotion::find( "myMotionUFO" ) );
m_pObserver->setLookAt( NULL );
m_pObserver->setLookFrom( NULL );
break;
}
UINT PublicMember::CTS_RunBasicThread(LPVOID)
{
//初始化
vp::initialize(__argc,__argv); vpMarineOcean::setUpdateSemantic(
vpMarineOcean::UPDATE_SEMANTICS_ASYNCHRONOUS ); //定义场景
PublicMember::CTS_Define();
//绘制场景
vpKernel::instance()->configure();
PublicMember::m_pObserver = *vpObserver::begin();
m_pOcean = vpMarineOcean::find( "OceanObserverCentered" ); if ( m_pOcean )
{
m_pWaveGenerator = static_cast< vpMarineWaveGeneratorFFT * >(m_pOcean->getWaveGenerator()); //---------------------------------------------------------------------
// Initialize the ship definition and motion parameters.
//---------------------------------------------------------------------
m_pShipObj = vpObject::find( "ShipObj" );
initializeShip(); //---------------------------------------------------------------------
// Create and initialize the tether spin position strategy, which
// circles around a particular object (in this case, the ship).
//---------------------------------------------------------------------
m_pTetherSpin = new vpMotionTetherSpin; m_pTetherSpin->ref();
m_pTetherSpin->setRadius( 80.0 );
m_pTetherSpin->setAngularRate( 0.14 );
m_pTetherSpin->setTetherReference( m_pShipObj );
m_pTetherSpin->setElevation( m_pOcean->getTideHeight() + 2.3 );
m_pTetherSpin->setInputEnable( true ); m_pObserver->setStrategy( m_pTetherSpin );
}
else
{
printf( "Could not find ocean named \"OceanObserverCentered\"-- exiting!\n" );
}//
//设置窗体
vpWindow * vpWin= * vpWindow::begin();
vpWin->setParent(PublicMember::CTS_RunningWindow);
vpWin->setBorderEnable(false);
vpWin->setFullScreenEnable(true); //设置键盘
vpWin->setInputEnable(true);
vpWin->setKeyboardFunc((vrWindow::KeyboardFunc)PublicMember::CTS_Keyboard,NULL); vpWin->open();
::SetFocus(vpWin->getWindow()); //
//帧循环
while(vpKernel::instance()->beginFrame()!=0)
{
if ( m_bPositionShip )
positionShip();
m_pWaveGenerator->setSurfaceWindSpeed(m_fWind_Speed);
//m_fWind_Speed跟edit控件关联
vpKernel::instance()->endFrame();
if(!PublicMember::CTS_continueRunVP)
{ vpKernel::instance()->endFrame(); /* chan->removeSubscriber(vsChannel::EVENT_POST_DRAW,wang,false); wang=NULL;*/
vpKernel::instance()->unconfigure();
vp::shutdown();
return 0;
}
}
return 0;
}//VPTestDialogDlg.cpp
//启动工作者线程 button按钮
//m_fWind_Speed跟edit控件关联
void CVPTestDialogDlg::OnBnClickedbtrun()
{
// TODO: 在此添加控件通知处理程序代码
CWnd *pWnd=GetDlgItem(IDC_grScene);
PublicMember::CTS_RunningWindow=pWnd->GetSafeHwnd();
PublicMember::CTS_continueRunVP=true;
if(PublicMember::CTS_continueRunVP = true)
GetDlgItem(IDC_btRun)->EnableWindow(FALSE);
PublicMember::CTS_vegaThread=AfxBeginThread(PublicMember::CTS_RunBasicThread ,this );
}
//edit控件
void CVPTestDialogDlg::OnEnChangeEdittest()
{
UpdateData(true);
PublicMember::m_fWind_Speed = m_edittest;
}谢谢!