MFC運行機制和消息響應機制_第1頁
MFC運行機制和消息響應機制_第2頁
MFC運行機制和消息響應機制_第3頁
MFC運行機制和消息響應機制_第4頁
MFC運行機制和消息響應機制_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、MFC的類層次結構與運行機制MFC的類層次結構如圖所示(子類指向父類): 其中:CObject:是MFC提供的絕大多數類的基類。該類完成動態(tài)空間的分配與回收,支持一般的診斷、出錯信息處理和文檔序列化等。CCmdTarget:主要負責將系統(tǒng)事件(消息)和窗口事件(消息)發(fā)送給響應這些事件的對象,完成消息發(fā)送、等待和派遣調度等工作,實現(xiàn)應用程序的對象之間的協(xié)調運行。CWinApp:是應用程序的主線程類,它是從CWinThread類派生而來的。CWinThread類用來完成對線程的控制,包括線程的創(chuàng)建、運行、終止和掛起等。CDocument:是文檔類,包含了應用程序在運行期間所用到的數據。

2、CWnd:是一個通用的窗口類,用來提供Windows中的所有通用特性、對話框和控件。CFrameWnd是從CWnd類繼承來的,并實現(xiàn)了標準的框架應用程序。CDialog類用來控制對話框窗口。CView:用于讓用戶通過窗口來訪問文檔。CMDIFrameWnd和CMDIChildWnd:分別用于多文檔應用程序的主框架窗口和文檔子窗口的顯示和管理。CMiniFrameWnd類是一種簡化的框架窗口,它沒有最大化和最小化窗口按鈕,也沒有窗口系統(tǒng)菜單,一般很少用到它。           

3、0;    MFC運行機制在程序中,當定義一個類對象時,它會自動調用相應的構造函數。所謂"類對象",就是用該類定義的"變量",這個"變量"又稱為類的一個實例。例如,theApp就是類CSimpApp的一個對象。MFC正是利用類的這種"自動調用相應的構造函數"特性,使得WinMain()函數的調用變成了應用程序框架內部的調用,所以我們在代碼中看不到每個Windows程序所必須有的WinMain()函數。當應用程序運行到"CSimpApp theApp;"時,

4、系統(tǒng)就會先調用基類CWinApp構造函數,進行一系列的內部初始化操作,然后自動調用CSimpApp的虛函數InitInstance(),該函數會進一步調用相應的函數來完成主窗口的構造和顯示工作。下面來看看上述程序中InitInstance的執(zhí)行過程。首先執(zhí)行的是:m_pMainWnd = new CMainFrame;該語句用來創(chuàng)建從CFrameWnd類派生而來的用戶框架窗口CMainFrame類對象,繼而調用該類的構造函數,使得Create函數被調用,完成了窗口創(chuàng)建工作。然后執(zhí)行后面兩句:m_pMainWnd->ShowWindow(m_nCmdShow);m_pMainWnd->

5、;UpdateWindow();用作窗口的顯示和更新。接下來調用:m_pMainWnd->MessageBox("你好,歡迎進入MFC世界!");最后返回TRUE,表示窗口創(chuàng)建成功。由于應用程序類CWinApp是用來調用WinMain以及實例的初始化,因此每一個MFC應用程序有且只能一個這樣的應用程序類,且需要一個全局的對象實例,如上述程序中的theApp,當然也可換一個對象名。InitInstance()完成初始化工作之后,接下來就是調用基類CWinApp的成員函數Run(),執(zhí)行應用程序的消息循環(huán),即重復執(zhí)行接收消息并轉發(fā)消息的工作。當Run()檢查到消息隊列為空

