获得父窗口指针获得MFC窗口其它类指针的方法

获得父窗口指针获得MFC窗口其它类指针的方法
获得父窗口指针获得MFC窗口其它类指针的方法

本文由dongbw007贡献

doc1。

获得父窗口指针:获得 MFC 窗口其它类指针的方法

获得 CWinApp: -在 CMainFrame,CChildFrame,CDocument,CView 中直接调用 AfxGetApp()或用 theApp -在其它类中只能用 AfxGetApp() 获得 CMainFrame: -在 CMinApp 中用 AfxGetMainWnd()或者 m_pMainWnd -在 CChildFrame 中可用 GetParentFrame() -在其它类中用 AfxGetMainWnd() 获得 CChildFrame: -在 CView 中用 GetParentFrame() -在 CMainFrame 中用 MDIGetActive()或 GetActiveFrame() -在其它类中用 AfxGetMainWnd()->MDIGetActive()或 AfxGetMainWnd()->GetActiveFrame() 获得 CDocument: -在 CView 中用 GetDocument() -在 CChildFrame 中用 GetActiveView()->GetDocument() -在 CMainFrame 中用 -if SDI:GetActiveView()->GetDocument() -if MDI:MDIGetActive()->GetActiveView()->GetDocument() -在其它类中 -if SDI:AfxGetMainWnd()->GetActiveView()->GetDocument() -if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument() 获得 CView: -在 CDocument 中 POSITION pos = GetFirstViewPosition();GetNextView(pos) -在 CChildFrame 中 GetActiveView() -在 CMainFrame 中 -if SDI:GetActiveView() -if MDI:MDIGetActive()->GetActiveView() -在其它类中 -if SDI:AfxGetMainWnd()->GetActiveView() -if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()

不过要注意在 doc 中要取得 view 的指针 C*View 要注意类 C*View 声明的问题, 因为默认情况下,mfc 在*View.h 中已经包含了*Doc.h,如果在*Doc.h 中包含 *View.h,就会引起嵌套包含问题,这样要在*Doc.h 中加入 class C*View; 而在*Doc.cpp 中加入 #include "*View.h"

////////////////////////////////////////////////////////////////// 其实完全可以在 CYourApp 中添加各种视或文档的指针,在那些视或文档初

始化的时候将指针传给 CYourApp 中的对应变量,这样以后不管在哪用上面 指针只需(CYourApp*)AfxGetApp()取其属性变量即可,明了而且清楚更是 方便我一直专门操作的说: )

////////////////////////////////////////////////////////////////// 我先抛块砖,有玉的砸过来! 在何时何地,你都可以通过以下方法精确的得到任何一个对象(Application,DocTemplate,Document, View,Frame) 1。通过 AfxGetApp()得到当前的 App 对象; 2。通过 AfxGetMainWnd()得到主窗口; 3。通过 CMDIFrameWnd::GetActiveFrame 得到当前活动窗口; 4。通过 GetNextWindow()遍例所有的子窗口; (如果要得到你想要的子窗口,可以通过特定的成员变量来标 志) ; 5。通过 CWinApp::GetFirstDocTemplatePostion()以及 CWinApp::GetNextDocTemplate()的组合应用来遍历所有 的 DocTemplate 对象,并且用 CDocTemplate::GetDocString()来判断当前得到的文档莫板对象是哪个。 6。通过 CDocTemplate::GetFirstDocPosition()以及 CDocTemplate 的 GetNextDoc()组合来遍历所有的该模板 的 文 档 对 象 , 并 用 CDocument::GetDocTemplate() 来 得 到 文 档 模 板 , 用 CDocment::GetTitle() 或 者 GetPathName()来判断当前的文档是哪个。 7。通过 CDocuemt 的 GetFirstViewPositon()以及 GetNextView()来遍历视图对象,一般通过访问 View 的成员 变量来区别各个视图;通过 CView::GetDocument()来得到文档对象; 8。Frame->View:通过 GetActiveView 方法; 9。Frame->Doc:通过 GetActiveDocument(); 10。View->Frame:GetParentFrame(); 11。View->Doc:GetDocuemt()//前面已经说了。 12。Doc->View:前面说了; 13。Doc->Frame:不知道有没有很直接的方法。 MFC 应用程序中指针的使用 1) 在 View 中获得 Doc 指针 2) 在 App 中获得 MainFrame 指针 3) 在 View 中获得 MainFrame 指针 4) 获得 View(已建立)指针 5) 获得当前文档指针 6) 获得状态栏与工具栏指针 7) 获得状态栏与工具栏变量 8) 在 Mainframe 获得菜单指针 9) 在任何类中获得应用程序类 10) 从文档类取得视图类的指针(1) 11) 在 App 中获得文档模板指针 12) 从文档模板获得文档类指针 13) 在文档类中获得文档模板指针 14) 从文档类取得视图类的指针(2) 15) 从一个视图类取得另一视图类的指针

