VC实现对话框置顶并获取键盘输入焦点

今天遇到一个问题,另一个程序通过socket向另一个程序发送消息以将另一个程序显示在最前面,并且可以直接接受键盘消息(这里为什么直接接受,就是不用鼠标去点击,键盘事件焦点直接就这这个窗口上)。本来方法是有好几种,比如说SetActiveWindow(),SetForground等等方法,但是今天遇到的这个问题是,调用这两个方法均不能成功!

下面一个可以实现:

void CBillValidatorDlg::SetActive(HWND m_hWnd)
{
 DWORD dwForeID;  
 DWORD dwCurID;  
 HWND hForeWnd = ::GetForegroundWindow();  
 dwCurID = ::GetCurrentThreadId();  
 dwForeID = ::GetWindowThreadProcessId( hForeWnd, NULL );  
 ::AttachThreadInput( dwCurID, dwForeID, TRUE); //获取输入焦点
 ::SetWindowPos( m_hWnd, HWND_TOPMOST, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE ); //设置Z-Order
 ::SetWindowPos( m_hWnd, HWND_NOTOPMOST, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE ); //还原Z-Order
 ::SetForegroundWindow( m_hWnd );  
::AttachThreadInput( dwCurID, dwForeID, FALSE);
}

编程经验小结

1、在编写程序一定要注意些注释,有经验的程序都知道这一点的重要性。

2、在书写函数时,注意检测输入参数的合法性,在调用函数时注意检测函数的返回值来判断函数调用是否成功。

3、加深对系统框架重要性的认识,一个软件的系统框架没有设计好,系统的程序实现将会寸步难行以致到走不下去,重新设计框架,对于一个比较大的项目,应首先对系统实现过程中的技术难题通过demo程序的方式一一攻破,然后不要再继续写代码,应该花很大一部分时间来考虑系统的框架,当系统的框架搭建好了,系统实现就变得很简单了。

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值