6、時,將調用基類CWinApp的成員函數OnIdle進行空閑時的后臺處理工作。若消息隊列為空且又沒有后臺工作要處理時,則應用程序一直處于等待狀態(tài),一直等到有消息為止。當程序結束后,調用基類CWinApp的成員函數ExitInstance(),完成終止應用程序的收尾工作。這就是MFC應用程序的運行機制。MFC消息響應機制分析- MFC是Windows下程序設計的最流行的一個類庫,但是該類庫比較龐雜,尤其是它的消息映射機制,更是涉及到很多低層的東西,我們在這里,對它的整個消息映射機制進行了系統(tǒng)的分析,可以幫助程序開發(fā)人員對MFC的消息映射機制有一個比較透徹的了解。1引言- VC+的MFC類庫實際上是

7、Windows下C+編程的一套最為流行的類庫。MFC的框架結構大大方便了程序員的編程工作,但是為了更加有效、靈活的使用MFC編程,了解MFC的體系結構往往可以使編程工作事半功倍。它合理的封裝了WIN32 API函數,并設計了一套方便的消息映射機制。但這套機制本身比較龐大和復雜,對它的分析和了解無疑有助于我們寫出更為合理的高效的程序。這里我們簡單的分析MFC的消息響應機制,以了解MFC是如何對Windows的消息加以封裝,方便用戶的開發(fā)。2. SDK下的消息機制實現(xiàn)- 這里簡單的回顧一下SDK下我們是如何進行Windows的程序開發(fā)的。一般來說,Windows的消息都是和線程相對應的。即Wind

8、ows會把消息發(fā)送給和該消息相對應的線程。在SDK的模式下,程序是通過GetMessage函數從和某個線程相對應的消息隊列里面把消息取出來并放到一個特殊的結構里面,一個消息的結構是一個如下的STRUCTURE。 typedef struct tagMSG HWND hwnd;UINT message; WPARAM wParam;LPARAM lParam;DWORD time;POINT pt; MSG;- 其中hwnd表示和窗口過程相關的窗口的句柄,message表示消息的ID號,wParam和lParam表示和消息相關的參數,time表示消息發(fā)送的時間,pt

9、表示消息發(fā)送時的鼠標的位置。- 然后TranslateMessage函數用來把虛鍵消息翻譯成字符消息并放到響應的消息隊列里面,最后DispatchMessage函數把消息分發(fā)到相關的窗口過程。然后窗口過程根據消息的類型對不同的消息進行相關的處理。在SDK編程過程中,用戶需要在窗口過程中分析消息的類型和跟消息一起的參數的含義,做不同的處理,相對比較麻煩,而MFC把消息調用的過程給封裝起來,使用戶能夠通過ClassWizard方便的使用和處理Windows的各種消息。3MFC的消息實現(xiàn)機制- 我們可以看到,在MFC的框架結構下,可以進行消息處理的類的頭文件里面都會含有DECLARE_MESSAGE

10、_MAP()宏,這里主要進行消息映射和消息處理函數的聲明。可以進行消息處理的類的實現(xiàn)文件里一般都含有如下的結構。 BEGIN_MESSAGE_MAP(CInheritClass, CBaseClass)/AFX_MSG_MAP(CInheritClass)/AFX_MSG_MAPEND_MESSAGE_MAP()- 這里主要進行消息映射的實現(xiàn)和消息處理函數的實現(xiàn)。 - 所有能夠進行消息處理的類都是基于CCmdTarget類的,也就是說CCmdTarget類是所有可以進行消息處理類的父類。CCmdTarget類是MFC處理命令消息的基礎和核心。- 同時MFC定義了下面的兩個主

11、要結構:AFX_MSGMAP_ENTRYstruct AFX_MSGMAP_ENTRYUINT nMessage; / windows messageUINT nCode; / control code or WM_NOTIFY codeUINT nID; / control ID (or 0 for windows messages)UINT nLastID; / used for entries specifying a range of control id'sUINT nSig; / signature type (action) or point

12、er to message #AFX_PMSG pfn; / routine to call (or special value);和AFX_MSGMAPstruct AFX_MSGMAP#ifdef _AFXDLLconst AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();#elseconst AFX_MSGMAP* pBaseMap;#endifconst AFX_MSGMAP_ENTRY* lpEntries;其中AFX_MSGMAP_ENTRY結構包含了一個消息的所有相關信息,其中nMessage為Windows消息的ID號nCode為控制消息的通知碼nID

