MFC中获取常见类句柄Word格式.docx
- 文档编号:17641155
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:8
- 大小:18.49KB
MFC中获取常见类句柄Word格式.docx
《MFC中获取常见类句柄Word格式.docx》由会员分享,可在线阅读,更多相关《MFC中获取常见类句柄Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
MDI
MDIGetActive()->
GETMenu
CMenu*pMenu=AfxGetApp()->
m_pMainWnd->
GetMenu();
GETToolBar,StatusBar
(CMainFrame*)GetParent()->
m_wndToolBar;
m_wndStatusBar;
CStatusBar*pStatusBa=(CStatusBar*)AfxGetMainWnd()->
GetDescendantWindow(AFX_IDW_STATUS_BAR);
CToolBar*pToolBar=(CtoolBar*)AfxGetMainWnd()->
GetDescendantWindow(AFX_IDW_TOOLBAR);
GetViewfromDocument
GetFirstViewPosition和GetNextView函数得到指针。
首先,窗口句柄,在窗口类中直接使用成员变量m_hWnd,在窗口外最常见是用AfxGetMainWnd
(获取主窗口指针,其成员变量m_hWnd为主窗口句柄):
HWNDhWnd=AfxGetMainWnd()->
m_hWnd;
与其相关的函数说明如下,这些函数对于获取窗口句柄非常有用:
GetTopWindow
函数功能:
该函数检查与特定父窗口相联的子窗口z序(Z序:
垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。
函数原型:
HWNDGetTopWindow(HWNDhWnd);
参数:
hWnd:
被查序的父窗口的句柄。
如果该参数为NULL,函数返回Z序顶部的窗口句柄。
返回值:
如果函数成功,返回值为在Z序顶部的子窗口句柄。
如果指定的窗口无子窗口,返回值为NULL。
GetForegroundWindow
该函数返回当前系统的前台窗口的窗口句柄。
HWNDGetForegroundWindow(VOID)
函数返回前台窗回的句柄。
☆☆☆
GetActiveWindow
获取当前窗口句柄
该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。
HWNDGetActiveWindow(VOID)
返回值是与调用线程的消息队列相关的活动窗口的句柄。
否则,返回值为NULL。
GetSafeHwnd
获取某个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数。
通过下面的例子来看其理由:
CWnd*pwnd=FindWindow(“ExploreWClass”,NULL);
//希望找到资源管理器
[cpp]
viewplaincopy
1.CWnd
*pwnd
=
FindWindow(“ExploreWClass”,NULL);
//希望找到资源管理器
2. HWND
hwnd
pwnd->
m_hwnd;
//得到它的HWND
HWNDhwnd=pwnd->
//得到它的HWND
这样的代码当开始得到的pwnd为空的时候就会出现一个“Generalprotectionerror”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:
GetSafeHwnd();
就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL
IsWindowVisible
该函数获得给定窗口的可视状态。
BOOLIsWindowVisible(HWNDhWnd);
参数;
hWnd:
被测试窗口的句柄。
如果指定的窗口及其父窗口具有WS_VISIBLE风格,返回值为非零;
如果指定的窗口及其父窗口不具有WS_VISIBLE风格,返回值为零。
由于返回值表明了窗口是否具有Ws_VISIBLE风格,因此,即使该窗口被其他窗口遮盖,函数返回值也为非零。
备注:
窗口的可视状态由WS_VISIBLE位指示。
当设置了WS_VISIBLE位,窗口就可显示,而且只要窗口具有WS_VISIBLE风格,任何画在窗口的信息都将被显示。
IsWindow:
该函数确定给定的窗口句柄是否标示一个已存在的窗口。
BOOLIsWindow(HWNDhWnd);
hWnd:
如果窗口句柄标识了一个已存在的窗口,返回值为TURE;
如果窗口句柄未标识一个已存在窗口,返回值为FALSE。
FindWindow:
HWNDFindWindow(LPCSTRlpClassName,LPCSTRlpWindowName);
lpClassName
指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。
如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。
这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
lpWindowName
指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。
如果此参数为NULL,则匹配所有窗口名。
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
如果函数执行失败,则返回值为NULL。
可以通过调用GetLastError函数获得更加详细的错误信息。
来说个应用,窗口标题的改变,我们可以通过SetWindowText来实现:
注:
如果窗口本身属性是不显示标题的,这个函数的调用不会影响窗口属性。
1.//Set
title
for
application’s
main
frame
window
.
2.AfxGetMainWnd
(
)
->
SetWindowText
(_T("
Application
title"
3.//Set
View’s
MDI
child
4.GetParentFrame
("
_T
Child
Frame
new
5.//Set
dialog’s
push
button
control.
6.GetDigitem
(IDC_BUTTON)
(_T
Button
"
SDI中的控件句柄获取:
*pWnd
GetDlgItem(ID_***);
//
取得控件的指针
2.HWND
pWnd->
取得控件的句柄
取得CDC的指针是CDC*pdc=pwnd->
GetWindowDC();
使用到的类需要包含响应的头文件。
首先一般获得本类(视,文档,对话框都支持)实例指针this,用this的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。
这其中的关键在于理解m_pMainWnd,AfxGetApp(),AfxGetMainWnd()的意义!
1)在View中获得Doc指针
CYouSDIDoc*pDoc=GetDocument();
一个视只能有一个文档。
2)在App中获得MainFrame指针
CWinApp中的m_pMainWnd变量就是MainFrame的指针,也可以:
CMainFrame*pMain=(CMainFrame*)AfxGetMainWnd();
3)在View中获得MainFrame指针
CMainFrame*pMain=(CmaimFrame*)AfxGetApp()->
m_pMainWnd;
4)获得View(已建立)指针
CyouView*pView=(CyouView*)pMain->
GetActiveView();
5)获得当前文档指针
CDocument*pCurrentDoc=(CFrameWnd*)m_pMainWnd->
GetActiveDocument();
6)获得状态栏与工具栏指针
CStatusBar*pStatusBar=(CStatusBar*)AfxGetMainWnd()->
CToolBar*pToolBar=(CtoolBar*)AfxGetMainWnd()->
7)如果框架中加入工具栏和状态栏变量还可以这样
(CMainFrame*)GetParent()->
8)在Mainframe获得菜单指针
CMenu*pMenu=m_pMainWnd->
9)在任何类中获得应用程序类
AfxGetInstanceHandle得到句柄,AfxGetApp得到指针
最后提醒大家,在提取到各个句柄之后,因为初次提取的都是标准类句柄,所以,在使用时要注意将标准句柄转换成自己的类的句柄。
如:
AfxGetApp();
//得到的是WinApp类的句柄,
所以操作前记得转换成自己定义的类的句柄。
((CMyApp*)AfxGetApp())->
XXXX();
//这的xxxx()就是你定义的类中间的成员。
Whenyouwriteanapplication,youcreateasingleCWinApp-derivedobject.Attimes,youmaywanttogetinformationaboutthisobjectfromoutsidetheCWinApp-derivedobject.
TheMicrosoftFoundationClassLibraryprovidesthefollowingglobalfunctionstohelpyouaccomplishthesetasks:
ApplicationInformationandManagementFunctions
AfxFreeLibrary
Decrementsthereferencecountoftheloadeddynamic-linklibrary(DLL)module;
whenthereferencecountreacheszero,themoduleisunmapped.
AfxGetApp
Returnsapointertotheapplication'
ssingleCWinAppobject.
AfxGetAppName
Returnsastringcontainingtheapplication'
sname.
AfxGetInstanceHandle
ReturnsanHINSTANCErepresentingthisinstanceoftheapplication.
AfxGetMainWnd
Returnsapointertothecurrent"
main"
windowofanon-OLEapplication,orthein-placeframewindowofaserverapplication.
AfxGetResourceHandle
ReturnsanHINSTANCEtothesourceoftheapplication'
sdefaultresources.Usethistoaccesstheapplication'
sresourcesdirectly.
AfxInitRichEdit
Initializestheversion1.0richeditcontrolfortheapplication.
AfxInitRichEdit2
Initializestheversion2.0andlaterricheditcontrolfortheapplication.
AfxLoadLibrary
MapsaDLLmoduleandreturnsahandlethatcanbeusedtogettheaddressofaDLLfunction.
AfxRegisterWndClass
RegistersaWindowswindowclasstosupplementthoseregisteredautomaticallybyMFC.
AfxSocketInit
CalledinaCWinApp:
:
InitInstanceoverridetoinitializeWindowsSockets.
AfxSetResourceHandle
SetstheHINSTANCEhandlewherethedefaultresourcesoftheapplicationareloaded.
AfxRegisterClass
RegistersawindowclassinaDLLthatusesMFC.
AfxBeginThread
Createsanewthread.
AfxEndThread
Terminatesthecurrentthread.
AfxGetThread
RetrievesapointertothecurrentCWinThreadobject.
AfxWinInit
CalledbytheMFC-suppliedWinMainfunction,aspartoftheCWinAppinitializationofaGUI-basedapplication,toinitializeMFC.MustbecalleddirectlyforconsoleapplicationsusingMFC.
Reference:
1.
2.
3.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 获取 常见 句柄
![提示](https://static.bdocx.com/images/bang_tan.gif)