MFC中如何获得句柄?

MFC中如何获得句柄?,第1张

它涉及BeginPaint和EndPaint两个函数,这两个函数需要窗口句柄(作为参数传给窗口消息处理程序)和PAINTSTRUCT结构的变量(在WINUSER.H表头文件中定义)的地址为参数。Windows程序写作者通常把这一结构汪郑变量命名为ps并且在窗口消息处理程序中定义它:PAINTSTRUCT ps 在处理WM_PAINT消息时,窗口消息处理程序首先呼叫BeginPaint。BeginPaint函数一般在准孝陵做备绘制时导致无效区域的背景被擦除。该函数也填入ps结构的字段。BeginPaint传回的值是设备内容句柄,这一传回值通常被保存在叫做hdc的变量中。它在窗口消息处理程序中的定义如下:HDC hdcHDC数据型态定义为32位的无正负号整数。然后,程序就可以使用需要设备内容句柄的TextOut等GDI函数。呼叫EndPaint即可释放设备内容句柄。方法二虽然最好是在处理WM_PAINT消息处理期间更新整个显示区域,但是您也会发现在处理非WM_PAINT消巧衡息处理期间绘制显示区域的某个部分也是非常有用的。或者您需要将设备内容句柄用于其它目的,如取得设备内容的信息。要得到窗口显示区域的设备内容句柄,可以呼叫GetDC来取得句柄,在使用完后呼叫ReleaseDC:hdc = GetDC (hwnd) 使用GDI函数ReleaseDC (hwnd, hdc) 在MFC中,通过如下方法获得名柄:HDC hdchdc = CreateDC(0,0,0,0)//获得设备句柄

句柄获取方法(获取该窗口的句柄后,即可向该窗口类类发送消息、处理程序):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

楼上的别乱教

GetDlgltem是用来获取子窗口或者控件的指针的

关于如何在MFC中获取控件句柄

在win32利用API来编程时

我们是通过hwnd

=

CreateWindow(

...

)来建立一个窗体,同时返回一个句柄

MFC中的窗口类和控件类都是又一个基类CWnd派生出来的

MFC里封装了CreateWindow(

...

)的过程

所以CWnd类本来自己就有一个句柄成员为m_hWnd

所以只要获得了窗口或者控件的指针

就可以调用成员变量m_hWnd来获取句柄

例如在当前窗口让桐或者控件下 *** 作

就可以直接用this指针

this->m_hWnd

另外

GetSafeHwnd

这个函数也可以试试

具体情况具体分析

具体用法看MSDN吧

记住一点的是

MFC中的消息映射的过程就是通过指针与句柄的映坦盯坦射来实现的则铅


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12450555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存