13、為Windows控制消息的IDnLastID表示如果是一個指定范圍的消息被映射的話,nLastID用來表示它的范圍。nSig表示消息的動作標識AFX_PMSG pfn 它實際上是一個指向和該消息相應的執(zhí)行函數的指針。- 而AFX_MSGMAP主要作用是兩個,一:用來得到基類的消息映射入口地址。二:得到本身的消息映射入口地址。- 實際上,MFC把所有的消息一條條填入到AFX_MSGMAP_ENTRY結構中去,形成一個數組,該數組存放了所有的消息和與它們相關的參數。同時通過AFX_MSGMAP能得到該數組的首地址,同時得到基類的消息映射入口地址,這是為了當本身對該消息不響應的時候,就調用其基類的消

14、息響應。- 現(xiàn)在我們來分析MFC是如何讓窗口過程來處理消息的,實際上所有MFC的窗口類都通過鉤子函數_AfxCbtFilterHook截獲消息,并且在鉤子函數_AfxCbtFilterHook中把窗口過程設定為AfxWndProc。原來的窗口過程保存在成員變量m_pfnSuper中。- 所以在MFC框架下,一般一個消息的處理過程是這樣的。函數AfxWndProc接收Windows操作系統(tǒng)發(fā)送的消息。函數AfxWndProc調用函數AfxCallWndProc進行消息處理,這里一個進步是把對句柄的操作轉換成對CWnd對象的操作。函數AfxCallWndProc調用CWnd類的方法WindowPr

15、oc進行消息處理。注意AfxWndProc和AfxCallWndProc都是AFX的API函數。而WindowProc已經是CWnd的一個方法。所以可以注意到在WindowProc中已經沒有關于句柄或者是CWnd的參數了。方法WindowProc調用方法OnWndMsg進行正式的消息處理,即把消息派送到相關的方法中去處理。消息是如何派送的呢?實際上在CWnd類中都保存了一個AFX_MSGMAP的結構,而在AFX_MSGMAP結構中保存有所有我們用ClassWizard生成的消息的數組的入口,我們把傳給OnWndMsg的message和數組中的所有的message進行比較,找到匹配的那一個消息。

16、實際上系統(tǒng)是通過函數AfxFindMessageEntry來實現(xiàn)的。找到了那個message,實際上我們就得到一個AFX_MSGMAP_ENTRY結構,而我們在上面已經提到AFX_MSGMAP_ENTRY保存了和該消息相關的所有信息,其中主要的是消息的動作標識和跟消息相關的執(zhí)行函數。然后我們就可以根據消息的動作標識調用相關的執(zhí)行函數,而這個執(zhí)行函數實際上就是通過ClassWizard在類實現(xiàn)中定義的一個方法。這樣就把消息的處理轉化到類中的一個方法的實現(xiàn)上。舉一個簡單的例子,比如在View中對WM_LButtonDown消息的處理就轉化成對如下一個方法的操作。 void CInheri

17、tView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default CView:OnLButtonDown(nFlags, point);注意這里CView:OnLButtonDown(nFlags, point)實際上就是調用CWnd的Default()方法。 而Default()方法所做的工作就是調用DefWindowProc對消息進行處理。這實際上是調用原來的窗口過程進行缺省的消息處理。如果OnWndMsg方

18、法沒有對消息進行處理的話,就調用DefWindowProc對消息進行處理。這是實際上是調用原來的窗口過程進行缺省的消息處理。 - 所以如果正常的消息處理的話,MFC窗口類是完全脫離了原來的窗口過程,用自己的一套體系結構實現(xiàn)消息的映射和處理。即先調用MFC窗口類掛上去的窗口過程,再調用原先的窗口過程。并且用戶面對和消息相關的參數不再是死板的wParam和lParam,而是和消息類型具體相關的參數。比如和消息WM_LbuttonDown相對應的方法OnLButtonDown的兩個參數是nFlags和point。nFlags表示在按下鼠標左鍵的時候是否有其他虛鍵按下,point更簡單,就是

