MFC的运行机制和消息响应机制_第1页
MFC的运行机制和消息响应机制_第2页
MFC的运行机制和消息响应机制_第3页
MFC的运行机制和消息响应机制_第4页
MFC的运行机制和消息响应机制_第5页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MFC勺类层次结构与运行机制MFC勺类层次结构如图所示(子类指向父类):其中:CObject:是MFCI供的绝大多数类的基类。该类完成动态空间的分配与回收,支持一般的诊断、出错信息处理和文档序列化等。CCmdTarget:主要负责将系统事件(消息)和窗口事件(消息)发送给响应这些事件的对象,完成消息发送、等待和派遣调度等工作,实现应用程序的对象之间的协调运行。CWinApp是应用程序的主线程类,它是从CWinThread类派生而来的。CWinThread类用来完成对线程的控制,包括线程的创建、运行、终止和挂起等。CDocument:是文档类,包含了应用程序在运行期间所用到的数据。CWnd是一个

2、通用的窗口类,用来提供Windows中的所有通用特性、对话框和控件。CFrameWn雇从CWn谈继承来的,并实现了标准的框架应用程序。CDialog类用来控制对话框窗口。CView:用于让用户通过窗口来访问文档。CMDIFrameWnd口CMDIChildWnd:分别用于多文档应用程序的主框架窗口和文档子窗口的显示和管理。CMiniFrameWnd类是一种简化的框架窗口,它没有最大化和最小化窗口按钮,也没有窗口系统菜单,一般很少用到它。MF定行机制在程序中,当定义一个类对象时,它会自动调用相应的构造函数。所谓"类对象",就是用该类定义的“变量",这个"变

3、量"又称为类的一个实例。例如,theApp就是类CSimpApp的一个对象。MFCE是利用类的这种"自动调用相应的构造函数"特性,使得WinMain()函数的调用变成了应用程序框架内部的调用,所以我们在代码中看不到每个Windows程序所必须有的WinMain()函数。当应用程序运行到"CSimpApptheApp;"时,系统就会先调用基类CWinApp勾造函数,进行一系列的内部初始化操作,然后自动调用CSimpApp的虚函数InitInstance(),该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。下面来看看上述程序中InitIn

