从哪里得到MFC的源代码?比如偶在VS的afxwin.h中得到了Cmenu的头文件,但却找不到它的具体实现文件,对应的应该有个afxwin.cpp吧?但却没有,MS已经把它做成.lib了,没法看到。
那在哪里才能得到它的实现文件的?
在VS的MFC文件夹里有部分.cpp文件,但都是对MFC的扩展,没有最初的实现函数。
比如:
/////////////////////////////////////////////////////////////////////////////
// CMenuclass CMenu : public CObject
{
DECLARE_DYNCREATE(CMenu)
public:// Constructors
CMenu(); BOOL CreateMenu();
BOOL CreatePopupMenu();
BOOL LoadMenu(LPCTSTR lpszResourceName);
BOOL LoadMenu(UINT nIDResource);
BOOL LoadMenuIndirect(const void* lpMenuTemplate);
BOOL DestroyMenu();// Attributes
HMENU m_hMenu;          // must be first data member
HMENU GetSafeHmenu() const;
operator HMENU() const; static CMenu* PASCAL FromHandle(HMENU hMenu);
static void PASCAL DeleteTempMap();
BOOL Attach(HMENU hMenu);
HMENU Detach();// CMenu Operations
BOOL DeleteMenu(UINT nPosition, UINT nFlags);
BOOL TrackPopupMenu(UINT nFlags, int x, int y,
CWnd* pWnd, LPCRECT lpRect = 0);
BOOL operator==(const CMenu& menu) const;
BOOL operator!=(const CMenu& menu) const;// CMenuItem Operations
BOOL AppendMenu(UINT nFlags, UINT nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL AppendMenu(UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp);
UINT CheckMenuItem(UINT nIDCheckItem, UINT nCheck);
UINT EnableMenuItem(UINT nIDEnableItem, UINT nEnable);
UINT GetMenuItemCount() const;
UINT GetMenuItemID(int nPos) const;
UINT GetMenuState(UINT nID, UINT nFlags) const;
int GetMenuString(UINT nIDItem, LPTSTR lpString, int nMaxCount,
UINT nFlags) const;
int GetMenuString(UINT nIDItem, CString& rString, UINT nFlags) const;
BOOL GetMenuItemInfo(UINT nIDItem, LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
CMenu* GetSubMenu(int nPos) const;
BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem,
const CBitmap* pBmp);
BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem,
const CBitmap* pBmp);
BOOL RemoveMenu(UINT nPosition, UINT nFlags);
BOOL SetMenuItemBitmaps(UINT nPosition, UINT nFlags,
const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked);
BOOL CheckMenuRadioItem(UINT nIDFirst, UINT nIDLast, UINT nIDItem, UINT nFlags);
BOOL SetDefaultItem(UINT uItem, BOOL fByPos = FALSE);
UINT GetDefaultItem(UINT gmdiFlags, BOOL fByPos = FALSE);// Context Help Functions
BOOL SetMenuContextHelpId(DWORD dwContextHelpId);
DWORD GetMenuContextHelpId() const;// Overridables (must override draw and measure for owner-draw menu items)
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);// Implementation
public:
virtual ~CMenu();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
static CMenu* PASCAL CMenu::FromHandlePermanent(HMENU hMenu);
};上面是CMenu的头文件内容。
请问到哪里才能得到MFC的实现文件?

解决方案 »

  1.   

    好象是找不到,微软的原代码保护的很好,网上好象没见过
    不过楼主可以看一下《深入浅出MFC》,第三章中的MFC六大技术仿真
    或许对楼主有帮助,之中针对MFC的六大核心技术进行了深入的剖析和仿真
      

  2.   

    在你的MFC目录下的SRC下可以找到一部分,好象不是全部!
      

  3.   

    查找~CMenu会找到两个,一个是头文件,一个是实现文件,MFC的源代码不是可以找到一部分,而是全部都可以找到,MFC是开源的!所以你跟踪程序的时候可以跟踪到MFC的实现内部我的机器现在没有VC,你搜索所有后缀名的文件,一般找析构函数就找到了(当然有的类没有析构函数除外)
      

  4.   

    实在不行的话你写一个小程序,比如 CMenu menu;menu.CreateMenu();
    调试,F11跟踪进去,就找到了
      

  5.   

    MFC的源码都在那儿,这都会找不到?
      

  6.   

    TO
     回复人: bluebohe(薄荷) ( ) 信誉:127  2003-12-20 15:56:00  得分:0 
     
     
      查找~CMenu会找到两个,一个是头文件,一个是实现文件,MFC的源代码不是可以找到一部分,而是全部都可以找到,MFC是开源的!所以你跟踪程序的时候可以跟踪到MFC的实现内部偶咋的找不到?
      
     
      

  7.   

    Searching for '~CMenu'...
    C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\Include\AFXWIN.H(1152): virtual ~CMenu();
    C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\Include\AFXWIN1.INL(1004):_AFXWIN_INLINE CMenu::~CMenu()
      

  8.   

    C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\Include\AFXWIN1.INL(1004):_AFXWIN_INLINE CMenu::~CMenu()
    这个不是么?