19、表示鼠標的位置。 - 同時MFC窗口類消息傳遞中還提供了兩個函數,分別為WalkPreTranslateTree和PreTranslateMessage。我們知道利用MFC框架生成的程序,都是從CWinApp開始執(zhí)行的,而CWinapp實際繼承了CWinThread類。在CWinThread的運行過程中會調用窗口類中的WalkPreTranslateTree方法。而WalkPreTranslateTree方法實際上就是從當前窗口開始查找愿意進行消息翻譯的類,直到找到窗口沒有父類為止。在WalkPreTranslateTree方法中調用了PreTranslateMessage方法。實際

20、上PreTranslateMessage最大的好處是我們在消息處理前可以在這個方法里面先做一些事情。舉一個簡單的例子,比如我們希望在一個CEdit對象里,把所有的輸入的字母都以大寫的形式出現(xiàn)。我們只需要在PreTranslateMessage方法中判斷message是否為WM_CHAR,如果是的話,把wParam(表示鍵值)由小寫字母的值該為大寫字母的值就實現(xiàn)了這個功能。- 繼續(xù)上面的例子,根據我們對MFC消息機制的分析,我們很容易得到除了上面的方法,我們至少還可以在另外兩個地方進行操作。- 一:在消息的處理方法里面即OnChar中,當然最后我們不再調用CEdit:OnChar(nChar,

21、nRepCnt, nFlags),而是直接調用DefWindowProc(WM_CHAR,nChar,MAKELPARAM (nRepCnt,nFlags)。因為從我們上面的分析可以知道CEdit:OnChar(nChar, nRepCnt, nFlags)實際上也就是對DefWindowProc方法的調用。- 二:我們可以直接重載DefWindowProc方法,對message類型等于WM_CHAR的,直接修改nChar的值即可。4小結- 通過對MFC類庫的分析和了解,不僅能夠使我們更好的使用MFC類庫,同時,對于我們自己設計和實現(xiàn)框架和類,無疑也有相當大的幫助。  二M

22、FC的消息映射機制 MFC的設計者們在設計MFC時,緊緊把握一個目標,那就是盡可能使得MFC的代碼要小,速度盡可能快。為了這個目標,他們使用了許多技巧,其中很多技巧體現(xiàn)在宏的運用上,實現(xiàn)MFC的消息映射的機制就是其中之一。同MFC消息映射機制有關的宏有下面幾個:DECLARE_MESSAGE_MAP()宏BEGIN_MESSAGE_MAP(theClass, baseClass)和END_MESSAGE_MAP()宏弄懂MFC消息映射機制的最好辦法是將找出一個具體的實例,將這些宏展開,并找出相關的數據結構。DECLARE_MESSAGE_MAP()  DECLARE_MES

23、SAGE_MAP()宏的定義如下:#define DECLARE_MESSAGE_MAP() private: static const AFX_MSGMAP_ENTRY _messageEntries; protected: static AFX_DATA const AFX_MSGMAP messageMap; virtual const AFX_MSGMAP* GetMessageMap() const; 從上面的定義可以看出,DECLARE_MESSAGE_MAP()作下面三件事:定義一個長度不定的靜態(tài)數組變量_messageEntries;定義一個靜態(tài)變量messageMap;定義一

24、個虛擬函數GetMessageMap();在DECLARE_MESSAGE_MAP()宏中,涉及到MFC中兩個對外不公開的數據結構AFX_MSGMAP_ENTRY和AFX_MSGMAP。為了弄清楚消息映射,有必要考察一下這兩個數據結構的定義。AFX_MSGMAP_ENTRY的定義struct AFX_MSGMAP_ENTRYUINT nMessage; / windows messageUINT nCode; / control code or WM_NOTIFY codeUINT nID; / control ID (or 0 for windows messages)UINT nLastI

25、D; / used for entries specifying a range of control id'sUINT nSig; / signature type (action) or pointer to message #AFX_PMSG pfn; / routine to call (or special value);結構中各項的含義注釋已經說明得很清楚了,這里不再多述,從上面的定義你是否看出,AFX_MSGMAP_ENTRY結構實際上定義了消息和處理此消息的動作之間的映射關系。因此靜態(tài)數組變量_messageEntries實際上定義了一張表,表中的每一項指定了相應的對象

26、所要處理的消息和處理此消息的函數的對應關系,因而這張表也稱為消息映射表。再看看AFX_MSGMAP的定義。(2)AFX_MSGMAP的定義struct AFX_MSGMAPconst AFX_MSGMAP* pBaseMap;const AFX_MSGMAP_ENTRY* lpEntries;不難看出,AFX_MSGMAP定義了一單向鏈表,鏈表中每一項的值是一指向消息映射表的指針(實際上就是_messageEntries的值)。通過這個鏈表,使得在某個類中調用基類的的消息處理函數很容易,因此,“父類的消息處理函數是子類的缺省消息處理函數”就“順理成章”了。在后面的“MFC窗口的消息處理”一節(jié)中

27、會對此作詳細的講解。由上述可見,在類的頭文件中主要定義了兩個數據結構:消息映射表和單向鏈表。(孫建東總結)BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()它們的定義如下:#define BEGIN_MESSAGE_MAP(theClass, baseClass) const AFX_MSGMAP* theClass:GetMessageMap() const return &theClass:messageMap; AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass:messageMap = &baseCl

28、ass:messageMap, &theClass:_messageEntries0 ; AFX_COMDAT const AFX_MSGMAP_ENTRY theClass:_messageEntries = #define END_MESSAGE_MAP() 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 ; 對應BEGIN_MESSAGE_MAP()的定義可能不是一下子就看得明白,不過不要緊,舉一例子就很清楚了。對于BEGIN_MESSAGE_MAP(CView, CWnd),VC預編譯器將其展開成下面的形式:const AFX_MSGMAP* CView

29、:GetMessageMap() const return &CView:messageMap; AFX_COMDAT AFX_DATADEF const AFX_MSGMAP CView:messageMap = &CWnd:messageMap, &CView:_messageEntries0 AFX_COMDAT const AFX_MSGMAP_ENTRY CView:_messageEntries =至于END_MESSAGE_MAP()則不過定義了一個表示映射表結束的標志項,我想大家對于這種簡單的技巧應該是很

30、熟悉的,無需多述。到此為止,我想大家也已經想到了象ON_COMMAND這樣的宏的具體作用了,不錯它們只不過定義了一種類型的消息映射項,看看ON_COMMAND的定義:#define ON_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, Afx

31、Sig_vv, (AFX_PMSG)&OnFileNew,到此,MFC的消息映射機制已經清楚了,現(xiàn)在提出并解答兩個問題以作為對這一節(jié)的小結。為什么不直接使用虛擬函數實現(xiàn)消息處理函數呢?這是一個GOOD QUESTION。前面已經說過,MFC的設計者們在設計MFC時有一個很明確的目標,就是使得“MFC的代碼盡可能小,速度盡可能快”,如果采用虛擬函數,那么對于所有的窗口消息,都必須有一個與之對應的虛擬函數,因而對每一個從CWnd派生的類而言,都會有一張很大的虛擬函數表vtbl。但是在實際應用中,一般只對少數的消息進行處理,大部分都交給系統(tǒng)缺省處理,所以表中的大部分項都是無用項,這

32、樣做就浪費了很多內存資源,這同MFC設計者們的設計目標是相違背的。當然,MFC所使用的方法只是解決這類問題的方式之一,不排除還有其他的解決方式,但就我個人觀點而言,這是一種最好的解決方式,體現(xiàn)了很高的技巧性,值得我們學習。至于這第二個問題,是由上面的問題引申出來的。如果在子類和父類中出現(xiàn)了相同的消息出來函數,VC編譯器會怎么處理這個問題呢?VC不會將它們看作錯誤,而會象對待虛擬函數類似的方式去處理,但對于消息處理函數(帶afx_msg前綴),則不會生成虛擬函數表vtbl。MFC下一個消息的處理過程是一般是這樣的。1、_AfxCbtFilterHook截獲消息(這是一個鉤子函數)2、_AfxCb

33、tFilterHook把窗口過程設定為AfxWndProc。3、函數AfxWndProc接收Windows操作系統(tǒng)發(fā)送的消息。4、函數AfxWndProc調用函數AfxCallWndProc進行消息處理。5、函數AfxCallWndProc調用CWnd類的方法WindowProc進行消息處理。如何添加自己的消息?我們已經了解了WINDOW的消息機制,如何加入我們自己的消息呢?好我們來看一個標準的消息處理程序是這個樣子的在 CWnd 類中預定義了標準 Windows 消息 (WM_XXXX  WM是WINDOW MESSAGE的縮寫) 的默認處理程序。類庫基于消息名命名這些處

34、理程序。例如,WM_PAINT 消息的處理程序在 CWnd 中被聲明為:afx_msg void OnPaint();afx_msg 關鍵字通過使這些處理程序區(qū)別于其他 CWnd 成員函數來表明 C+ virtual 關鍵字的作用。但是請注意,這些函數實際上并不是虛擬的,而是通過消息映射實現(xiàn)的。我們在本文的一開始便說明了為什么要這樣做。所有能夠進行消息處理的類都是基于CCmdTarget類的,也就是說CCmdTarget類是所有可以進行消息處理類的父類。CCmdTarget類是MFC處理命令消息的基礎和核心。若要重寫基類中定義的處理程序,只需在派生類中定義一個具有相同原型的函數,并創(chuàng)建此處理程

35、序的消息映射項。我們通過ClassWizard可以建立大多數窗口消息或自定義的消息,通過ClassWizard可以自動建立消息映射,和消息處理函數的框架,我們只需要把我們要做的事情填空,添加你要做的事情到處理函數。這個非常簡單,就不細說了。但是也許我們需要添加一些ClassWizard不支持的窗口消息或自定義消息,那么就需要我們親自動手建立消息映射和消息處理的框架,通常步驟如下:第一步:定義消息。Microsoft推薦用戶自定義消息至少是WM_USER+100,因為很多新控件也要使用WM_USER消息。#define WM_MYMESSAGE (WM_USER + 100)第二步:實現(xiàn)消息處理

36、函數。該函數使用WPRAM和LPARAM參數并返回LPESULT。LPESULT CMainFrame:OnMyMessage(WPARAM wParam, LPARAM lParam)/ TODO: 處理用戶自定義消息,填空就是要填到這里。return 0;第三步:在類頭文件的AFX_MSG塊中說明消息處理函數:/ AFX_MSG(CMainFrame)afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);/AFX_MSGDECLARE_MESSAGE_MAP()第四步:在用戶類的消息塊中,使用ON_MESSAGE宏指令將消息映射