4、stance的执行过程。首先执行的是:m_pMainWnd=newCMainFrame;该语句用来创建从CFrameWn酸派生而来的用户框架窗口CMainFrame类对象,继而调用该类的构造函数,使得Create函数被调用,完成了窗口创建工作。然后执行后面两句:m_pMainWnd->ShowWindow(m_nCmdShow);m_pMainWnd->UpdateWindow();用作窗口的显示和更新。接下来调用:m_pMainWnd->MessageBox(,你好,欢迎进入MFCS界!");最后返回TRUE表示窗口创建成功。由于应用程序类CWinApp是用来调用

5、WinMain以及实例的初始化,因此每一个MFC用程序有且只能一个这样的应用程序类,且需要一个全局的对象实例,如上述程序中的theApp,当然也可换一个对象名。InitInstance()完成初始化工作之后,接下来就是调用基类CWinApp的成员函数Run(),执行应用程序的消息循环,即重复执行接收消息并转发消息的工作。当Run()检查到消息队列为空时,将调用基类CWinApp的成员函数OnIdle进行空闲时的后台处理工作。若消息队列为空且又没有后台工作要处理时,则应用程序一直处于等待状态,一直等到有消息为止。当程序结束后,调用基类CWinApp的成员函数ExitInstance(),完成终止

6、应用程序的收尾工作。这就是MFC用程序的运行机制。:nl.i#indowl'rot泊Mil也射Rg111ectChi1dXfdify其他OnCmri.MsK消息处理函数MFC处埋消息流程;nrini!iwh-w;-IOnNotifwWMVOTIFY(10(JnCrod,gAfxWndCalIPrciiOnConuiandOnW'ndWssUriCiiidHsgMFQ肖息响应机制分析-MFC是Windows下程序设计的最流行的一个类库,但是该类库比较庞杂,尤其是它的消息映射机制,更是涉及到很多低层的东西,我们在这里,对它的整个消息映射机制进行了系统的分析,可以帮助程序开发人员对M

7、FC的消息映射机制有一个比较透彻的了解。1. 引言-VC+勺MF屡库实际上是Windows下C+编程的一套最为流行的类库。MFC勺框架结构大大方便了程序员的编程工作,但是为了更加有效、灵活的使用MF编程,了解MFC的体系结构往往可以使编程工作事半功倍。它合理的封装了WIN32API函数,并设计了一套方便的消息映射机制。但这套机制本身比较庞大和复杂,对它的分析和了解无疑有助于我们写出更为合理的高效的程序。这里我们简单的分析MFC勺消息响应机制,以了解MFC是如彳对Windows的消息加以封装,方便用户的开发。2. SDK下的消息机制实现-这里简单的回顾一下SDK下我们是如何进行Windows的程

8、序开发的。一般来说,Windows的消息者B是和线程相对应的。即Windows会把消息发送给和该消息相对应的线程。在SDK勺模式下,程序是通过GetMessage函数从和某个线程相对应的消息队列里面把消息取出来并放到一个特殊的结构里面,一个消息的结构是一个如下的STRUCTUREtypedefstructtagMSGHWNDhwnd;UINTmessage;WPARAMwParam;LPARAMlParam;DWORDtime;POINTpt;MSG;- -其中hwnd表示和窗口过程相关的窗口的句柄,message表示消息的ID号,wParam和lParam表示和消息相关的参数,time表示消

9、息发送的时间,pt表示消息发送时的鼠标的位置。- -然后TranslateMessage函数用来把虚键消息翻译成字符消息并放到响应的消息队列里面,最后DispatchMessage函数把消息分发到相关的窗口过程。然后窗口过程根据消息的类型对不同的消息进行相关的处理。在SDK程过程中,用户需要在窗口过程中分析消息的类型和跟消息一起的参数的含义,做不同的处理,相对比较麻烦,而MFCm消息调用的过程给封装起来,使用户能够通过ClassWizard方便的使用和处理Windows的各种消息。3. MFC的消息实现机制-我们可以看到,在MFC的框架结构下,可以进行消息处理的类的头文件里面都会含有DECLA

10、RE_MESSAGE_MAP(运里主要进行消息映射和消息处理函数的声明。可以进行消息处理的类的实现文件里一般都含有如下的结构。BEGIN_MESSAGE_MAP(CInheritClass,CBaseClass)/AFX_MSG_MAP(CInheritClass)/AFX_MSG_MAPEND_MESSAGE_MAP()- -这里主要进行消息映射的实现和消息处理函数的实现。- -所有能够进行消息处理的类都是基于CCmdTarget类的,也就是说CCmdTarget类是所有可以进行消息处理类的父类。CCmdTarget类是MFO理命令消息的基础和核心。- -同时MFC义了下面的两个主要结构:A

11、FX_MSGMAP_ENTRYstructAFX_MSGMAP_ENTRY(UINTnMessage;/windowsmessageUINTnCode;/controlcodeorWM_NOTIFYcodeUINTnID;/controlID(or0forwindowsmessages)UINTnLastID;/usedforentriesspecifyingarangeofcontrolid'sUINTnSig;/signaturetype(action)orpointertomessage#AFX_PMSGpfn;/routinetocall(orspecialvalue);和AF

12、X_MSGMAPstructAFX_MSGMAP(#ifdef_AFXDLLconstAFX_MSGMAP*(PASCAL*pfnGetBaseMap)();#elseconstAFX_MSGMAP*pBaseMap;#endifconstAFX_MSGMAP_ENTRY*lpEntries;其中AFX_MSGMAP_ENTRY包含了一个消息的所有相关信息,其中nMessage为Windows消息的ID号nCode为控制消息的通知码nID为Windows控制消息的IDnLastID表示如果是一个指定范围的消息被映射的话,nLastID用来表示它的范围。nSig表示消息的动作标识AFX_PMSG

13、pfn它实际上是一个指向和该消息相应的执行函数的指针。- -而AFX_MSGMAP要作用是两个,一:用来得到基类的消息映射入口地址。二:得到本身的消息映射入口地址。- -实际上,MFCS所有的消息一条条填入到AFX_MSGMAP_ENTRY中去,形成一个数组,该数组存放了所有的消息和与它们相关的参数。同时通过AFX_MSGM/f睛到该数组的首地址,同时得到基类的消息映射入口地址,这是为了当本身对该消息不响应的时候,就调用其基类的消息响应。- -现在我们来分析MFC是如何让窗口过程来处理消息的,实际上所有MFC的窗口类都通过钩子函数_AfxCbtFilterHook截获消息,并且在钩子函数_Af

14、xCbtFilterHook中把窗口过程设定为AfxWndProc。原来的窗口过程保存在成员变量m_pfnSuper中。- -所以在MFCf架下,一般一个消息的处理过程是这样的。函数AfxWndProc接收Windows操作系统发送的消息。函数AfxWndProc调用函数AfxCallWndProc进行消息处理,这里一个进步是把对句柄的操作转换成对CWnd对象的操作。函数AfxCallWndProc调用CWn谈的方法WindowProc进行消息处理。注意AfxWndProc和AfxCallWndProc都是AFX的API函数。而WindowProc已经是CWnd勺一个方法。所以可以注意到在Wi

15、ndowProc中已经没有关于句柄或者是CWnd的参数了。方法WindowProc调用方法OnWndMs进行正式的消息处理,即把消息派送到相关的方法中去处理。消息是如何派送的呢?实际上在CWn强中都保存了一个AFX_MSGMAP吉构,而在AFX_MSGMAP构中保存有所有我们用ClassWizard生成的消息的数组的入口,我们把传给OnWndMsgmessage和数组中的所有的message进行比较,找到匹配的那一个消息实际上系统是通过函数AfxFindMessageEntry来实现的。找到了那个message,实际上我们就得到一个AFX_MSGMAP_ENTRY,而我们在上面已经提到AFX_

16、MSGMAP_ENTRY了和该消息相关的所有信息,其中主要的是消息的动作标识和跟消息相关的执行函数。然后我们就可以根据消息的动作标识调用相关的执行函数,而这个执行函数实际上就是通过ClassWizard在类实现中定义的一个方法。这样就把消息的处理转化到类中的一个方法的实现上。举一个简单的例子,比如在View中对WM_LButtonDowrf肖息的处理就转化成对如下一个方法的操作。voidCInheritView:OnLButtonDown(UINTnFlags,CPointpoint)/TODO:Addyourmessagehandlercodehereand/orcalldefaultCVi

17、ew:OnLButtonDown(nFlags,point);注意这里CView:OnLButtonDown(nFlags,point)实际上就是调用CWnd勺Default。方法。而Default。方法所做的工作就是调用DefWindowProc对消息进行处理。这实际上是调用原来的窗口过程进行缺省的消息处理。如果OnWndMs市法没有对消息进行处理的话,就调用DefWindowProc对消息进行处理。这是实际上是调用原来的窗口过程进行缺省的消息处理。- -所以如果正常的消息处理的话,MFC®口类是完全脱离了原来的窗口过程,用自己的一套体系结构实现消息的映射和处理。即先调用MFCW口

18、类挂上去的窗口过程,再调用原先的窗口过程。并且用户面对和消息相关的参数不再是死板的wParam和lParam,而是和消息类型具体相关的参数。比如和消息WM_LbuttonDowWll对应的方法OnLButtonDown的两个参数是nFlags和point。nFlags表示在按下鼠标左键的时候是否有其他虚键按下,point更简单,就是表示鼠标的位置。- -同时MFC®口类消息传递中还提供了两个函数,分别为WalkPreTranslateTree和PreTranslateMessage。我们知道利用MFC匡架生成的程序,都是从CWinApp开始执行的,而CWinapp实际继承了CWinT

19、hread类。在CWinThread的运行过程中会调用窗口类中的WalkPreTranslateTree方法。而WalkPreTranslateTree方法实际上就是从当前窗口开始查找愿意进行消息翻译的类,直到找到窗口没有父类为止。在WalkPreTranslateTree方法中调用了PreTranslateMessage方法。实际上PreTranslateMessage最大的好处是我们在消息处理前可以在这个方法里面先做一些事情。举一个简单的例子,比如我们希望在一个CEdit对象里,把所有的输入的字母都以大写的形式出现。我们只需要在PreTranslateMessage方法中判断message

20、是否为WM_CHAR,果是的话,把wParam俵示键值)由小写字母的值该为大写字母的值就实现了这个功能。- -继续上面的例子,根据我们对MFC?肖息机制的分析,我们很容易得到除了上面的方法,我们至少还可以在另外两个地方进行操作。一一:在消息的处理方法里面即OnChar中,当然最后我们不再调用CEdit:OnChar(nChar,nRepCnt,nFlags),而是直接调用DefWindowProc(WM_CHAR,nChar,MAKELPARAM(nRepCnt,nFlags)>因为从我们上面的分析可以知道CEdit:OnChar(nChar,nRepCnt,nFlags)实际上也就是对

21、DefWindowProc方法的调用。-二:我们可以直接重载DefWindowProc方法,对message类型等于WM_CHA,直接彳改nChar的值即可。4.小结-通过对MF陵库的分析和了解,不仅能够使我们更好的使用MF屡库,同时,对于我们自己设计和实现框架和类,无疑也有相当大的帮助。二.MFC的消息映射机制MFC勺设计者们在设计MFCM,紧紧把握一个目标,那就是尽可能使得MFC的代码要小,速度尽可能快。为了这个目标,他们使用了许多技巧,其中很多技巧体现在宏的运用上,实现MFC勺消息映射的机制就是其中之一。同MFC1息映射机制有关的宏有下面几个:DECLARE_MESSAGE_M原()BE

22、GIN_MESSAGE_MAP(theClass,baseClass)和END_MESSAGE_MAP()弄懂mfj肖息映射机制的最好办法是将找出一个具体的实例,将这些宏展开,并找出相关的数据结构。DECLARE_MESSAGE_MAP()DECLARE_MESSAGE_MAP初定义如下:#defineDECLARE_MESSAGE_MAP()private:staticconstAFX_MSGMAP_ENTRY_messageEntries;protected:staticAFX_DATAconstAFX_MSGMAPmessageMap;virtualconstAFX_MSGMAP*Get

23、MessageMap()const;从上面的定义可以看出,DECLARE_MESSAGE_MAP()面三件事:定义一个长度不定的静态数组变量_messageEntries口;定义一个静态变量messageMap定义一个虚拟函数GetMessageMap();在DECLARE_MESSAGE_MAP(),涉及至|JMF计两个对外不公开的数据结构AFX_MSGMAP_ENTRYFX_MSGMAP?了弄清楚消息映射,有必要考察一下这两个数据结构的定义。AFX_MSGMAP_ENTRY义structAFX_MSGMAP_ENTRYUINTnMessage;/windowsmessageUINTnCod

24、e;/controlcodeorWM_NOTIFYcodeUINTnID;/controlID(or0forwindowsmessages)UINTnLastID;/usedforentriesspecifyingarangeofcontrolid'sUINTnSig;/signaturetype(action)orpointertomessage#AFX_PMSGpfn;/routinetocall(orspecialvalue);结构中各项的含义注释已经说明得很清楚了,这里不再多述,从上面的定义你是否看出,AFX_MSGMAP_ENTRY结构实际上定义了消息和处理此消息的动作之间的

25、映射关系。因此静态数组变量_messageEntries口实际上定义了一张表,表中的每一项指定了相应的对象所要处理的消息和处理此消息的函数的对应关系,因而这张表也称为消息映射表。再看看AFX_MSGMAP定义。(2)AFX_MSGMAP定义structAFX_MSGMAP(constAFX_MSGMAP*pBaseMap;constAFX_MSGMAP_ENTRY*IpEntries;);不难看出,AFX_MSGMAP义了一单向链表,链表中每一项的值是一指向消息映射表的指针(实际上就是_messageEntries的值)。通过这个链表,使得在某个类中调用基类的的消息处理函数很容易,因此,“父类

26、的消息处理函数是子类的缺省消息处理函数”就“顺理成章”了。在后面的“MFC窗口的消息处理”一节中会对此作详细的讲解。由上述可见,在类的头文件中主要定义了两个数据结构:消息映射表和单向链表。(孙建东总结)BEGIN_MESSAGE_MAP()END_MESSAGE_MAP()它们的定义如下:#defineBEGIN_MESSAGE_MAP(theClass,baseClass)constAFX_MSGMAP*theClass:GetMessageMap()constreturn&theClass:messageMap;AFX_COMDATAFX_DATADEFconstAFX_MSGMA

27、PtheClass:messageMap=&baseClass:messageMap,&theClass:_messageEntries0;AFX_COMDATconstAFX_MSGMAP_ENTRYtheClass:_messageEntries口=#defineEND_MESSAGE_MAP()0,0,0,0,AfxSig_end,(AFX_PMSG)0;对应BEGIN_MESSAGE_MAP(相义可能不是一下子就看得明白,不过不要紧,举一例子就很清楚了。对于BEGIN_MESSAGE_MAP(CView,CWnd,C预编译器将其展开成下面的形式:constAFX_MSG

28、MAP*CView:GetMessageMap()constreturn&CView:messageMap;AFX_COMDATAFX_DATADEFconstAFX_MSGMAPCView:messageMap=&CWnd:messageMap,&CView:_messageEntries0;AFX_COMDATconstAFX_MSGMAP_ENTRYCView:_messageEntries口=至于END_MESSAGE_MAP(不过定义了一个表示映射表结束的标志项,我想大家对于这种简单的技巧应该是很熟悉的,无需多述。到此为止,我想大家也已经想到了象ON_COMM

29、A幽的宏的具体作用了,不错它们只不过定义了一种类型的消息映射项,看看ON_COMMANtt义:#defineON_COMMAND(id,memberFxn)WM_COMMAND,CN_COMMAND,(WORD)id,(WORD)id,AfxSig_vv,(AFX_PMSG)&memberFxn,根据上面的定义,ON_COMMAND(ID_FILE_NEW,OnFileNew)被VC预编译器展开如下:WM_COMMAND,CN_COMMAND,(WORD)id,(WORD)id,AfxSig_vv,(AFX_PMSG)&OnFileNew,到此,MFC的消息映射机制已经清楚了,

30、现在提出并解答两个问题以作为对这一节的小结。为什么不直接使用虚拟函数实现消息处理函数呢?这是一个GOODQUESTKONtf面已经说过,MFC勺设计者们在设计MFC寸有一个很明确的目标,就是使得“MFC的代码尽可能小,速度尽可能快”,如果采用虚拟函数,那么对于所有的窗口消息,都必须有一个与之对应的虚拟函数,因而对每一个从CWn族生的类而言,都会有一张很大的虚拟函数表vtbl。但是在实际应用中,一般只对少数的消息进行处理,大部分都交给系统缺省处理,所以表中的大部分项都是无用项,这样做就浪费了很多内存资源,这同MFC殳计者们的设计目标是相违背的。当然,MFC所使用的方法只是解决这类问题的方式之一,

31、不排除还有其他的解决方式,但就我个人观点而言,这是一种最好的解决方式,体现了很高的技巧性,值得我们学习。至于这第二个问题,是由上面的问题引申出来的。如果在子类和父类中出现了相同的消息出来函数,VC编译器会怎么处理这个问题呢?VC不会将它们看作错误,而会象对待虚拟函数类似的方式去处理,但对于消息处理函数(带afx_msg前缀),则不会生成虚拟函数表vtbl。MFCT一个消息的处理过程是一般是这样的。1、_AfxCbtFilterHook截获消息(这是一个钩子函数)2、_AfxCbtFilterHook把窗口过程设定为AfxWndProc。3、函数AfxWndProc接收Windows操作系统发送

32、的消息。4、函数AfxWndProc调用函数AfxCallWndProc进行消息处理。5、函数AfxCallWndProc调用CWndl的方法WindowProc进行消息处理。如何添加自己的消息?我们已经了解了WINDOW!消息机制,如何加入我们自己的消息呢?好我们来看一个标准的消息处理程序是这个样子的在CWnd类中预定义了标准Windows消息(WM_XXXXWM!WINDOWESSAGE缩写)的默认处理程序。类库基于消息名命名这些处理程序。例如,WMPAIN下肖息的处理程序在CWnd中被声明为:afx_msgvoidOnPaint();afx_msg关键字通过使这些处理程序区别于其他CWn

33、d成员函数来表明C+virtual关键字的作用。但是请注意,这些函数实际上并不是虚拟的,而是通过消息映射实现的。我们在本文的一开始便说明了为什么要这样做。所有能够进行消息处理的类都是基于CCmdTarget类的,也就是说CCmdTarget类是所有可以进行消息处理类的父类。CCmdTarget类是MFO理命令消息的基础和核心。若要重写基类中定义的处理程序,只需在派生类中定义一个具有相同原型的函数,并创建此处理程序的消息映射项。我们通过ClassWizard可以建立大多数窗口消息或自定义的消息,通过ClassWizard可以自动建立消息映射,和消息处理函数的框架,我们只需要把我们要做的事情填空,

34、添加你要做的事情到处理函数。这个非常简单,就不细说了。但是也许我们需要添加一些ClassWizard不支持的窗口消息或自定义消息,那么就需要我们亲自动手建立消息映射和消息处理的框架,通常步骤如下:第一步:定义消息。Microsoft推荐用户自定义消息至少是WM_USER+10因为很多新控件也要使用WM_USER消息。#defineWM_MYMESSAGE(WM_USER+100)第二步:实现消息处理函数。该函数使用WPRAM3LPARA嗪数并返回LPESULTLPESULTCMainFrame:OnMyMessage(WPARAMwParam,LPARAMlParam)(/TODO:处理用户自

35、定义消息,填空就是要填到这里。return0;)第三步:在类头文件的AFX_MS映中说明消息处理函数:/AFX_MSG(CMainFrame)afx_msgLRESULTOnMyMessage(WPARAMwParam,LPARAMlParam);/AFX_MSGDECLARE_MESSAGE_MAP()第四步:在用户类的消息块中,使用ON_MESSAGEf令将消息映射到消息处理函数中ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)|MPWInsiderisoneofseveralonlinecommunitieswherethebiggestnamesinibusin

36、essanswertimelycareerandileadershipquestions.Today'sanswerfor:!Whatisonepieceofadviceallmillennials!shouldtakebeforeenteringtheIworkforce?iswrittenbyClaraShih,ffounderandCEOofHearsaySocial.Millennials,youcouldnotbeenteringtheworkforceatamoreexcitingtime.Seizetheday,learnanddothemostyoupossiblyca

37、ntoday,andyourfutureselfLookingbackatmyfirstjob,evenwhenIwasaskedtodosomethingseeminglymenial,unglamorous,orverydifficult,Ialwayswentallin.InmymosttryingmomentswithmanagersIlikedtheleast,Ididnotgiveup,complain,orslackoff.Istayedlate,pulledall-nighterswhennecessary,learnedtoaskforhelponlywhenIcouldn&

38、#39;figureitoutmyself,andbasicallydidwhateverittooktomakemyIImanagerandteamlookgood.ILIOnceIgotgoodatwhatwasaskedofIime,Ichallengedmyselftogofurther.Icontinuallyaskedmyself,WhatelsecanIdo?HowelsecanImakethisbetter?II|Thismindsetledmeearlyinmycareerto!thinkbiggerandproactivelysuggestnewideastotheteam

39、-certainlynotallofthemgoodoraccepted,butalmostalwaysappreciated.Ultimately,goingallinIIwonmpWj部网络是一个邀请最有影响力的商界女性及时解答职业与领导力问题的在线社区。本周,我们的问题是:千禧一代在进入职场之前应该听从什么建议?以下是HearsaySocial创始人兼CE魄宗玮的回答。80后和90后们,要知道,你们这个年纪是进入职场最好的时段。抓紧这段时间,尽最大可能地去学习和做事,未来你肯定会感激自己今天的付出的。回顾我的第一份工作,即便我被要求去做一些看似很卑微、单调或者非常困难的事情时,我也会全力

40、以赴。有的上司是我最不喜欢的类型,但即便如此,我依旧没有放弃、抱怨或懈怠。我会加班到很晚,如果有必要还会通宵达旦地工作,我学会了只有在自己确实无法解决的时候才去寻求帮助;只要是对我的上司和团队有利的事,我都会主动承担。一旦能够游刃有余地完成上司安排的工作,我就会挑战自己的能力极限。我会不断问自己:“我还能做什么?我还能做些什么让这件事变得更好?”这种心态让我在职业初期便拥有了更开阔的思路,主动向团队提出一些新的想法一一虽然并非所有想法都是好的或者被采纳,但总能获得团队的欣赏。最后,“全力以赴”的工作劲头,让我获得上司和同事的尊重。我有幸加入战略对话,这让我有机会了解全局,承担更大的职责。如果你

41、局限于短期思考,你或许认为这种想法有违常规,但如果你希望在职业发展过程中实现工作与生活的平衡,尽早“全力以赴”或许是最明智的选择。你可以获得宝贵的经验和人脉,这些收获将给你的职业发展带来好处。普华永道等公司的研究显示,80后和90后比他们的前辈更加重视工作与生活的平衡。一方面,许多初入职场的千禧一代会发现有些同龄人在工作中总是非常悠闲,即使混日子,依旧能领到工资。他们或许认为(你可能也会同意)自己比这个体系更聪明。但这样做其实会让他们错失为职业生涯奠定基础的关键时间段。虽然关于工作与生活平衡的决定很重要,而且人与人之间存在巨大差异,但从长远来看,尽量做最少工作的心态或许并不明智。心理学家梅格?

42、杰伊在其非常有启发性的TED演讲20岁光阴不再来中,给所有二十多岁的年轻人敲响了警钟。所谓20岁到30岁是“可以挥霍的十年”这种观念,已经成为一种极其危险的谬论。太多虚度这段光阴的80后和90后将来肯定会后悔不迭的。就如今天投资100元产生的价值要远远高于10年后投资100元一样,随着时间的推移,出色的工作、职业关系和学习经验会产生“利滚利”效应。你投入的时间、精力和专注同样如此。早些起步能让你获得管理团队的权力,让你在不得不提前离开公司去接孩子放学时,可以将任务交给下属。(财富中文网)译者:刘进龙/汪皓审校:任文科metherespectofmymanagerandcolleagues.Igottobeapartofstrategicconversationsthatallowedmetounderstan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论