VC 中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获

取与操作。其实这些内容基 本上是每本 VC 学习工具书上必讲的内容,而且通过 MSDN 很多问题都能解决。下面文字主要是个人在编 程中指针使用的一些体会,说的不当的地方请指正。一般我们使用的框架是 VC 提供的 Wizard 生成的 MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。下面这节内容主要是一般 的框架, 然后再讲多线程中的指针使用。 使用到的类需要包含响应的头文件。 首先一般获得本类(视, 文档, 对话框都支持)实例指针 this,用 this 的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便 于在非本类中操作和使用本类中的功能。 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);

MFC知识点(自己整理的,只供参考)

知识点:不是很全面,只供参考 第一章 Windows应用程序使用的界面是由各种图形元素组成的图形界面(GUI)。 Windows提供了大量预定义的用C语言编写的函数,这些函数就叫做API(Application Programming Interface)函数。 在Windows应用程序中,存在着许多与DOS应用程序不同的复杂对象,例如窗口、按钮、滚动条等等。Windows把为这种复杂对象所定义的标识叫做句柄。 常用的句柄类型:HWND 窗口句柄,HDC 图形设备环境句柄,HINSTANCE 当前程序应用实例句柄,HBITMAP 位图句柄,HICON 图标句柄,HCURSOR 光标句柄,HBRUSH 画刷句柄,HPEN 画笔句柄,HFONT 字体句柄,HMENU 菜单句柄,HFILE 文件句柄 事件的描述是一个消息 消息的结构: typedef struct tagMSG { HWND hwnd; //产生消息的窗口句柄 UINT message;//消息的标识码 WPARAM wParam;//消息的附加信息1 LPARAM lParam;//消息的附加信息2 DWORD time; //消息进入消息队列的时刻 POINT pt; //表示发送该消息时鼠标的位置 }MSG; 消息循环: while(GetMessage(&msg,NULL,NULL,NULL))//系统处理了消息后返回 { TranslateMessage(&msg);//把键盘消息翻译成字符消息 DispatchMessage(&msg);//把消息派发给Windows系统 创建窗口的三个步骤: 注册窗口类: RegisterClass(&wc); 创建窗口: hwnd=CreateWindow( lpszClassName, "Windows", WS_OVERLAPPEDWINDOW, 120,50,800,600, NULL, NULL, hInstance, NULL); 显示窗口: ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); 大题:用函数封装Windows程序(P16) 第二章

VCMFC编程各种窗口句柄获取函数详解

AfxGetMainWnd AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。 函数原型:HWND GetTopWindow(HWND hWnd); 参数: hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。返回值: 如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返回值为NULL。 GetForegroundWindow 函数功能:该函数返回当前系统的前台窗口的窗口句柄。 函数原型:HWND GetForegroundWindow(VOID) 返回值:函数返回前台窗回的句柄。 GetActiveWindow 函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。 函数原型:HWND GetActiveWindow(VOID) 返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。 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 IsWindowVisible 函数功能:该函数获得给定窗口的可视状态。 函数原型:BOOL IsWindowVisible(HWND hWnd); 参数; hWnd:被测试窗口的句柄。 返回值:

常用的MFC类及其作用

常用的MFC类及其作用 分类:MFC基础类专区2008-10-14 11:16 445人阅读评论(1) 收藏举报 1.CRuntimeClass结构 继承自CObject的类都有一个与它相关的CRuntimeClass结构,用来在运行时获得对象以及其基类的信息。 要使用CRuntimeClass结构,必需借助于RUNTIME_CLASS()宏和其他有关运行时类型识别的宏。 2.CObject CObject类的作用: a.对象诊断:MFC提供了两种对象的诊断机制,一种是利用成员含数AssertValid 进行对象有效性检查,这样可以使类在继续运行以前对自已进行正确性检查。另一种是利用成员含数Dump输出对象的数据成员的值,诊断信息以文本形式放入一个数据流中,用于调试器的输出窗口信息显示。这两种诊断只能用于Debug版的应用程序。 b.CObject类提供了GetRuntimeClass与IsKindOf两个成员含数来支持运行时类型识别。GetRunntimeClass根据对象的类返回一个CRuntimeClass结构的指针,它包含了一个类的运行信息,含数IsKindOf用于测试对象与给定类的关系。 c.提供对象的序列化。必须在类的定义中包含DECLARE_SERIAL宏,并且在类的实现文件中加入包含IMPLEMENT_SERIAL宏. https://www.360docs.net/doc/559076000.html,mdTarget 该类直接从CObject类派生而来. 它负责将消息发送到能够响应这些消息的对象。它是所有能实行消息映射MFC类的基类,如CWinThread,CWinApp,CWnd,CView,CDocument等类。CCmdTarget 类的主要功能包括消息发送,设置光标和支持自动化. a.消息发送:MFC应用程序为每个CCmdTarget派生类创建一个称为<消息映射表>的<静态数据结构>,该消息映射结构将消息映射到对象所对应的消息处理含数

MFC复习题

名词解释 1.事件:能触发程序做出相应反应的因素或动作叫做“事件” 2、句柄:用来区分普通变量的标识的标识叫做句柄 3、消息:为了描述事件的各种信息而定义的一个结叫做消息 4、Windows的API函数:由操作系统提供的,用户可以使用的函数叫做API函数 5、Windows SDK程序:直接使用API函数开发程序的早期Windows应用程序的开发工具 6、资源:用不同方式制作和保存的数据叫做资源 7、图象设备接口(GDI):用于改变DC属性的操作,即与绘图相关的操作制作成的函数的 集合。 8、控件CDC类:把DC和GDI函数封装到一起形成的类叫做控件CDC类 9、消息循环:在创建了窗口的应用程序中,应用程序将不断地从消息队列中获取消息,并 将消息指派给指定的窗口处理函数来处理,然后再回来从消息队列获取消 息,这个不断重复的工作过程叫做消息循环。 10、无效显示区:无效显示区一般定义为窗口用户区上的一个矩形区域,这个区域应覆盖所有因文档发生变化而需要重绘的部分。当程序需要重新绘制一个图形时,只要重新绘制该矩形内部的图形就可以了。 11、控件:为了实现应用程序与用户之间的交互,Windows允许在应用程序的界面上放置诸 如命令按钮、文本框、滚动条等一些图形部件,因为这些部件可以用来处理用户事件,并使应用做出相应的反应,所以这些图形部件通常叫做控件。 12、类信息表:类中存放了类信息的一个CruntimeClass结构类型数据。其中的主要内容为 类名称和指向对象构建函数的指针,建立该表的目的就是为了能在运行期根据类名称调用构建函数来动态创建对象。 简答题 1.位图的主要步骤: 1)用位图类来定义一个对象(Bitmap) 2)把位图资源载入位图对象3)获取位图信息 4)把位图选入内存设备环境5)显示位图 2.利用AppWizard生成默认的SDI应用程序My时,向导自动生成的哪四个类?及其相应 的功能。 CMainFrame(构建应用程序,显示窗架)CMyApp(整个应用程序)CMyDoc(管理数据)CMyView(显示数据) 3.创建窗口的五个步骤:1)定义窗口2)注册窗口 3)创建窗口4)显示窗口5)消息循环 4.简述从Cdocument类派生自己需要的文档类的一般步骤。 1)以CDocument为基类,派生出一个类2)在此类中添加数据成员和成员函数 3)在构造函数中进行初始化数据成员4)在实现部分编写对应的成员函数 5.以鼠标消息WM_MOUSEMOVE为例,写出在MFC编程中,为视图CJKXView手工添 加消息响应函数的步骤与相关代码。 1)在类CJKXView的头文件中添加声明消息响应函数,代码为:afx_msg void OnMOUSEMOVE(UINT flags,CPonint point); 2)在现实文件BEGIN_MESSAGE_MAP与END_MESSAGE_MAP( )之间添加消息映射表ON_WM_MOUSEMOVE( ) 3)添加消息响应函数void CMyview::Onmousemove(UINT flags,CPoint point); 6.在MFC中创建和使用模式对话框的主要步骤有哪些? 1)使用对话框编辑器创建对话框资源;