37、到消息處理函數中。ON_MESSAGE( WM_MYMESSAGE, OnMyMessage )MPW內部網絡是一個邀請最有影響力的商界女性及時解答職業(yè)與領導力問題的在線社區(qū)。本周,我們的問題是:千禧一代在進入職場之前應該聽從什么建議?以下是Hearsay Social創(chuàng)始人兼CEO史宗瑋的回答。    80后和90后們,要知道,你們這個年紀是進入職場最好的時段。抓緊這段時間,盡最大可能地去學習和做事,未來你肯定會感激自己今天的付出的。    回顧我的第一份工作,即便我被要求去做一些看似很卑微、單調或者非常困難的事

38、情時,我也會全力以赴。有的上司是我最不喜歡的類型,但即便如此,我依舊沒有放棄、抱怨或懈怠。我會加班到很晚,如果有必要還會通宵達旦地工作,我學會了只有在自己確實無法解決的時候才去尋求幫助;只要是對我的上司和團隊有利的事,我都會主動承擔。    一旦能夠游刃有余地完成上司安排的工作,我就會挑戰(zhàn)自己的能力極限。我會不斷問自己:“我還能做什么?我還能做些什么讓這件事變得更好?”這種心態(tài)讓我在職業(yè)初期便擁有了更開闊的思路,主動向團隊提出一些新的想法雖然并非所有想法都是好的或者被采納,但總能獲得團隊的欣賞。最后,“全力以赴”的工作勁頭,讓我獲得上司和同事的尊重。我有

