VC中ID、句柄、指针、对象互相转换 .
来源:互联网 发布:天正建筑 mac 编辑:程序博客网 时间:2024/06/04 17:42
一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。
下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先一般获得本类(视,文档,对话框都支持)实例指针 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(已建立)指针
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
CyouView *pView=(CyouView *)pMain->GetActiveView();
5) 获得当前文档指针
CDocument * pCurrentDoc =(CFrameWnd *)m_pMainWnd->GetActiveDocument();
6) 获得状态栏与工具栏指针
CStatusBar * pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
CToolBar * pToolBar=(CtoolBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
7) 如果框架中加入工具栏和状态栏变量还可以这样
(CMainFrame *)GetParent()->m_wndToolBar;
(CMainFrame *)GetParent()->m_wndStatusBar;
8) 在Mainframe获得菜单指针
CMenu *pMenu=m_pMainWnd->GetMenu();
9) 在任何类中获得应用程序类
-----------------------------------------------------------------------------------------------
句柄用于与别的程序进行沟通。对象用于自身。
VC编程中窗口ID,句柄,指针三者相互转换函数
ID--HANDLE--HWND三者之间的互相转换
id->句柄-----------hWnd = ::GetDlgItem(hParentWnd,id);
id->指针-----------CWnd::GetDlgItem();
句柄->id-----------id = GetWindowLong(hWnd,GWL_ID);
句柄->指针--------CWnd *pWnd=CWnd::FromHandle(hWnd);
指针->ID----------id = GetWindowLong(pWnd->GetSafeHwnd,GWL_ID);
指针->ID----------id = GetDlgCtrlID();
指针->句柄--------hWnd=cWnd.GetSafeHandle() ;
指针->句柄--------mywnd->m_hWnd;
-------------------------------------------
以下是实例
HWND hwndMain = CreateWindow( "GenericAppClass", //建了一个窗口,就有句柄了
"Super Video",
WS_POPUP,
0,
0,
500,
500,
NULL,
NULL,
hInstance,
NULL
);
CWnd* Wnd=new CWnd;
Wnd->Attach(hwndMain); //Wnd就是你通过句柄hwndMain得到的指针
hwndMain=Wnd->Detach();//通过指针求句柄
CWnd *mywnd=new CWnd;
mywnd->Create(_T("STATIC"), "", WS_CHILD | WS_VISIBLE,CRect(0, 0, 400, 400), this, 1234);
mywnd->m_hWnd//对象里的m_hWnd成员数据中就是这个窗口的句柄
由ID获得指针
CWnd*p=GetDlgItem(ID,parent);//parent为父窗口
由指针获得ID
int ID=p->GetDlgCtrlID();//指向当前控件的指针p去获取所指向控件的ID号
由指针获得句柄
p->m_hWnd
然后这上面三式就可以由一个获得另外两个
- VC中ID、句柄、指针、对象互相转换
- VC中ID、句柄、指针、对象互相转换
- VC中ID、句柄、指针、对象互相转换 .
- VC中句柄、指针、ID之间的转换
- vc中ID,指针,句柄之间如何相互转换
- VC中句柄、指针、ID之间的转换
- VC中句柄、指针、ID之间的转换
- VC中句柄、指针、ID之间的转换
- VC中句柄、指针、ID之间的转换
- VC中句柄、指针、ID之间的转换
- VC中句柄、指针、ID之间的转换
- VC中句柄、指针、ID之间的转换
- VC中句柄、指针、ID之间的转换
- VC中句柄、指针、ID之间的转换
- 句柄 ID 指针 转换
- VC中窗口ID,句柄,指针三者相互转换函数
- VC中窗口ID,句柄,指针三者相互转换函数
- VC中窗口ID,句柄,指针三者相互转换函数
- openstack的基本介绍
- ASP.NET MVC Bootstrap极速开发框架
- 面向对象设计
- Android彻底退出应用程序
- 使用POI读写word docx文件
- VC中ID、句柄、指针、对象互相转换 .
- MSSql2008打开企业管理器出错,具体显示提示无法识别的配置节 system.serviceModel。
- linux下weblogic发布cxf webservice的问题
- oracle 11g监听图形界面启动不了
- 关于Adapter的The content of the adapter has changed but ListView did not receive a notification.问题分析
- Linux ssh 安装 及 常用命令
- ios MD5 加密
- 浅谈 ios 内存管理
- 浅谈UITableview 基本使用