mfc如何修饰mainframe类

1:如何修改单文档应用程序的窗口标题,查阅MSDC文章: Changing the styles of a window created by MFC. 要在CMainFrame的PrecreatWindow()中加入如下代码: cs.style&=~FWS_ADDTOTITLE; cs.lpszName="This is a test!"; 可以先不要上一句试一试! 另一种方法是 : cs.style=WS_OVERLAPPEDWINDOW; 再进行修改,也可以不修改,那么是去掉默认文档标题,而只显示原程序标题! 另一类方法是在窗口创建后再修改,因为在OnCreate中,开始的这些代码: if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar (IDR_MAINFRAME)) { TRACE0("Failed to create toolbarn"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || ! m_wndStatusBar.SetIndicators(indicators, sizeof (indicators)/sizeof(UINT))) { TRACE0("Failed to create status barn"); return -1; // fail to create } // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndToolBar.EnableDocking (CBRS_ALIGN_ANY); EnableDocking (CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); 完成了窗口创建,工具栏,状态栏的创建等工作,可以在后面利用一个系统全局函数SetWindowLong()函数进行修改: 加入代码为:SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW); 与此相对,还有一个GetWindowLong()函数可供使用!如下面代码去掉了窗口上的最大化按钮: SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE) & ~MAXIMIZEBOX); 当然SetWindowLon()还可以做别的修改.与SetWindowLong()相类似的另一个系统全局函数为SetClassLong();

MFC如何在文档(CXXXDoc)类或框架(CMainFrame)类中获得视类(CMyView

MFC如何在文档(CXXXDoc)类或框架(CMainFrame)类中 获得视类(CMyView 在文档类中只要使用(多文档的,单文档的更简单一点儿) POSITION pos=this->GetFirstViewPosition();//要写在文档类中,在其他类中把this换成文档指针就可以了 while(pos) { CView *pView=this->GetNextView(pos); } 而在框架类中只要选取得文档对象,然后再使用上面的代码 以下是从一个对象得到另一个对象有方面(摘自MFC深入浅出) 从一个对象得到另一个对象的方法 本对象要得到的对象使用的成员函数CDocument对象视列表 GetFirstViewPosition,GetNextView 文档模板GetDocTemplate CView 对象文档对象GetDocument 边框窗口GetParentFrame

CMDIChildWnd或 CFrameWnd 对象活动视GetActiveView 活动视的文档GetActiveDocument CMDIFrameWnd对象活动文档边框窗口MDIGetActive 在框架类中使用GetActiveView(); 在文档类中 (CMainFrame*)(AfxGetApp()->m_pMainWnd))->GetActiveView(); MFC中怎么在CMainFrame下获得View类的指针 使用GetActiveView()函数 MFC中普通类如何获取view类的指针? 在普通类(Generic class)中怎么得到view类的指针?我试过这样: CMainFrame *p=(CMainFrame*)AfxGetMainWnd(); CView *pv=p->GetActiveView(); 按照你的用法应该就是可以的! 是不是在这样用时,View还没有创建完成啊,所以pv才是空的。CMainFrame *m_pfm = (CMainFrame*)AfxGetApp()->m_pMainWnd;

MFC的复习资料-有试题包括答案

1-1 什么是Windows SDK程序? 答:使用软件开发工具包开发出来的Windows应用程序叫做Windows SDK程序。 1-3 打开windows.h文件,看一下Windows系统的句柄是什么数据类型的?答:整型。 1-5 什么是事件? 答:能触发程序做出相应反应的因素或动作叫做“事件”。 1-6 如何显示和更新窗口? 答:调用函数ShowWindow显示窗口,调用函数UpdateWindows更新窗口。 1-7 什么是消息循环? 答:在创建了窗口的应用程序中,应用程序将不断地从消息队列中获取消息,并将消息指派给指定的窗口处理函数来处理,然后再回来从消息队列获取消息,这个不断重复的工作过程叫做消息循环。 1-9 说明Windows应用程序的主函数、窗口函数与Windows系统之间的关系。 答:Windows应用程序的主函数和窗口函数都是系统调用的函数,主函数是在应用程序启动时由系统首先调用的函数,而窗口函数是主函数在消息循环中获得消息并把消息派送给系统之后,由系统调用的用来处理消息的函数。 2-1 在窗体类CframeWnd中需要封装哪些成员? 答:在窗体类CframeWnd中要封装窗口句柄、窗口类的定义、注册窗口类、创建窗口、显示更新窗口。2-2 应用程序类CwinApp应该具备那些主要功能? 答:创建、显示应用程序的窗口和建立消息循环。 2-3 在MFC程序设计中,如果要建立拥有自己风格的主窗口,应该重写什么函数。 答:继承CWinAPP类并需要重写该类的成员函数InitInstaance。 3-3 简述构成文档/视图结构应用程序框架的四个MFC派生类,并说出它们的功能。 答:假如工程名称为MyPrj则MFC AppWizard会自动创建一下四个派生类来构成应用程序的框架。 .CFrame类的派生类CMainFrame; .CWinApp类的派生类CMyPrjApp; .CDocument类的派生类CMyPrjDoc; .CView类的派生类CMyPrjView。 其中,CMyPrjDoc类对象用来存储和管理应用程序中的数据;CMainFrame对象与CMyPrjView对象构成了应用程序的界面,CMainFrame对象只是CMyPrjView对象的容器,而CMyPrjView类的对象是用来显示文档与接收用户事件的;CMyPrjApp类的对象是应用程序的全局对象,它是应用程序中各对象的容器,负责创建应用程序界面和消息循环。 3-4 在文档/视图结构的应用程序中,视图类对象是如何获取文档类对象中数据的? 答:是依靠视图类的成员函数GetDocument来返回文档对象指针,然后再通过该指针访问文档类的数据成员或函数成员。 3-5 在MFC对程序窗口功能的划分中你受到了什么启发? 答:由于简单的MFC应用程序框架没有把数据的存储部分和与用户的交互部分分开,所以类违背了面向对象程序设计的“单一职责原则”,从而使窗口类笨重杂乱,没有灵活性。而在文档/视图结构中则由于遵循了“单一职责原则”,从而使文档类和视图类既有分工又有合作,代码清晰,程序架构灵活。 3-6 什么叫类信息表?它在对象动态创建中起什么作用? 答:类中存放了类信息的一个CruntimeClass结构类型数据。其中的主要内容为类名称和指向对象构建函数的指针,建立该表的目的就是为了能在运行期根据类名称调用构建函数来动态创建对象。 3-7 MFC所说的对象动态创建与C++中的对象动态创建有什么区别?对象动态创建的核心是多少? 答:MFC所说的对象动态创建指的是在程序运行期间根据类名称创建一个对象;而C++所说的对象动态创建是为待创建的对象动态分配存储空间。 4-1 为什么要使用DC? 答:为了屏蔽硬件输出设备的多样性,Windows系统为程序员提供了一个可以操作这些硬件却与硬件无关的接口,于是就可以把对不同设备的操作方法统一起来。 4-3 如何把绘图工具载入设备描述环境? 答:使用CDC的成员函数SelectObject把绘图工具载入设备描述环境。 4-4 如何使用CDC类提供的绘图方法绘图? 答:首先使用语句CDC*pDC创建一个CDC类对象的指针,然后就可以用下面格式的语句来调用CDC类提

MFC常用类介绍

MFC常用类介绍(一) C++学习 2010-06-27 11:43:05 阅读332 评论0 字号:大中小订阅 CStatic CObject └CCmdTarget └CWnd └CStatic CStatic类提供了一个Windows静态控件的性能。一个静态控件用来显示一个文本字符串,框,矩形,图标,光标,位图,或增强的图元文件。它可以被用来作为标签,框,或用来分隔其它的控件。一个静态控件不接收输入,也不提供输出;但是,如果它是用SS_NOTIFY风格创建的,则它可以通知其父有关设备点击的消息。创建一个静态控件分两步。首先,调用构造函数来构造此CStatic对象,然后调用Create成员函数来创建此静态控件并将它与该CStatic对象连接。如果你是在一个对话框中创建了一个静态控件(通过一个对话框资源),则当用户关闭这个对话框时,此CStatic对象被自动销毁。如果你是在一个窗口中创建了一个CStatic对象,则必须由你来销毁它。在一个窗口的堆栈中创建的CStatic对象将自动被销毁。如果你是使用new函数在堆中创建CStatic对象,则当你使用完后,必须调用delete来销毁这个CStatic 对象。 #include 请参阅: CWnd,CButton,CComboBox,CEdit,CListBox,CScrollBar,CDialog CStatic类成员 构造 CStatic构造一个CStatic对象 初始化 Create创建Windows静态控件并将它与该CStatic对象连接 操作符 SetBitmap指定要在此静态控件中显示的位图 GetBitmap获取先前用SetBitmap设置的位图的句柄 SetIcon指定一个要在此静态控件中显示的图标 GetIcon获取先前用SetIcon设置的图标的句柄 SetCursor指定要显示在此静态控件中的光标图像 GetCursor获取先前用SetCursor设置的光标图像的句柄 SetEnhMetaFile指定要显示在此静态控件中的增强的图元文件 GetEnhMetaFile获取先前用SetEnhMetaFile设置的增强图元文件的句柄 CEdit CObject └CCmdTarget └CWnd └CEdit

如何获取应用程序的实例句柄

如何获取应用程序的实例句柄? 应用程序的实例句柄保存在CWinAppIm_hInstance 中,可以这么调用AfxGetInstancdHandle获得句柄. Example: HANDLE hInstance=AfxGetInstanceHandle(); 2. 如何通过代码获得应用程序主窗口的指针? 主窗口的指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMainWnd实现。AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最大化. 3. 如何在程序中获得其他程序的图标? 两种方法: (1) SDK函数 SHGetFileInfo 或使用 ExtractIcon获得图标资源的 handle, (2) SDK函数 SHGetFileInfo获得有关文件的很多信息,如大小图标,属性, 类型等. Example(1): 在程序窗口左上角显示NotePad图标. voidCSampleView: OnDraw(CDC * pDC) { if( :: SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"),0, &stFileInfo,sizeof(stFileInfo),SHGFI_ICON)) { pDC ->DrawIcon(10,10,stFileInfo.hIcon); } } Example(2):同样功能,Use ExtractIcon Function voidCSampleView:: OnDraw(CDC *pDC) { HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T ("NotePad.exe"),0); if (hIcon&&hIcon!=(HICON)-1) pDC->DrawIcon(10,10,hIcon); } 说明: 获得notepad.exe的路径正规上来说用GetWindowsDirectory 函数得到, 如 果是调用 win95下的画笔,应该用访问注册表的方法获得其路径,要作成一个 比 较考究的程序,考虑应该全面点. 4. 如何编程结束应用程序?如何编程控制windows的重新引导? 这是个很简单又是编程中经常要遇到的问题.

MFC下的文件类_CFile

MFC下的文件类 11.MFC下的文件类 1.文件操作的方法 使用Visual C++编程,有如下方法进行文件操作: (1)使用标准C运行库函数,包括fopen、fclose、fseek等。 (2)使用Win16下的文件和目录操作函数,如lopen、lclose、lseek等。不过,在 Win32下,这些函数主要是为了和Win16向后兼容。 (3)使用Win32下的文件和目录操作函数,如CreateFile,CopyFile,DeleteFile, FindNextFile,等等。 Win32下,打开和创建文件都由CreateFile完成,成功的话,得到一个Win32下的句 柄,这不同于“C”的fopen返回的句柄。在Win16下,该句柄和C运行库文件操作函 数相容。但在Win32下,“C”的文件操作函数不能使用该句柄,如果需要的话,可以 使用函数_open_osfhandle从Win32句柄得到一个“C”文件函数可以使用的文件句柄。 关闭文件使用Win32的CloseHandle。 在Win32下,CreateFile可以操作的对象除了磁盘文件外,还包括设备文件如通讯端 口、管道、控制台输入、邮件槽等等。 (4)使用CFile和其派生类进行文件操作。CFile从CObject派生,其派生类包括操 作文本文件的CStdioFile,操作内存文件的CmemFile,等等。 CFile是建立在Win32的文件操作体系的基础上,它封装了部分Win32文件操作函数。 最好是使用CFile类(或派生类)的对象来操作文件,必要的话,可以从这些类派生 自己的文件操作类。统一使用CFile的界面可以得到好的移植性。 2.MFC的文件类 MFC用一些类来封装文件访问的Win32 API。以CFile为基础,从CFile派生出几个 类,如CStdioFile,CMemFile,MFC内部使用的CMiororFile,等等。 1.CFile的结构 1.CFile定义的枚举类型 CFile类定义了一些和文件操作相关的枚举类型,主要有四种:OpenFlags,Attribute,SeekPosition,hFileNull。下面,分别解释这些枚举类型。 1.OpenFlags

MFC讲义

1.将MFC应用程序的命令处理路径补充完整:命令—(视图类)—(文档类)—文档模板类—(框架窗口类)—应用程序类 2.传统的软件开发主要采用(过程)驱动的方法,而WINDOWS程序的开发使用(消息)驱动模型,该模型靠(事件)机制来实现其功能。 3.(主框架类)是应用程序中负责控制菜单、工具栏和状态栏等界面元素的最主要的类。 4.VC++开发环境可以生成的基于MFC AppWizard exe的应用程序类型有(对话框)(单文档/视图结构)和(多文档/视图结构)。 5.包含类定义的文件称为(头文件),包含类中成员函数的实现代码的文件称为(源文件),包含资源信息的文件称为(资源文件)。 6.Resource View的主要功能是(编辑当前工程中的资源)。 7.应用程序向导的主要功能是(帮助生成应用程序)。 8.导的主要功能是(管理各个类中的消息)。 9.工作区窗口一般在开发环境的左侧,它包含工程的多各方面,分别是(ClassView)、(ResourceView)和(FileView)。 10.项目工作区的文件扩展名为(dsw)。 11. WINDOWS应用程序的消息来源主要包括(输入消息)、(控制消息)、(系统消息)和(用户消息)。 12.发送消息可以采用的两个函数是(PostMessage)和(SendMessage)。 https://www.360docs.net/doc/559076000.html,mdUI类的主要功能是(主要用来更新命令用户接口的状态,如子菜单、工具栏上的按钮等)。 14.代码ON_UPDATE_COMMAND_UI(ID_TEST,OnUpdateTest)的主要功能是(将对ID_TEST的更新命令接口消息的处理映射到OnUpdateTest函数上)。 15.CString类的功能是(处理字符串),其Format函数的功能是(格式化字符串)。 16.Ctime类的功能是(处理日期时间),其Format函数的功能是(将时间对象格式化为字符串)。 17.MessageBox函数的第一个参数表示(消息文字),第二个参数表示(标题文字),第三个参数表示(图标与按钮组合).

MFC中获取常见类句柄

一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针和句柄获取和操作问题。本文中将针对各类句柄的获得、指针的获得以及MFC中常见应用进行阐述并举例。 本文内容索引: ===================================================== ==== MFC中获取常见类句柄<视图类,文档类,框架类,应用程序类> MFC中获取窗口句柄及相关函数 MFC获取控件句柄 MFC各类中获取类指针详解 MSDN关于应用程序信息和管理的各个函数 ===================================================== ===== MFC中获取常见类句柄<视图类,文档类,框架类,应用程序类> 本节为VC中常用的文档类,视图类,框架类,应用程序类,自定义类中获取其它四个类的方法: GET App AfxGetInstanceHandle() AfxGetApp() GET Frame->View->Document SDI AfxGetMainWnd() -> GetActiveView() -> GetDocument()

MDI AfxGetMainWnd() -> MDIGetActive() -> GetActiveView() -> GetDocument() GET Menu CMenu *pMenu=AfxGetApp()->m_pMainWnd->GetMenu(); GET ToolBar,StatusBar (CMainFrame *)GetParent()->m_wndToolBar; (CMainFrame *)GetParent()->m_wndStatusBar; CStatusBar * pStatusBa=(CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_ST ATUS_BAR); CToolBar * pToolBar=(CtoolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOL BAR); Get View from Document GetFirstViewPosition 和GetNextView 函数得到指针。 MFC中获取窗口句柄及相关函数 首先,窗口句柄,在窗口类中直接使用成员变量m_hWnd,在窗口外最常见是用AfxGetMainWnd (获取主窗口指针,其成员变量m_hWnd为主窗口句柄): HWND hWnd = AfxGetMainWnd()->m_hWnd;

MFC各类库详解

1.MFC概述 1.MFC是一个编程框架 MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。 1.封装 构成MFC框架的是MFC类库。MFC类库是C++类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。 (1)对Win32应用程序编程接口的封装 用一个C++ Object来包装一个Windows Object。例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。 (2)对应用程序概念的封装 使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。 (3)对COM/OLE特性的封装 OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。 (4)对ODBC功能的封装 以少量的能提供与ODBC之间更高级接口的C++类,封装了ODBC API的大量的复杂的工作,提供了一种数据库编程模式。 2.继承

MFC系统api大全

MFC API函数大全 1.API之网络函数 (2) 2. API之消息函数 (2) 3. API之文件处理函数 (2) 4. API之打印函数 (6) 5. API之文本和字体函数 (8)

1.API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称 WNetGetLastError 获取网络错误的扩展错误信息 WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC (统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口 GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定窗口的消息队列 PostThreadMessage 将一条消息投递给应用程序 RegisterWindowMessage 获取分配给一个字串标识符的消息编号 ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口 SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 3. API之文件处理函数 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录

MFC获取指针

MFC通过对话框窗口句柄获得对话框对象指针 MFC在很多的对话框操作中,我们经常要用到在一个对话框中调用另一个对话框的函数或变量.可以用如下方法来解决. HWND hWnd=::FindWindow(NULL,_T("窗口名")); //得到对话框的句柄 C***Dialog* pWnd= (C***Dialog*)FromHandle(hWnd); //由句柄得到对话框的对象指针pWnd->xxx( ); //调用C***Dialog中的函数xxx(); VC MFC架构主要由 CMyApp,CMainFrame,CMyDoc,CMyView,CMyDlg等5个主要的类,如何在每个类中相互获取数据,需要在各自相关类中获取其它类的指针。 1.获得应用程序指针 这个很简单,一句话搞定: CMyApp* pApp=(CMyApp*)AfxGetApp(); 2.获得主框架指针 在类CWinThread里面有一个公有的成员变量:CWnd* m_pMainWnd; 它存在的主要目的就是提供我们获得CWnd指针,我们可以利用它来达到我们的目的:CMainFrame* pAppFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd; ASSERT_KINDOF(CMainFrame, pAppFrame); 3. 在框架类中调用文档类、视图类 这里我们可以利用GetActiveXXXXX()去掉用当前激活的文档和视图: CMyDoc* pDoc=(CMyDoc*)GetActiveDocument(); CMyView* pView=(CMyView*)GetActiveView(); 4.在文档类中调用视图类指针 我们可以利用文档类的成员函数GetFirstView()和GetNextView()遍历视图。 CMainFrame* pAppFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd; ASSERT_KINDOF(CMainFrame, pAppFrame);

2015 - MFC的复习资料1

一、选择题 1.对于类中定义的成员,其隐含访问权限为( B ) A、protected B、private C、public D、static 2.类AB的缺省构造函数和析构函数是( A ) A、AB( )和~AB( ) B、AB(int)和~AB( ) C、AB( )和~AB(delete ) D、AB( )和int~AB( ) 3.一个视图对象能连接()文档对象,一个文档对象能连接()视图对象。( D ) A、多个,多个 B、多个,一个 C、一个,一个 D、一个,多个 4.MFC类库中的类按层次关系可知,CStatic 的直接父类为( B ) A、CObject B、CWnd C、CCmdTarget D、CFrameWnd 5.可以利用控件的(B )属性和Tab键顺序来为控件分组。 A、ID B、Group C、Tab stop D、Caption 6.根据对话框的行为性质,对话框可以分为两类:(B ) A、对话框资源和对话框类 B、模式对话框和非模式对话框 C、对话框资源和对话框模板 D、消息对话框和模式对话框 7.以下控件中,( C )没有Caption属性。 A、按钮 B、群组框 C、编辑控件 D、静态控件 8.菜单项助记符前用( C )引导。 A、% B、# C、& D、$ 9.更新菜单状态的消息是( C )。 A、WM_COMMAND B、UPDATE C、ON_UPDATE_COMMAND_UI D、INV ALIDATE 10.关于工具栏、菜单和加速键的关系,正确的说法是(C )。 A、工具按钮与菜单必须一一对应 B、工具按钮与加速键一一对应 C、工具按钮不必与菜单一一对应 D、菜单与加速键一一对应 11.对于结构中定义的成员,其隐含访问权限为( C ) A、protected B、private C、public D、static 12.所有的控件都是( B ) 类的派生类,都可以作为一个特殊的窗口来处理。 A、CView B、CWnd C、CWindow D、CDialog 13.设置编辑控件的文本内容,可使用函数( A )

mfc常用类及其成员函数.doc

MFC常用类及其成员函数 2009-08-26 16:06 CRuntimeClass 结构 在CRuntimeClass结构中定义了类名、对象所占存储空间的大小、类的版本号等成员变量及动态创建对象、派牛关系判断等成员函数。每一个从CObject 类派生的类都有一个CRuntimeClass结构同它关联,以便完成在运行吋得到对象的信息或基类的信息。 要使用CRuntimeClass结构,必须结合使用RUNTIME.CLASS()宏和其他有关运行时类型识别的MFC宏。 CCmdTarget 类 (1)消息发送 MFC应用程序为每个CCmdTarget派生类创建一个称为消息映射表的静态数据结构,可将消息映射到对象所对应的消息处理函数上。 (2)设置光标 BeginWaitCursor ()将光标改为沙漏形状; EndWaitCursor () 将光标改冋到之前的形状; RestoreWaitCursor ()用于将光标还原为等待状态。 (3)支持自动化 CCmdTarget类支持程序通过COM接口进行交互操作,自动翻译COM接口的方法。 CWinThread 类 由CCmdTarget派生,主要工作是创建和处理消息循环。 CWinApp 类 从CWinThread 类派生,成员函数InitApplication()、Initlnstance()、Run()。 在TniLTnstanceO函数中,创建了一个单文档模板类或多文档模板类(CDocTemplate)的对象,并且在文档模板的构造函数屮,系统定义的宏RUNT1ME.CLASS 创建了文档类对象,框架窗口类对象和视图类对象. 在MFC应用程序中有且仅有一个CWinApp派生类的对象,代表程序运行的主 线程,代表应用程序本身。

MFC调用一个程序的方法

所以感觉你这里的PID号给了个固定值,应该抓不住对话框。 下面这段能够抓对话框,不知道是你要的效果么 void C对话框中嵌对话框Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CRect rec; CWnd::GetClientRect(&rec); HWND hWnd = ::FindWindow(NULL, _T("TestDlg")); ::SetWindowPos(hWnd, NULL, 0,0,0,0,SWP_NOMOVE|SWP_NOZORDER|SWP_NOSIZE|SW P_FRAMECHANGED); ::SetParent(hWnd, this->GetSafeHwnd()); ::SetWindowPos(hWnd, NULL, 0, 0, rec.Width(), rec.Height(), SWP_NOZORDER); //CDialogEx::OnOK(); } vc++ 在程序中运行另一个程序的方法 2010-08-13 14:47 1419人阅读评论(0) 收藏举报 vc++nullattributes文档microsoftsecurity 在vc++ 程序中运行另一个程序的方法有三个:WinExec(),ShellExcute ()和CreateProcess() 三个SDK函数: WinExec,ShellExecute,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec 灵活一些,CreateProcess最为复杂。 WinExec 两个参数,前一个指定路径,后一个指定显示方式。 ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。 CreateProcess 一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们就需要使用CreateProcess函数了。 三个SDK函数( WinExec、ShellExec、CrateProcess )的语法:WinExec

相关文档
最新文档