39、幸加入戰(zhàn)略對話,這讓我有機會了解全局,承擔更大的職責。    如果你局限于短期思考,你或許認為這種想法有違常規(guī),但如果你希望在職業(yè)發(fā)展過程中實現(xiàn)工作與生活的平衡,盡早“全力以赴”或許是最明智的選擇。你可以獲得寶貴的經驗和人脈,這些收獲將給你的職業(yè)發(fā)展帶來好處。    普華永道等公司的研究顯示,80后和90后比他們的前輩更加重視工作與生活的平衡。一方面,許多初入職場的千禧一代會發(fā)現(xiàn)有些同齡人在工作中總是非常悠閑,即使混日子,依舊能領到工資。他們或許認為(你可能也會同意)自己比這個體系更聰明。但這樣做其實會讓他們錯失為

40、職業(yè)生涯奠定基礎的關鍵時間段。    雖然關于工作與生活平衡的決定很重要,而且人與人之間存在巨大差異,但從長遠來看,盡量做最少工作的心態(tài)或許并不明智。心理學家梅格杰伊在其非常有啟發(fā)性的TED演講20歲光陰不再來中,給所有二十多歲的年輕人敲響了警鐘。所謂20歲到30歲是“可以揮霍的十年”這種觀念,已經成為一種極其危險的謬論。太多虛度這段光陰的80后和90后將來肯定會后悔不迭的。    就如今天投資100元產生的價值要遠遠高于10年后投資100元一樣,隨著時間的推移,出色的工作、職業(yè)關系和學習經驗會產生“利滾利”效應。

