MFC框架间联立的方法

来源:互联网 发布:记录销售app软件 编辑:程序博客网 时间:2024/04/30 18:52

一:句柄关联性;

①接获取句柄或者窗口对象:Findwindow和FromHandle

②GetWindow加上FromHandle(hWnd);联立获取、

③获取主窗口句柄:

CWnd *wnd  = AfxGetMainWnd();

HWND hwnd =wnd->GetSafeHwnd();

④获取当前最上层窗口的句柄:

 HWND mainHwnd = ::GetForegroundWindow();//获取当前topmost的窗口句柄

⑤附加一些其它函数:

FindWindow  //这个估计会拖慢程序的运行速率

FindWindowEx

WindowFromPoint//获得当前鼠标光标位置的窗口HWND

GetActiveWindow 取当前活动窗口句柄

AfxGetMainWnd   取主窗口句柄//获得主框架窗口指针(任何时候都可以用,只要是MFC程序中)

GetForegroundWindow取前台窗口句柄

FindWindow寻找参数指定的窗口

EnumWindow枚举窗口

 

(二)MFC【MFC AppWizard(exe)框架】中各个框架间指针关联性:

一、一般的框架(this间的使用):<注意获取到的指针进行强制类型转换>

理解 m_pMainWnd, AfxGetApp(),AfxGetMainWnd() 的意义<最终归结首者>

 

1)获得Doc指针GetDocument();一个视只能有一个文档。

2)获得MainFrame指针CWinApp 中的 m_pMainWnd变量就是MainFrame的指针,也可以: AfxGetMainWnd

3) 获得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) 在任何类中获得应用程序类

AfxGetInstanceHandle得到句柄,AfxGetApp 得到指针

 

(三)MFC中句柄、指针、ID之间的转换使用

win32直接操作的是句柄HANDLE,每个句柄就对应windows窗口,而vc对HANDLE进行类封装,间接操作的都是HANDLE,现在句柄只是类的一个成员变量。

从句柄到指针

CWnd*pWnd=CWnd::FromHandle(hWnd); //a temporary CWnd object is

created //andattached.

pWnd->Attach(hWnd);//Attaches a Windows window to a CWnd object

从指针到句柄

HWNDhWnd=pWnd->GetSafeHandle(); //使用GetSafeHwnd函数取得程序所在窗口类的句柄

hWnd=pWnd->m_hWnd;

SDK编程中窗口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);

GetDlgCtrlID();

指针->句柄--------hWnd=cWnd.GetSafeHandle()or mywnd->m_hWnd;

HICON->ID--------HICONhIcon = AfxGetApp()->LoadIcon(nIconID);

                        HICON hIcon =LoadIcon(AfxGetApp()-

>m_hInstance,MAKEINTRESOURCE(nIconID));

0 0
原创粉丝点击