工控编程吧
标题:
200上位机VC MFC任务栏下指定程序前端显示
[打印本页]
作者:
qq263946146
时间:
2016-1-29 21:53
标题:
200上位机VC MFC任务栏下指定程序前端显示
(, 下载次数: 2)
上传
点击文件名下载附件
200上位机VC MFC任务栏下指定程序前端显示
功能展示
有时在桌面上有过多程序,我们想将任务上指定的程序窗口最前端显示,方便用户进行下一步的操作,我们就得编程实现这一功能,当前例程实现罗列出任务栏上全部程序窗口,再最前端显示选择的程序,效果如图;
要点提示
全部窗口的罗列功能我们可以用函数GetWindow()和GetWindowText()结合实现 ;
GetWindow()函数原型:HWNDGetWindow(HWND hWnd,UNIT nCmd)
参数含义:
hWnd:窗口句柄。要获得的窗口句柄是依据nCmd参数值相对于这个窗口的句柄。
nCmd:说明指定窗口与要获得句柄的窗口之间的关系。该参数值可以是下列之一:
GW_CHILD(&H5):如果指定窗口是父窗口,则获得的是在Tab序顶端的子窗口的句柄,否则为NULL。函数仅检查指定父窗口的子窗口,不检查继承窗口。
GW_ENABLEDPOPUP(&H6):(WindowsNT5.0)返回的句柄标识了属于指定窗口的处于使能状态弹出式窗口(检索使用第一个由GW_HWNDNEXT 查找到的满足前述条件的窗口);如果无使能窗口,则获得的句柄与指定窗口相同。
GW_HWNDFIRST(&H0):返回的句柄标识了在Z序最高端的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在Z序最高端的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在z序最高端的顶层窗口:如果指定窗口是子窗口,则句柄标识了在Z序最高端的同属窗口。
GW_HWNDLAST(&H1):返回的句柄标识了在z序最低端的相同类型的窗口。如果指定窗口是最高端窗口,则该柄标识了在z序最低端的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在z序最低端的顶层窗口;如果指定窗口是子窗口,则句柄标识了在Z序最低端的同属窗口。
GW_HWNDNEXT(&H2):返回的句柄标识了在Z序中指定窗口下的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口下的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在指定窗口下的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口下的同属窗口。
GW HWNDPREV(&H3):返回的句柄标识了在Z序中指定窗口上的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口上的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在指定窗口上的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口上的同属窗口。
GW_OWNER(&H4):返回的句柄标识了指定窗口的所有者窗口(如果存在)。GW_OWNER与GW_CHILD不是相对的参数,没有父窗口的含义,如果想得到父窗口请使用GetParent()。例如:例如有时对话框的控件的GW_OWNER,是不存在的。
返回值:如果函数成功,返回值为窗口句柄;如果与指定窗口有特定关系的窗口不存在,则返回值为NULL。
若想获得更多错误信息,请调用GetLastError()函数查看具体错误代码。
指定窗口的最前端显示可以用函数SetForegroundWindow();SetForegroundWindow函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程;此函数无参数直接调用设置便可;
实现功能
1.新建基于对话框的应用程序
2.拖拽一组合框ID为IDC_COMBO1用于显示任务栏上的全部窗口名称;
拖拽两按钮<罗列任务栏打开程序><前端显示选择的程序>关联函数
void CGkbc8Dlg::OnExplor()
{
CString StrCaption;
CComboBox *pCombobox = (CComboBox *)GetDlgItem(IDC_COMBO1);//获得组合框 指针
pCombobox->ResetContent();//删除组合框全部内容
CWnd* pWnd=AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
while (pWnd)
{
if (pWnd ->IsWindowVisible () && pWnd ->GetWindowTextLength () && !pWnd ->GetOwner ())
{
pWnd ->GetWindowText (StrCaption);
pCombobox->AddString(StrCaption);
}
pWnd=pWnd->GetWindow (GW_HWNDNEXT);
}
pCombobox->SetCurSel(0);//设置初始选项
}
复制代码
void CGkbc8Dlg::OnForground()
{
CComboBox *pCombobox = (CComboBox *)GetDlgItem(IDC_COMBO1);//获得组合框 指针
CString sText;
pCombobox->GetLBText(pCombobox->GetCurSel(),sText);
//
CWnd *pWnd=CWnd::FindWindow(NULL,sText);
if(pWnd!=NULL)
{
CWnd *pWndTop=pWnd->GetLastActivePopup();
pWnd->SetForegroundWindow();
if(pWnd->IsIconic())
pWnd->ShowWindow(SW_SHOWNORMAL);
if(pWnd!=pWndTop)
{
pWndTop->SetForegroundWindow();
}
}
else
{
MessageBox("设置前台窗口操作失败!","信息提示",MB_OK);
}
}
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/507f376637a9fd9463ac39e6faf2efc0/0/0/w_19rtaluo9h.swf-albumId=5264663609-tvId=5264663609-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4