vc用法总结

2024-04-12

vc用法总结(共6篇)

篇1:vc用法总结

VC中静态控件的特殊用法

【摘要】 本文将通过示例程序来介绍Visual C 6.0静态控件的一些特殊用法 【关键词】Visual C 静态控件 图标 位图

使用Visual C 6.0编制软件时,静态控件是最常用的控件之一。一般情况下,静态控件用作那些没有固定标题文本属性的控件(如文本编辑控件、列表框等)的标签,或者用来为控件分组,或者用来显示一些提示性的文件。实际上,静态控件除了显示静态文本这一基本功能外,还有许多其他的特殊功能,如在静态控件中可以显示图标、位图,甚至还可以在静态控件中显示动画。本文将通过示例程序来介绍静态控件的这些特殊用法。

显示图标

⑴ 使用AppWizard创建一个基于对话框的MFC应用程序,设置其工程名为ShowIco。

⑵ 在对话框上增加一个静态控件。需要注意的是,有资源管理器添加的`静态控件在默认情况下其ID均为IDC_STATIC,因此,如果需要在程序中区分和操纵各个不同的静态控件,一般情况下,需要更改新添加的静态控件的ID值。这里将静态控件的ID值设置为IDC_SHOWICO。

⑶ 在资源管理器中添加图标资源,其ID为IDI_ICON1。

⑷ 使用ClassWizard添加WM_INITDIALOG消息处理函数OnInitDialog。

⑸ 在OnInitDialog函数中下面的代码:

//获得指向静态控件的指针

CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWICO);

//加载图标

HICON hIcon=AfxGetApp->LoadIcon(IDI_ICON1);

//设置静态控件的样式,使其可以使用图标,并试图标显示使居中

pStatic->ModifyStyle(0xF,SS_ICON|SS_CENTERIMAGE);

//设置静态控件图标

pStatic->SetIcon(hIcon);

运行该程序,显示如图1所示。

图1 使用静态控件显示图标

2.显示位图

⑴ 使用AppWizard创建一个基于对话框的MFC应用程序,设置其工程名为ShowBmp。

⑵ 在对话框上增加一个静态控件,将静态控件的ID值设置为IDC_SHOWBMP。

⑶ 在资源管理其中添加位图资源,其ID为IDB_INFO。

⑷ 使用ClassWizard添加WM_INITDIALOG消息处理函数OnInitDialog。

⑸ 在OnInitDialog函数中下面的代码:

//获得指向静态控件的指针

CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWBMP);

//获得位图句柄

HBITMAP Bitmap=::LoadBitmap(AfxGetApp()_hInstance,

MAKINTRESOURCE(IDB_INFO));

//设置静态控件的样式,使其可以使用位图,并试位标显示使居中

pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);

//设置静态控件显示位图

pStatic->SetBitmap(hBitmap);

运行该程序即可。

显示动画

编写一个字符串在静态控件中不停的移动的程序。

使用AppWizard创建一个基于对话框的MFC应用程序,设置其工程名为ShowAnimation。 在对话框上增加一个静态控件。将静态控件的ID值设置为IDC_PREVIEW。 使用ClassWizard添加WM_INITDIALOG消息处理函数OnInitDialog和WM_TIMER的消息处理函数OnTimer。

⑷ 在CshowAnimationDlg类中,增加两个变量m_x和m_y,用以表示字符串的坐标。

⑸ 在OnInitDialog函数中添加下列代码:

m_x=0;

m_y=0;

KillTimer(1);

VERIFY(SetTimer(1, 500, NULL) != 0);

在CshowAnimationDlg类中,增加一个成员函数Draw()如下:

void CshowAnimationDlg::Draw()

{

CWnd *pWnd=GetDlgItem(IDC_PREVIEW);

CDC *pDC=pWnd->GetDC();

RECT rect;

pWnd->GetClientRect(&rect);

pWnd->Invalidate();

pWnd->UpdateWindow();

pDC->SelectStockObject(BLACK_BRUSH);

pDC->Rectangle(0,0,rect.right,rect.bottom);

pDC->SetTextColor(RGB(255,0,0));

pDC->SetBkColor(RGB(0,0,0));

if((m_x>=rect.right)||(m_y>=rect.bottom-20))

{ m_x=0;

m_y=0;

}

pDC->TextOut(m_x,m_y,“动画”);

}

在OnTimer函数中,添加如下代码:

if (nIDEvent == 1)

{

m_x =5;

m_y =5;

Draw();

}

else CWnd::OnTimer(nIDEvent);

运行该程序,显示如图2所示。

图2在静态控件中显示动画

篇2:vc用法总结

vc++如何实现远程调试

*假设调试机IP 192.168.0.182 远程机IP 192.168.0.161

*远程机为调试机分配权限,使调试机可以使用远程桌面登陆到远程机器上(这样调试起来方便)。

*调试机上安装visual studio.net 2003

共享调试机上的Visual Studio上的远程调试目录(以我的机器为例)

C:Program FilesMicrosoft Visual Studio.NET

2003Common7PackagesDebugger

*远程机将上面的共享目录考贝到本地,比如:d:Debugger

*调试机共享要调试的程序所在目录,比如:

D:importantcvsrootdv-to-dvdbindebug

*远程机将调试机上的目录影射为本地目录。比如:Z:

*远程机上以命令行形式执行 D:Debuggermsvcmon.exe –tcpip –anyuser

*调试机启动vc.打开要调试的工程。比如dvtodvd.选择菜单project->properties 选debuging->remote setting

Connection :Remote via TCP/IP(Native only)

Remote machine: 192.168.0.161

Remote Command: z:dvtodvd.exe

*debug->start

*就可以调试了。

1.如何在Release状态下进行调试

Project->Setting=>ProjectSetting 对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选 Disable(Debug),Debut info选Program Database。在Link标签中选中Generate debug info复选框。

注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。

2.Release和Debug有什么不同

Release版称为发行版,Debug版称为调试版。

Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。Release 的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++ 6.0的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual C++6.0的机器上不能运行,因为缺相应的DLL,除非选择use static dll when link。

3.ASSERT和VERIFY有什么区别

ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然翻译,但不再判断真假。所以后者更安全一点。

例如ASSERT(file.Open(strFileName))。

一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。如果用VERIFY()就不会有这个问题。

4.Workspace和Project之间是什么样的关系

每个Workspace可以包括几个project,但只有一个处于Active状态,各个project之间可以有依赖关系,在project的Setting..中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。

5.如何在非MFC程序中使用ClassWizard

在工程目录下新建一个空的.RC文件,然后加入到工程中就可以了。

6.如何设置断点

按F9在当前光标处增加一个断点和取消一个断点。

另外,在编辑状态下,按Ctrl+B组合键,弹出断点设置对话框。然后单击【Condition…】按钮弹出设置断点条件的对话框进行设置。

7.在编辑状态下发现成员变量或函数不能显示提示是如何打开显示功能

这似乎是目前这个Visual C++ 6.0版本的一个bug,可按如下步骤使其正常,如再出现,可如法炮制:

(1)关闭Project

(2)删除“工程名.ncb”文件

(3)重新打开工程

8.如何将一个通过ClassWizard生成的类彻底删除

首先在工作区的FileView中选中该类的.h和.cpp文件,按delete删除,然后在文件管理器中将这两个文件删除,再运行ClassWizard,这时出现是否移走该类的提示,选择remove就可以了。

9.如何将在workspace中消失的类找出来

打开该类对应的头文件,然后将其类名随便改一下,这个时候工作区就会出现新的类,再将这个类改回原来的名字就可以了。

10.如何清除所有的断点

菜单【Edit】->【Breakpoints…】,打开“Breakpoints”对话框,单击【Remove All】按钮即可。快捷键是“Ctrl + Shift + F8”。

11.如何再ClassWizard中选择未列出的信息

打开“ClassWizard”对话框,然后切换到“Class Info”页面。改变“Message filter”,如选择“Window”,“Message”页面就会出现Window的信息。

12.如何检测程序中的括号是否匹配

把光标移动到需要检测的括号前面,按快捷键“Ctrl + ]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告。

13.如何查看一个宏(或变量、函数)的定义

把光标移动到要查看的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相关菜单),如果没有建立浏览文件,就会出现提示对话框,按【确定】按钮,然后就会跳到该宏(或变量、函数)定义的地方。

14.如何添加Lib文件到当前工程

单击菜单【Project】->【Settings…】弹出“Project Setting”对话框,切换到“Link”标签页,在“Object/library modules”处输入Lib文件名称,不同的Lib之间用空格格开。

15.如何快速删除项目下的Debug文件夹中临时文件

在工作区的FileView视图中选中对应的项目,单击右键弹出菜单,选择【Clean(selection only)】菜单即可。

16.如何快速生成一个现有工程除了工程名外完全相同的新工程

在新建工程的“New”对话框中选择“Custom Appwizard”项,输入新工程的名字,单击

【OK】按钮。出现“Custom AppWizard”项,输入新工程的名字,单击【OK】按钮。出现“Custom AppWizard-Step 1 of 2”对话框,选择“An existing Project”项,单击

【Next】按钮。出现“Custom AppWizard-Step 2 of 2”对话框,选择现有工程的工程文件名,最后单击【Finish】按钮。编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard。

现在就可以项用MFC AppWizard一样用这个定制的向导。如果不想用了,可以在Visual C++ 6.0安装目录下CommonMSDev98Template目录中删除该Wizard对应的.awx和.pdb文件。

17.如何解决Visual C++ 6.0不正确连接的问题

情景:明明改动了一个文件,却要把整个项目全部重新编译链接一次。刚刚链接好,一运行,又提示重新编译链接一次。

这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。可以这样处理:找到工程文件夹下的debug目录,将创建和修改时间都比系统时间的文件全部删除,然后再从新“Rebuild All”一次。

18.引起LNK2001的常见错误都有哪些

遇到的LNK2001错误主要为:unresolved external symbol “symbol”

如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。

一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在,拼写不正确或者使用错误;其次可能使用了不同版本的链接库。以下是可能产生LNK2001错误的原因:

<1>由于编码错误导致的LNK2001错误

(1)不相匹配的程序代码或模块定义(.DEF)文件导致LNK2001。例如,如果在C++源文件了内声明了一变量“var1”,却试图在另一个文件内以变量“var1”访问改变量。

(2)如果使用的内联函数是在.cpp文件内定义的,而不是在头文件内定义将导致LNK2001错误。

(3)调用函数时如果所用的参数类型和头函数声明时的类型不符将会产生LNK2001错误。

(4)试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001错误。

(5)要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。

<2>由于编译和联机的设置而造成的LNK2001错误

(1)如果编译时使用的是/NOD(/NODERAULTLIB)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。这种情况下使用/NOD将导致LNK2001错误

(2)如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将出现“unresolved external on _WinMain@16”的LNK2001错误信息。

(3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行链接,将在__imp__func上发生LNK2001错误。如果不使用/MD选项编译,在使用MSVCxx.LIB链接时也会发生LNK2001错误。

(4)使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001错误。

(5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。

(6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。

(7)在不同的模块中使用内联和非内联的编译选项能够导致LNK2001错误。如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),只是将得到错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志为内联函数。

(8)不正确的/SUBSYSTEM或ENTRY设置也能导致LNK2001错误。

19.如何调试一个没有源码的exe文件调用的dll

在Visual C++ 6.0中,进入“Project Setting”对话框然后选择Debug标签页。通常Visual Studio默认“executable for debug session”为可执行文件名,但可以将他改成任何你想要的程序。甚至可以指定不同的工作目录以及传递参数到你的程序。这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。

20.Visual C++ 6.0工程中的项目文件都表示什么

.opt:工程关于开发环境的参数文件。如工具条位置等信息。

.aps(AppStudio File)资源辅助文件,二进制格式,一般不用去管它。

.clw:ClassWizard信息文件,实际上是INI文件格式,有兴趣可以研究一下。有时候ClassWizard出了问题,手工修改CLW文件可以解决。如果此文件不存在的话,每次用ClassWizard的时候回提示是否重建。

.dsp(DevelopStudio Project):项目文件,文本格式,不过不熟悉的不要手工修改。.dsw(DevelopStudio Workspace):是工作区文件,其他特点和.dsp差不多。

.plg:是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大。在单击菜单【Tool】->【Option】弹出的对话框里面有个选项可以控制这个文件的生成。

.hpj(Help Project):是生成帮助文件的工程,用microsoft Help Compiler可以处理。.mdp(Microsoft DevStudio Project):是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的.dsp格式。

.bsc:是用于浏览项目信息的,如果用Source Brower的话就必须有这个文件。如果不用这个功能的话,可以在Project Options里面去掉Generate Browse Info File,这样可以加快编译速度。

.map是执行文件的映象信息记录文件,除非对系统底层,这个文件一般用不着。.pch(Pre-Compiled File):是与编译文件,可以加快编译速度,但是文件非常大。

.pdb(Program Database):记录了程序有关的一些数据和调试信息,在调试的时候可能有用。

篇3:vc用法总结

一、名词作宾补

动词+名词/代词+名词。常用的动词有:call (称呼) , appoint, name (命名) , leave (使….处于某种状态) , think, find等。如:He named the boy Jack.他给男孩取名叫杰克。We would make him monitor.我们将选他为班长。They appointed him chairman of the committee.他们任命他为委员会主席。

注意:充当宾语补足语的名词若表示正式的或独一无二的头衔、职位时, 前面一般不用冠词。

二、形容词作宾补:表示宾语的状态

动词+名词+形容词。常用的动词有:find, keep, leave, make等。如:He found the film interesting.他发现这部电影有趣。He found the film interesting.他发现这部电影有趣。Can’t you keep the children quiet?你不能让孩子们安静些吗?

三、动词不定式作宾补:表示宾语执行的动作

1.动词+名词/代词+动词不定式, 带to的不定式作宾补。常见的动词有:ask, tell, want, expect, wish, help, order, allow, like, love, teach等词后作宾补的不定式都带to。如: I would like him to come.我愿意让他来。 (like的宾语是him, “him”要发出的动作是to come。“to come”就是him的宾语补足语)

They don’t allow people to smoke in the office.他们允许人们在办公室吸烟。 (动词allow的宾语是people, “people”要发出的动作是to smok.“to smok”就是宾语“people”的宾语补足语)

The teacher asked me to clean the window.老师让我擦洗窗户。

注意:①hope后不能接带to的不定式作宾补, I hoped him to leave. (错误) , 应为:I hoped that he would leave. I wished him to leave. (正确)

②help后面作宾语补足语的动词不定式可以带to也可以不带to。如:I often help my mother (to) do some housework.

2 . 不带t o的不定式作宾补。在感官动词五看 ( s e e , watch, observe, notic, look at) , 两听 (hear, listen to) , 一感觉feel和使役动词:make, have, let等词后作宾补的不定式不带to。如: They saw the boy fall suddenly from tree.他们看见那孩子突然从树上跌下来。I’ll have Tom repair the radio for you. 我让汤姆给你修收音机。

注意:如果上述结构变为被动语态, to不能省略。如:The boy was seen to fall suddenly from the tree.有人看见那孩子突然从树上跌下来。

3.在believe, find, feel, prove, think等动词后面, 不定式作宾补可以接to be 形式。如:We believe her to be innocent.

四、动词+名词/代词+分词

动词+名词/代词+分词 (现在分词v-ing或过去分词pp) , 现在分词作宾补强调宾语正在进行或一直持续的动作, 在逻辑上与宾语构成主动关系。而过去分词作宾补则表示宾语已经完成的动作或存在的状态, 在逻辑上与宾语构成被动关系。常跟分词作宾补的动词有感官动词feel, hear, watch, notice, smell, find等和“使役”或“致使”动词set, have, keep, get, make等。如:When I entered the room, I found him watching Tv.当我进入房间时, 我发现他正在看电视。

注意:在“set”的宾语后通常接现在分词作宾补, 而不用过去分词作宾补。即set sb doing, 而不用set sthe done.但是“make”的宾语后只能用过去分词, 而不能用现在分词。如:His words set me thinking deeply.他的话让我深思。

When you speak, you should make yourself understood. 当你讲话时, 你应该使人家懂得你的意思。

用于感官动词后现在分词与不定式作宾补的区别:现在分词表示观察到整个动作的一部分;用不定式则表示一个动作自始自终的全过程。

I saw the bus getting on the bus. (我看见司机上公共汽车)

I saw the bus driver and drive off. (我看见司机上公共汽车把车看走了)

比较下面的对话:

A: Do you hear the bell ringing at the door?你听见门铃响了吗? (现在分词表示铃响的动作正在进行。)

B:yes, Idid. I heard it ring twice.是的, 我听见门铃响了两下。 (不带to的不定式表示铃响的动作已经完成, 并完成了两次。)

五、动词+名词/代词+介词短语/副词

常用的动词为keep, find, leave等。如:I found the goods in good condition.我发现货物情况良好。 (in good condition是宾语补足语, 说明found的宾语the goods的状态)

六、高考考点分析

1.Let those in need ______ that we will go all out to help them. (2013陕西卷)

A. to understand B. understand

C. understanding D. understood

【解析】从句意上看, 空处表达的是“让某人做某事”, 而let之后的宾语接不定式作宾补的时候, 要省去不定式符号to, 即要用let sb do的形式, 故答案是B。

2.I looked up and noticed a snake ______its way up the tree to catch its breakfast. (2012四川卷)

A. to wind B. wind C. winding D. wound

【解析】此题考查现在分词作宾补。winding its way与宾语snake之间为主动关系且此动作正在进行, 故选选C。

3.Michael put up a picture of Yao Ming beside the bed to keep himself ________ of his own dreams. (2011重庆卷)

A. reminding B. to remind C. reminded D. renmind

【解析】keep sb/sth done/doing/ 表示使某人或某物处于某种状态。句意为Michael在他的床头贴了姚明的照片提醒自己不要忘了自己的梦想。动词Keep的宾语himself与动词renmind之间存在被动关系, 所以选过去分词reminded作宾补。

摘要:在英语中有些及物动词, 接了宾语意义仍不完整, 还需要有1个其他的句子成分, 来补充说明宾语的意义、状态等, 称为宾语补足语, 简称宾补。宾语与其补足语有逻辑上的主谓关系。可以充当宾语补足语的有名词、形容词、动词不定式、分词、介词短语、副词。一般来说, 有宾语补足语的句型结构为:动词+名词/代词+宾补。

篇4:定语后置用法总结

一、表示度量的短语修饰名词时应后置

a river five metres wide

一条五米宽的河

a boy sixteen years old

一个十六岁的男孩

注:当这类词组作定语放在名词前时,表示量的名词应用单数形式,且数词与量词之间应加上连词符号“-”。上述例子可改写为:a five-metre-wide river, a sixteen-year-old boy。

二、介词短语作定语时应后置

The boy in the room is my brother.

屋里的男孩是我弟弟。

He lives in a tall building in the city of Shanghai.

他住在上海的一幢高楼里。

三、副词here,there,home,

downstairs,upstairs,below,above等作

定语时应后置

The boys there are reading English.

那边的男孩正在读英语。

The man downstairs can’t sleep well.

楼下的那个人睡不好。

四、两个以上由并列连词连接的形容词修饰一个名词时,应放在后面

He is a teacher, both kind and strict.

他是一个既和蔼又严格的老师。

They lived in a house, clean and bright.

他们住在一个干净明亮的房子里。

五、形容词短语作定语时要后置

They saw many bags full of apples.

他们看到许多装满苹果的袋子。

There are a lot of things too far away to see in the sky.

天空中有许多太远看不到的东西。

六、形容词修饰不定代词(如

something,nothing,anything,everything,somebody,anyone等)时,要后置

He will tell us something interesting.

他将告诉我们一些有趣的事情。

There is nothing new in the room.

房间里没有什么新东西。

七、分词短语作定语时要后置

The boy called Tom is in Class One.

那个名叫汤姆的男孩在1班。

These girls sitting under the tree are my friends.

那些坐在树下的女孩是我的朋友。

八、enough,last,next,nearby等作定语时,既可放在所修饰的词之前,也可放在后面

He has enough money(money enough) to buy a car.

他有足够的钱买一辆汽车。

We often go fishing in the river nearby(the nearby river).

我们常去附近的小河钓鱼。

九、else修饰疑问词或不定代词时应后置

What else did he say?

他还说了些什么?

He is taller than anyone else in his class.

他是班里个子最高的。

十、動词不定式作定语时应后置

We have much work to do.

我们有许多活要干。

The best time to come to China is in spring.

来中国的最好时间是春季。

十一、定语从句要后置

He is the man who I am looking for.

他就是我正在找的那个人。

This is the lesson that we should remember.

篇5:vc用法总结

5.对于绘制文字TextOut(),在SetMapMode(MM_LOMETRIC)后,需要重新选择字体,否则打印预览时候会出现字体乱码现象。

6.赋值型条件语句需要加括号,否则先执行运算符,再执行条件语句,如int a=b+c>0 ? 1 :-1,时,将先执行(b+c)。

MFC的消息处理函数

1.AfxWndProc()该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc

2.AfxCallWndProc()该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数

3.WindowProc()该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数

4.OnWndMsg()该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数

5.OnCommand()该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数

6.OnCmdMsg()根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数

MFC应用程序创建窗口的过程

1.PreCreateWindow()该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等)

2.PreSubclassWindow()这也是一个重载函数,允许首先子分类一个窗口

3.OnGetMinMaxInfo()该函数为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸

4.OnNcCreate()该函数也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告诉窗口的客户区即将被创建

5.OnNcCalcSize()该函数也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改变窗口客户区大小

6.OnCreate()该函数也是一个消息响应函数,响应WM_CREATE消息,发送消息告诉一个窗口已经被创建

7.OnSize()该函数也是一个消息响应函数,响应WM_SIZE消息,发送该消息以告诉该窗口大小已经发生变化

8.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息说明窗口在移动

9.OnChildNotify()该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一个窗口刚刚被创建

MFC应用程序关闭窗口的顺序(非模态窗口)

1.OnClose()消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送此消息

2.OnDestroy()消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息

3.OnNcDestroy()消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁后发送此消息

4.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用

MFC应用程序中打开模式对话框的函数调用顺序

1.DoModal()重载函数,重载DoModal()成员函数 2.PreSubclassWindow()重载函数,允许首先子分类一个窗口

3.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建

4.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化

5.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息,以告诉窗口正在移动

6.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息,以允许改变对话框中控件的字体

7.OnInitDialog()消息响应函数,响应WM_INITDIALOG消息,发送此消息以允许初始化对话框中的控件,或者是创建新控件

8.OnShowWindow()消息响应函数,响应WM_SHOWWINDOW消息,该函数被ShowWindow()函数调用

9.OnCtlColor()消息响应函数,响应WM_CTLCOLOR消息,被父窗口发送已改变对话框或对话框上面控件的颜色

10.OnChildNotify()重载函数,作为WM_CTLCOLOR消息的结果发送

MFC应用程序中关闭模式对话框的顺序

1.OnClose()消息响应函数,响应WM_CLOSE消息,当“关闭”按钮被单击的时候,该函数被调用

2.OnKillFocus()消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送

3.OnDestroy()消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送

4.OnNcDestroy()消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送

5.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用

打开无模式对话框的顺序

1.PreSubclassWindow()重载函数,允许用户首先子分类一个窗口 2.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建

3.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化

4.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动

5.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中控件的字体

以上这些的执行都是按给定的顺序执行!

只有清楚的了解应用程序的执行顺序,才能在编写代码的时候知道,在什么时候应该执行什么,以及在什么地方该处理什么!

这只是本人总结的一点小小的经验,希望能对MFC的初学者有所帮助!MFC应用程序中处理消息的顺序

1.AfxWndProc()该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc

2.AfxCallWndProc()该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数

3.WindowProc()该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数

4.OnWndMsg()该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数

5.OnCommand()该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数

6.OnCmdMsg()根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数

MFC应用程序创建窗口的过程

1.PreCreateWindow()该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等)

2.PreSubclassWindow()这也是一个重载函数,允许首先子分类一个窗口

3.OnGetMinMaxInfo()该函数为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸

4.OnNcCreate()该函数也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告诉窗口的客户区即将被创建

5.OnNcCalcSize()该函数也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改变窗口客户区大小

6.OnCreate()该函数也是一个消息响应函数,响应WM_CREATE消息,发送消息告诉一个窗口已经被创建

7.OnSize()该函数也是一个消息响应函数,响应WM_SIZE消息,发送该消息以告诉该窗口大小已经发生变化

8.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息说明窗口在移动

9.OnChildNotify()该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一个窗口刚刚被创建

MFC应用程序关闭窗口的顺序(非模态窗口)

1.OnClose()消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送此消息

2.OnDestroy()消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息

3.OnNcDestroy()消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁后发送此消息

4.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用

MFC应用程序中打开模式对话框的函数调用顺序

1.DoModal()重载函数,重载DoModal()成员函数 2.PreSubclassWindow()重载函数,允许首先子分类一个窗口

3.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建

4.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化

5.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息,以告诉窗口正在移动

6.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息,以允许改变对话框中控件的字体

7.OnInitDialog()消息响应函数,响应WM_INITDIALOG消息,发送此消息以允许初始化对话框中的控件,或者是创建新控件

8.OnShowWindow()消息响应函数,响应WM_SHOWWINDOW消息,该函数被ShowWindow()函数调用

9.OnCtlColor()消息响应函数,响应WM_CTLCOLOR消息,被父窗口发送已改变对话框或对话框上面控件的颜色

10.OnChildNotify()重载函数,作为WM_CTLCOLOR消息的结果发送

MFC应用程序中关闭模式对话框的顺序

1.OnClose()消息响应函数,响应WM_CLOSE消息,当“关闭”按钮被单击的时候,该函数被调用

2.OnKillFocus()消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送 3.OnDestroy()消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送

4.OnNcDestroy()消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送

5.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用

打开无模式对话框的顺序

1.PreSubclassWindow()重载函数,允许用户首先子分类一个窗口

2.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建

3.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化

4.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动

5.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中控件的字体

MFC的一些主要成员函数

CWinThread::m_pMainWnd:保存指向应用程序的主窗口指针。CWinThread::GetMainWnd:查询指向线程主窗口的指针。CWinThread::InitInstance:重载以实现线程实例的初始化。AfxGetApp:获得指向CWinApp对象的指针。

AfxGetInstanceHandle:获得当前应用程序实例的句柄。AfxGetResourceHandle:获得应用程序资源的句柄。

AfxGetAppName:获得一个字符串指针,其中包含了应用程序的名字。另外,如果你拥有一个指向CWinApp对象的指针,可以通过m_pszExename来获得应用程序的名字。

CDocument::IsModified:标识文档从最近一次保存以来是否被修改过。CDocument::UpdateAllViews:通知所有视图文档已被修改的消息。CWnd::m_hWnd:指明与这个CWnd对象相关联的HWND句柄。CWnd::Create:创建并初始化与CWnd对象相关联的子窗口。

CWnd::PreCreateWindow:在与CWnd对象相关联的窗口被创建之前调用。CWnd::IsWindowEnabled:确定一个窗口是否允许鼠标和键盘输入。CWnd::EnableWindow:允许或禁止鼠标和键盘输入。CWnd::SetWindowPos:改变子窗口、弹出窗口和顶层窗口的大小、位置以及顺序。CWnd::GetDlgItem:获得指定的对话框中具有指定ID的控件。CWnd::UpdateData:初始化对话框或获得对话框中的数据。CWnd::GetWindowRect:获得CWnd的屏幕坐标。CWnd::GetDC:获得客户区的设备环境。

CWnd::RedrawWindow:更新客户区中的指定矩形或区域。CWnd::UpdateWindow:更新客户区。

CWnd::Invalidate:使整个客户区无效。CWnd::ShowWindow:显示或隐藏窗口。

CWnd::ClientToScreen:将给定点或显示器上矩形的客户区坐标转换为屏幕坐标。

CWnd::ScreenToClient:将给定点或显示器上矩形的屏幕坐标转换为客户坐标。CWnd::SetWindowText:将窗口的文本或标题文字(如果有)设为指定的文本。CWnd::SetFont:设置当前字体。

CWnd::GetDlgItemInt:将给定对话框中控件的文本转换为整数。

CWnd::SetTimer:安装一个系统定时器,当它被激活时,发送一个WM_TIMER消息。

篇6:vc用法总结

What do you do of a Saturday?星期六你干什么?

2、(表示方式)根据

She did it of her own will.她是自愿这么做的。

3、(表示对象)对于,就…而言

He felt quite certain of success.他对成功很有把握。

4、(表示原因)由于,因为

I was sick of their fun and games.他们的嬉闹让我厌烦。

5、(表示方位)在; 位于

New York is east of Washington.纽约在华盛顿以东。

6、(表示范围)在…之中

Tom is the eldest of the family.汤姆是家里年龄最大的。

7、(表示结果)在…方面

The place is easy of access.这地方容易进入。

8、(表示目的)用于…的

上一篇:车队年度安全工作总结下一篇:为国家强盛而读书