41、你投入的時間、精力和專注同樣如此。早些起步能讓你獲得管理團隊的權力,讓你在不得不提前離開公司去接孩子放學時,可以將任務交給下屬。(財富中文網)    譯者:劉進龍/汪皓    審校:任文科    MPW Insider is one of several online communities where the biggest names in business answer timely career and leadership questions. Todays ans

42、wer for: What is one piece of advice all millennials should take before entering the workforce? is written by Clara Shih, founder and CEO of Hearsay Social.    Millennials, you could not be entering the workforce at a more exciting time. Seize the day, learn and do the most you p

43、ossibly can today, and your future self    Looking back at my first job, even when I was asked to do something seemingly menial, unglamorous, or very difficult, I always went all in. In my most trying moments with managers I liked the least, I did not give up, complain, or slack

44、off. I stayed late, pulled all-nighters when necessary, learned to ask for help only when I couldnt figure it out myself, and basically did whatever it took to make my manager and team look good.    Once I got good at what was asked of me, I challenged myself to go further. I con

45、tinually asked myself, “What else can I do? How else can I make this better?” This mindset led me early in my career to think bigger and proactively suggest new ideas to the teamcertainly not all of them good or accepted, but almost always appreciated. Ultimately, going “all in” won me the respect o

46、f my manager and colleagues. I got to be a part of strategic conversations that allowed me to understand the bigger picture and play ever-bigger roles.    This idea might seem counterintuitive if you are stuck in short-term thinking, but if you really want work/life balance over a career, going all in as much as pos

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論