得到当前窗口句柄

本文介绍了在多线程环境中如何获取当前窗口句柄。AfxGetApp() 返回的是全局的应用进程指针,适用于主线程,而在子线程中,使用 ::AfxGetMainWnd()->GetSafeHwnd() 可能会返回 NULL。GetActiveWindow 函数能够获取与调用线程消息队列相关的活动窗口句柄,但在函数子线程中可能返回 NULL。
HWND hwnd;
hwnd=CreateWindow("my own windowshandle","jaycnvip",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
这是用一个句柄变量来保存新创建的窗口句柄。

其它如:
通过窗口标题获取窗口句柄
CWnd *pWnd = FindWindow(_T("#32770"), _T("QQ用户登录"));

CWnd有个成员函数 
HWND GetSafeHwnd( ) const; 

在对话框类的成员函数里用 
HWND hwnd = GetSafeHwnd(); 
得到的hwnd就是句柄了

::AfxGetApp()-> GetMainWnd()->GetSafeHwnd()和::AfxGetMainWnd()->GetSafeHwnd()
单线程中两个函数的结果是相同的。 

如果是多线程则不同。前者是主线程的。  后者是单前所在的线程的。

AfxGetApp( )是全局的。 AfxGetApp( )这个函数可以得到当前应用进程的指针,是CWinApp*类型的,通过这个指针可以访问到这个进程中的对象。

如果子线程只是一个函数线程的话,在其内使用 ::AfxGetMainWnd()->GetSafeHwnd() 结果为 NULL. 

GetActiveWindow

        函数功能:该函数可以获得与调用线程的消息队列相关的活动窗口的窗口句柄。  

        函数原型:HWND GetActiveWindow(VOID)  参数:无。

  返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。

如果在主窗口线程中使用,则获取的是该窗口句柄,若在函数子线程内使用,则为NULL

全局回调函数中如何获得当前对话框住工程的句柄

CWnd*dlg = AfxGetMainWnd();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值