MFC学习之旅--第五天

WM_INITDIALOG和WM_CREATE的区别

  WM_CREATE和WM_INITDIALOG都是窗口刚创建时的回调消息,当窗口还未显示出来之前,对窗口做预先处理的回调函数。WM_CREATE是所有窗口通用的创建时回调函数,用于包括对话框、MDI或者SDI等任何窗口的初始化,对应的消息映射函数时OnCreate。可以在该函数中编写代码,在窗口刚创建还未显示时,修改父窗口属性或创建内部子窗口。WM_INITDIALOG是对话框专用消息,最常用来初始化对话框及其内部控件,对应的消息处理函数是OnInitDialog。这个函数内部第一行一般是先执行基类函数(CDialog::OnInitDialog),基类函数执行过程会将所有对话框资源模板内的控件都创建完毕。比WM_CREATE还早的虚函数是PreSubclassWindow。系统关闭过程:WM_SYSCOMMAND->WM_CLOSE->OnCancel->WM_DESTROY,当WM_DESTROY消息发生时,已经开始销毁窗口了,无法再回头。首先WM_SYSCOMMAND,是对所有系统菜单中的命令的管理(包括:最大化,最小化,关闭,移动,大小等)。WM_CLOSE消息是WM_SYSCOMMAND的一个分支,默认的WM_CLOSE消息会调用OnCancel虚函数。走到WM_DESTROY消息时,窗口的句柄还在,子窗口也可以使用,窗口已经处于不可见状态,并且不能取消关闭了,常用来做窗口(任何窗口包括控件、框架和对话框窗口)的清理工作。可以把这个消息当作析构函数来使用。

各种概念

  CComboBox,由两部分组成,一部分是编辑控件(edit control),另一部分是下拉列表控件(list box:没有列,只有行)。Data:以分号间隔,可以在属性设置中为下拉列表放入多项文字。Modal Frame:边缘凸起

模态对话框与非模态对话框

  非模态对话框,调用CDialog::Create函数来创建,并且调用ShowWindow来显示。MFC中默认的非模态对话框总是依附在主窗口上,我们应该调用GetDesktopWindow(),让它依附在桌面上,就是让它成为一个独立的窗口,在任务栏中有窗口显示。
  MFC的主窗口:APP类成员m_pMainWnd指针指向的对象窗口就是MFC中的主窗口,
  AfxMessageBox,如果本进程没有主窗口,不跟任何窗口关联,但是也会找到主窗口进行附着,而CWnd::MessageBox不是找主窗口附着,跟当前带入的窗口关联。
  AfxGetApp函数,获取的就是全局变量theApp的地址。theApp全局变量里面包含着启动时所有信息。我们习惯把一些全局变量放到theApp的类中
  AfxGetInstanceHandle函数,获取资源总管hInstance的句柄。也可以到theApp中去取
  AfxGetAppName函数,等价于theApp.m_pszAppName。获得应用程序名称,应用程序名称可以来自传递给CWinApp构造函数的参数,或者,如果未指定,则来自ID为AFX_IDS_APP_TITLE的资源字符串。如果在资源中找不到应用程序名,则它来自程序的可执行文件名。
  AfxGetMainWnd函数,优先获取theApp.m_pMainWnd指向的窗口类对象,如果该指针为空则获得当前激活的窗口
  AfxInitRichEdit函数,默认richEdit无法使用,只有在窗口初始化的时候调用AfxInitRichEdit函数才能正常使用。
  AfxSocketInit函数,初始化网络库,内部调用WSAStartup函数。

CWinApp类的内部结构

  成员变量m_lpCmdLine,来自WinMain的第三个参数
  成员变量m_nCmdShow,用于主调进程指定启动后如何显示窗口
  成员变量m_pszExeName,执行文件名(exe或者dll)
  成员变量m_pszProfileName,应用程序的.INI文件名,配置文件名。一般和执行文件名相同。
  成员变量m_pszHelpFilePath,应用程序帮助文件的路劲
  成员变量m_pszRegistryKey,应用程序下对应的注册表名
  类成员函数LoadCursor,从应用程序中加载光标资源。LoadStandardIcon,从应用程序中加载光标资源。
  配置文件(.ini文件)都是在系统目录下,我们常常在OnDestroy函数中做数据的保存。成员函数WriteProfileInt,第一个参数是ini文件格式[]里的文字,第二个参数是=左边,第三个参数是=右边。写入的文件路劲就是theApp下的m_pszProfileName。默认是在系统目录下,我们可以修改m_pszProfileName改变写入ini文件的位置。ini配置文件的特点,方便保存和加载,比CFile使用方便多了;方便运营人员在程序外配置数据;方便数据管理,使用SetRegistryKey可以使应用程序的配置保存在注册表中,而不保存在.ini文件中。也可以使用WriteProfileBinary函数写入一个结构体
  OnIdle,空闲函数。在程序空闲的时候做什么。当没有处理Windows消息时,框架调用CWinApp成员函数OnIdle。重写OnIdle函数以执行后台任务。默认版本会更新用户界面对象(如工具栏按钮)的状态,并对框架在其操作过程中创建的临时对象执行清理。
  DoWaitCursor,传入1,让鼠标变成等待状态,传入0,让鼠标恢复。也可以使用CWaitCursor这个类,构造时忙,析构时恢复。

遍历目录

  C语言遍历目录的函数:_findfirst,_findnext,_findclose
  Windows遍历目录的函数:FindFirstFile,FindNextFile,FindClose
  MFC遍历目录:CFileFind类

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容