首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

VC++6.0入门——第九讲 定制应用功能程序外观

同样,对于MF℃应用程序来说,为了改变MFC AppWizard自动生成的应用程序外观和大小,我们既可以在应用程序窗口创建之前进行,也可以在该窗口创建之后进行。...在MFC程序中,如果想在窗口创建之后改变其外观,可以在框架类(CMainFrame)的OnCreate函数中添加具体的实现代码。...因为SetClassLong函数可以在窗口创建完成之后修改窗口的图标,所以我们可以在程序中每隔一定时间就调用一次这个函数,让其显示预先已准备好的一组图标中的下一幅,从而就可以实现所需的动画效果。...但是,在一个源文件中要想调用另一个源文件中定义的全局变量,必须在调用这个变量之前声明这个变量是在外部定义的,声明代码如下所示,读者可以把它放到CMainFrame类的OnCreate函数定义之前:接着,...MFC提供了一个全局函数:AfxGetApp,可以获得当前应用程序对象的指针。因为这个函数是全局函数,所以在应用程序的任意地方都可以调用它。

9110

VC++6.0入门——第三讲 认识MFC框架

引出VC++6.0入门——认识MFC框架第三讲 MFC框架本章将剖析基于MFC的框架程序,探讨MFC框架程序的内部组织结构。...这个程序和我们在第1章中所创建的程序类似,但比后者多了菜单栏、工具栏以及状态栏。这一切都是通过MFC AppWizard生成的。...hInstance, // handle to application instanceLPVOID lpParam) // window-creation data{// ::表示调用的是平台全局...问题的原因有两个:一是这里定义的btn对象是个局部对象,当执行到OnCreate函数的右大括号(})时,该对象的生命周期就结束了,就会发生析构。...这就是说,当执行到例3-22所示的OnCreate函数的右大括号时,刚刚创建的btn窗口就被与之相关的C++对象销毁了。因此,不能将这个按钮对象定义为一个局部对象。

