MFC中怎样获取指定窗口的句柄

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC中怎样获取指定窗口的句柄相关的知识,希望对你有一定的参考价值。

参考技术A 句柄获取方法(获取该窗口的句柄后,即可向该窗口类类发送消息、处理程序):0。获取所在类窗口的句柄:
this->m_hwnd
1。主窗口的句柄:
无论在主窗口类内,还是子窗口类内,获取主窗口句柄的方法:
afxgetmainwnd()->m_hwnd,
如:::sendmessage(afxgetmainwnd()->m_hwnd , wm_my_dosome , 0 ,(lparam)i);
在窗口类中
this->m_hwnd
或者this->getsafehwnd()
2。子窗口句柄:用findwindow,(只要知道子窗口的名字即可)如:
::findwindow(null,windowsname)
返回找到的窗口的句柄
寻找当前窗口是否在运行windowname的程序,该名字为窗口名字,如:
cwnd* pwnd=findwindow(null,_t("清芝--支票机"));//
getsafehwnd
函数功能:获取某个窗口对象(cwnd的派生对象)指针的句柄(hwnd)时,最安全的方法是使用getsafehwnd()函数。
通过下面的例子来看其理由:
cwnd *pwnd = findwindow(“explorewclass”,null); //希望找到资源管理器
hwnd hwnd = pwnd->m_hwnd; //得到它的hwnd
这样的代码当开始得到的pwnd为空的时候就会出现一个“general protection error”,并关闭应用程序,因为一般不能对一个null指针访问其成员,如果用下面的代码:
cwnd *pwnd = findwindow(“explorewclass”,null); //希望找到资源管理器
hwnd hwnd = pwnd->getsafehwnd(); //得到它的hwnd
就不会出现问题,因为尽管当pwnd是null时,getsafehwnd仍然可以用,只是返回null
3。获取窗口中 控件的句柄,用 getdlgitem
语法为:getdlgitem(idc_combo3)->m_hwnd :参数为 该控件的id,返回值为:cwnd* 类型,但它是cwnd类内的函数,因此要先获取控件所在窗口的指针,如:
cstring str(_t("dd"));
::sendmessage(afxgetmainwnd()->getdlgitem(idc_combo3)->m_hwnd, wm_settext , 0 , (lparam)str.getbuffer(0));
从句柄获得指针,用 fromhandle
语法:cwnd* pwnd = cwnd::fromhandle(hwnd);
获取窗口句柄(全集) vc&mfc
获得窗口句柄:
this->m_hwnd
hwnd getforegroundwindow(void);
getsafehwnd 取你程序所在窗口类的句柄
getactivewindow 取当前活动窗口句柄
afxgetmainwnd 取主窗口句柄
getforegroundwindow 取前台窗口句柄
findwindow
enumwindow

如何取得桌面窗口矩形大小?mfc

参考技术A GetWindowRect(hWnd,
&rect);
hWnd是桌面
窗口句柄
,rect就是你要的矩形
用这几句获取桌面所有窗口句柄:
HWND
hWnd
=
::GetDesktopWindow();
hWnd
=
::GetWindow(hWnd,
GW_CHILD);
while(hWnd

hWnd
=
::GetWindow(hWnd,
GW_HWNDNEXT);


这几句得到
鼠标
所在窗口句柄:
GetCursorPos(&ptMouse);
hWnd
=
::WindowFromPoint(ptMouse);
while(::GetParent(hWnd)
!=
DeskHwnd
&&
hWnd
!=
DeskHwnd
&&
::GetParent(hWnd)
!=NULL)

hWnd
=
::GetParent(hWnd);

以上是关于MFC中怎样获取指定窗口的句柄的主要内容,如果未能解决你的问题,请参考以下文章

VC++中怎样获取到一个窗体的句柄?

MFC-通过HWND获取HANDLE

MFC如何知道光标在那个控件上 用哪个函数?谢谢

无法在 MFC 无窗口 Activex 中获取 Cwnd 类的句柄?

怎样在C++中取得WPF窗体的句柄

C++中如何获取当前窗口句柄?