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
楼上的别乱教GetDlgltem是用来获取子窗口或者控件的指针的
关于如何在MFC中获取控件句柄
在win32利用API来编程时
我们是通过hwnd
=
CreateWindow(
...
)来建立一个窗体,同时返回一个句柄
MFC中的窗口类和控件类都是又一个基类CWnd派生出来的
MFC里封装了CreateWindow(
...
)的过程
所以CWnd类本来自己就有一个句柄成员为m_hWnd
所以只要获得了窗口或者控件的指针
就可以调用成员变量m_hWnd来获取句柄
例如在当前窗口让桐或者控件下 *** 作
就可以直接用this指针
this->m_hWnd
另外
GetSafeHwnd
这个函数也可以试试
具体情况具体分析
具体用法看MSDN吧
记住一点的是
MFC中的消息映射的过程就是通过指针与句柄的映坦盯坦射来实现的则铅
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)