33410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    windows窗体线程异常_指针在声明和使用时有何不同

    在多线程设计中,许多人为了省事,会将对话框类或其它类的指针传给工作线程,而在工作线程中调用该类的成员函数或成员变量等等。...但是在Debug版本时,在某些情况下,特别是在工作线程中调用pWnd->UpdateData(FALSE)时,会出现错误。...这个错误的原因网上有许多地方讲到了,但是,令人失望的是,讲得好的没几篇,都是非要讲什么线程模块状态什么的,让人看得云里雾里(不过,说实话,也就是从这些文章中才知道是怎么回事的)。...正因为如此,MFC只是在Debug版本中才有这个ASSERT_VALID的问题存在,在Release版本中却没有,因为它没有理由来阻止我们用。...虽然如此,但是毕竟我们的调试许多时候是要用到Debug版本的,MFC的如此做法还是给我们带来了诸多不变,幸运的是,MFC将它的真正检测线程相关MFC对象的代码做成了虚拟函数,也就是说,我们可以重载它,这样在

    51840

    图像处理程序框架—MFC相关知识点

    MFC中OnDraw与OnPaint的区别 : OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中。 ...而OnDraw在BeginPaint与EndPaint间被调用。  1) 在mfc结构里OnPaint是CWnd的成员函数....OnDraw()和OnPaint()有什么区别呢?  首先:我们先要明确CView类派生自CWnd类。而OnPaint()是CWnd的类成员,同时负责响应WM_PAINT消息。...这就是为什么你用VC成的程序代码时,在视图类只有OnDraw没有OnPaint的原因。而在基于对话框的程序中,只有OnPaint。  其次:我们在第《每天跟我学MFC》3的开始部分已经说到了。...所以在OnDraw()里你可以区别对待打印和屏幕绘制。  其实,MFC在进行打印前后还做了很多工作,调用了很多虚函数,比如OnPreparePrint()等。

    1.5K20

    AfxMessageBox和MessageBox差别

    MessageBox()是Win32API函数.后者是mfc中的全局函数.在MFC中能用MessageBox()的地方都能用AfxMessageBox(). afxmessagebox很多其它的时候是用于调试...Afx开头的都是全局函数,也就是说AfxMessageBox能够用于不论什么程序;而MessageBox仅仅能用在CWnd及其派生类中。...AfxMessageBox()函数在不论什么类里边都能够使用,而MessageBox()函数仅仅能在CWnd类的继承类中使用。...在另外一种形式中, nIDPrompt为要显示的文本字符串在字符串表中的ID。函数调用时会自己主动从字符串表中加载字符串并显示在消息框中。...nType = MB_OK ); 所以说,MFC里仅仅是少了第一个參数,同一时候第三和第四都有默认值了,这就是它们的差别,其它的同样 同一时候在MFC的窗口类里要调用API的那个,在写成例如以下:

    96010

    paraphrase和translation的区别_translating和interpreting的区别

    PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码....MFC 消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,可以改变MFC的消息控制流程,甚至可 以作一个全新的控制流出来。...TranslateMessage和DispatchMessage发生之前会调用 AfxPreTranslateMessage,AfxPreTranslateMessage又会调用 CWnd::WalkPreTranslateTree...(虽然也会调用其他函数,但是这个最为关键),其代码如下:   BOOL PASCAL CWnd::WalkPreTranslateTree(HWND hWndStop, MSG* pMsg)   ...hWnd对应的CWnd MFC 中PreTranslateMessage是GetMessage(…)函数的下一级操作,即GetMessage(…)从消息队列中获取消息 后,交由PreTranslateMessage

    67020

    MFC编程入门之五(MFC消息映射机制概述)

    在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作。 比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的操作做出响应。...二、什么是消息映射机制?    MFC使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射 表,以及消息处理函数的声明和实现等代码。...CWnd的派生类都可以接收到标准Windows消息、通知消息和命令消息。命令消息还可以由文档类等接收。  ...消息映射除了在CMainFrame的实线文件中 添加消息映射表外,在类的定义文件MainFrame.h中还会添加一个宏调用:    DECLARE_MESSAGE_MAP() 一般这个宏调用写在类定义的结尾处...本节对MFC消息映射机制只是做了比较简单的讲解,让大家对它有一定的认识,编程入门这不必强求完全掌握。在以后的教程中会经常涉及 到消息的使用,大家会逐渐熟悉MFC的消息映射机制。

    1.8K10

    MFC原理第二讲.MFC的初始化过程

    以及为什么全局应用程序对象要初始化. 也就是我们的theApp这个变量. 也就是MFC的初始化过程. 二丶Winmain查找.   ...这样直接定位到Winmain   2.因为我们的InitInstance调用.我们可以下段点.然后栈回朔可以看到上一层也就是winmain调用的一层. 第一种方法. ? 第二种方法: ?...因为MFC框架太大.现在不利于我们直接看MFC源码学习.所以我们要从最简单的模拟开始. 三丶MFC的初始化过程之theApp为什么全局.   ...所以说.TheApp应用对象数据在main之后经常使用.所以必须编写....为什么还需要第二个 m_pCurApp指针.原因是 MFC在调用的时候.不能直接使用     theApp. 而是通过一个函数 AfxGetTheApp来获取的.

    1.1K52

    MFC进度条同步问题

    在上述三个函数中, OnCreate()负责在状态栏第一次被创建时接收控制,继而创建进度指示器并将它初始化为一个子窗口,它的实现代码如下: int CProgStatusBar::OnCreate(LPCREATESTRUCT...解决这个问题最简单的方法是调用CStatusBar::SetWindowText(NULL)函数在显示进度指示器之前打扫一下环境卫生,清除以前的文本。   ...反之,当调用OnProgress(0)清除进度控制时也存在类似的问题,CProgStatusBar::OnProgress 隐藏进度控制后,状态栏第一个窗格该显示什么信息呢?...当应用程序不做任何事情时,MFC程序总是在这个位置显示资源串AFX_IDS_IDLEMESSAGE表示的文本,其缺省值为”就绪”,当然读者朋友们可以在当前项目的RC文件中任意修改这个值,不管怎样,在MFC...如果你不想从文档发送Windows消息,可以用MFC的视图更新机制来做。你可以发明一个”暗示”代码以及一个小结构来保存进度百分比数据,并通过向框架发送MYWM_PROGRESS消息调用暗示信息。

    1.1K10

    MFC中句柄、指针、ID之间的关联

    MFC中句柄、指针、ID之间的关联 win32直接操作的是句柄HANDLE。...m_hObject (2)CGdiObject::GetSafeHandle (3)能够使用FromHandle函数来通过句柄得到其想要的指针 4.窗体、控件的指针和句柄的相互转化 (1)指针转化为句柄 在MFC...应用程序中首先要获得窗体的指针,然后将其转化为句柄 CWnd* pWnd; HANDLE hWnd = pWnd->GetSafeHwnd(); (2)句柄转化为指针 在MFC应用程序中首先获得对话框控件的句柄...(不论什么时候都能够用,仅仅要是MFC程序中) CWnd* pWnd = AfxGetMainWnd(); (2)获得对话框中控件指针 CWnd* pWnd = GetDlgItem(IDC_xxx...*GetWindow获得窗体指针,pWnd->m_hWnd(The handle of the Windows window attached to this CWnd)在::FromHandle(hWnd

    1.7K40

    VC++6.0 转 VS2005以上版本(1)

    编译时我们向这个目标前进,首先证实了VC 6.0的确不能编译ARX 2004,之后发现VS .NET 2002编译出的动态库在VC 6.0下不能正常使用,很可能是两种编译器产生的动态库导出函数命名规则不一样...3. const 问题 3.1 拷贝构造函数须声明为 XXX( const XXX& obj ) 3.2 声明这样的函数: void dosomething( const XXX*& ptr );在调用的地方...在VS .NET 2005之后已只支持这种写法,写会提示找不到头文件。它里面声明的函数和类型都在名字空间 std 下。 7. 字符串的使用 字符串使用问题有两种。...MFC提供的派生自CWnd的类,有很多统一的接口和数据结构。...ON_WM_CREATE()消息映射宏 该宏在MFC头文件 afxmsg_.h 中定义: // Message map tables for Windows messages #define ON_WM_CREATE

    29620

    在MFC下面实际演示CCriticalSection 的使用

    Q:CCriticalSection是什么? A:CCriticalSection是一种线程同步策略 或者说技术 或者方法 总之呢就是这么个意思。。。。...并运行 确定创建过程OK 第二步:在视图类头文件里面添加头文件#include “afxmt.h” 并在视图类的实现文件里面实例化一个CCriticalSection对象。...CCriticalSection Gsz_CriticalSection; 第三步:在视图里的实现文件里面 定义这两个函数。这两个函数带回会被指定为线程函数。这两个函数不是视图类的成员函数。...程序中的主框架类指针是一个常用作法 CWnd *pMainWnd = AfxGetMainWnd(); ::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread...void CTestGszView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 AfxBeginThread

    60420

    MFC中注释含义

    MFC 的浏览版本对于通过 MFC 调用结构本身进行跟踪非常有用。该目录中的 Readme.Txt 文件解释了如何使用此生成文件。...注意   大类(如 CDC 和 CWnd)的成员可能非常多,若只是在一组中列出所有属性,对清楚地描述成员并没有多大帮助。在这种情况下,类库使用标头形式的其他注释来进一步描述成员。...// Operations 注释 MFC 类声明中的 // Operations 节包含成员函数;可以在对象上调用这些函数,以使该对象执行任务或执行操作。...例如,CWnd::Create 位于构造函数节中,因为在使用 CWnd 对象之前,必须首先调用 C++ 构造函数,然后调用 Create 函数来“完整构造”它。这些成员通常是公共的。...在 MFC 本身中,纯虚函数总是放在此节中。

    1.2K70
    领券