子窗口对话框如何接收tab按钮消息 首先创建了个父窗口对话框,然后又创建了个无标题栏的子窗口贴在父窗口上,这样的效果看起来就像一个窗口,但是,tab按键却无法在父子窗口中切换,比如我把焦点放在子窗口的任何一个控件上,按tab,则焦点会跳转到父窗口的控件上,再也不会回到子窗口。如何能做到tab消息在窗口间能自由的切换? thx 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得应该在PreTranslateMessage里判断吧 这个程序是windows sdk做的,没有PreTranslateMessage的函数。 void CTestHartDlg::OnSelchangeTabMain(NMHDR* pNMHDR, LRESULT* pResult) {CTestHartDlg *pthis=this; int iSel; m_InfoDlg.ifSave(); m_InchingDlg.ifSave(); m_AdvanceDlg.ifSave(); m_AdvanceDlg.ifJLSave(); m_ManufAdjustDlg.ifSave(); CRect ret=pthis->m_retTab; //如果是监测变量界面先停止线程 if(&(pthis->m_InspectDlg)==pthis->m_pCurrentDlg) { if(!pthis->m_InspectDlg.ThreadStop()) { return ; } } //如果正在进行增益测试,则退出增益测试。 if(pthis->m_IncreaseTest.m_Exit.IsWindowEnabled()==TRUE) { pthis->m_IncreaseTest.OnButton2(); } iSel=pthis->m_tabMain.GetCurSel(); pthis->m_pCurrentDlg->ShowWindow(SW_HIDE); int n=-2; switch(iSel) { case 0: UpdateData(FALSE); DoEvent(); pthis->m_InfoDlg.ReadInfo(); pthis->m_pCurrentDlg=&(pthis->m_InfoDlg); break; case 1: pthis->m_ConfigurationDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW); UpdateData(FALSE); DoEvent(); pthis->m_ConfigurationDlg.ReadInfo(); pthis->m_pCurrentDlg=&(pthis->m_ConfigurationDlg); break; case 2: pthis->m_InchingDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW); pthis->m_pCurrentDlg=&(pthis->m_InchingDlg); break; case 3: pthis->m_InspectDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW); UpdateData(FALSE); DoEvent(); pthis->m_InspectDlg.ReadInfo(); pthis->m_pCurrentDlg=&(pthis->m_InspectDlg); pthis->m_InspectDlg.ThreadRun(); break; case 4: pthis->m_IncreaseTest.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW); pthis->m_pCurrentDlg=&(pthis->m_IncreaseTest); break; case 5: pthis->m_UserAdjustDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW); UpdateData(FALSE); DoEvent(); pthis->m_pCurrentDlg=&(pthis->m_UserAdjustDlg); pthis->m_UserAdjustDlg.InitData(); break; case 6: pthis->m_ManufAdjustDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW); UpdateData(FALSE); DoEvent(); pthis->m_ManufAdjustDlg.ReadInfo(); pthis->m_pCurrentDlg=&(pthis->m_ManufAdjustDlg); pthis->m_ManufAdjustDlg.bValChange=FALSE; break; case 7: pthis->m_AdvanceDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW); UpdateData(FALSE); DoEvent(); pthis->m_AdvanceDlg.ReadInfo(); pthis->m_pCurrentDlg=&(pthis->m_AdvanceDlg); m_AdvanceDlg.bValChange=FALSE; break; case 8: pthis->m_AdditionFun.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW); UpdateData(FALSE); DoEvent(); pthis->m_pCurrentDlg=&(pthis->m_AdditionFun); break; } return ;} SDK的话就更简单咯,直接拦截WM_CHAR消息不就行了,TAB的虚拟键码应该是9吧 奇怪,我用CreateDialogParam创建的对话框,他的消息回调函数怎么收不到任何有关键盘消息。我直接在消息回调中判断的if (WM_KEYFIRST <= uMsg && uMsg <= WM_KEYLAST)这个都进不去 非模态对话框要在消息循环里这样判断:if (hDlgModeless /*全局保存非模态句柄*/== 0 || !IsDialogMessage (hDlgModeless, &msg)) 关于下面这样使用Seek有点迷糊,请大家指点下 Windows核心编成中关于伪句柄的疑惑 这个问题比较难 ?CTreeCtrl 控件的重命名问题? 我已经得到24位位图数据,二值化后怎么生成图片,我想查看一下效果 输出到文件的格式控制 问一个菜鸟问题 类跑哪去了(应该不难)? 请教method和property的参数类型问题,谢谢 那里有snmp的教程下载啊, 如何从文本中读取一行字符串? vc 中组件的对齐与填充方式? 请问哪里有标题栏的最大化,最小化,关闭图像资源可以下载?
{
CTestHartDlg *pthis=this;
int iSel;
m_InfoDlg.ifSave();
m_InchingDlg.ifSave();
m_AdvanceDlg.ifSave();
m_AdvanceDlg.ifJLSave();
m_ManufAdjustDlg.ifSave();
CRect ret=pthis->m_retTab;
//如果是监测变量界面先停止线程
if(&(pthis->m_InspectDlg)==pthis->m_pCurrentDlg)
{
if(!pthis->m_InspectDlg.ThreadStop())
{
return ;
}
}
//如果正在进行增益测试,则退出增益测试。
if(pthis->m_IncreaseTest.m_Exit.IsWindowEnabled()==TRUE)
{
pthis->m_IncreaseTest.OnButton2();
}
iSel=pthis->m_tabMain.GetCurSel();
pthis->m_pCurrentDlg->ShowWindow(SW_HIDE);
int n=-2;
switch(iSel)
{
case 0:
UpdateData(FALSE);
DoEvent();
pthis->m_InfoDlg.ReadInfo();
pthis->m_pCurrentDlg=&(pthis->m_InfoDlg);
break;
case 1:
pthis->m_ConfigurationDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW);
UpdateData(FALSE);
DoEvent();
pthis->m_ConfigurationDlg.ReadInfo();
pthis->m_pCurrentDlg=&(pthis->m_ConfigurationDlg);
break;
case 2:
pthis->m_InchingDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW);
pthis->m_pCurrentDlg=&(pthis->m_InchingDlg); break;
case 3:
pthis->m_InspectDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW);
UpdateData(FALSE);
DoEvent();
pthis->m_InspectDlg.ReadInfo();
pthis->m_pCurrentDlg=&(pthis->m_InspectDlg);
pthis->m_InspectDlg.ThreadRun();
break;
case 4:
pthis->m_IncreaseTest.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW);
pthis->m_pCurrentDlg=&(pthis->m_IncreaseTest);
break;
case 5:
pthis->m_UserAdjustDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW);
UpdateData(FALSE);
DoEvent();
pthis->m_pCurrentDlg=&(pthis->m_UserAdjustDlg);
pthis->m_UserAdjustDlg.InitData();
break;
case 6:
pthis->m_ManufAdjustDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW);
UpdateData(FALSE);
DoEvent();
pthis->m_ManufAdjustDlg.ReadInfo();
pthis->m_pCurrentDlg=&(pthis->m_ManufAdjustDlg);
pthis->m_ManufAdjustDlg.bValChange=FALSE;
break;
case 7:
pthis->m_AdvanceDlg.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW);
UpdateData(FALSE);
DoEvent();
pthis->m_AdvanceDlg.ReadInfo();
pthis->m_pCurrentDlg=&(pthis->m_AdvanceDlg);
m_AdvanceDlg.bValChange=FALSE;
break;
case 8:
pthis->m_AdditionFun.SetWindowPos(&(pthis->wndTop),ret.left,ret.top-n,ret.right-ret.left-5,ret.bottom-ret.top-25,SWP_SHOWWINDOW);
UpdateData(FALSE);
DoEvent();
pthis->m_pCurrentDlg=&(pthis->m_AdditionFun);
break;
}
return ;}
这个都进不去
if (hDlgModeless /*全局保存非模态句柄*/== 0 || !IsDialogMessage (hDlgModeless, &msg))