从哪里才能得到MFC的实现源代码?(VS的MFC文件夹下只有部分扩展代码)

koolfoo 2003-12-20 02:39:40
从哪里得到MFC的源代码?比如偶在VS的afxwin.h中得到了Cmenu的头文件,但却找不到它的具体实现文件,对应的应该有个afxwin.cpp吧?但却没有,MS已经把它做成.lib了,没法看到。
那在哪里才能得到它的实现文件的?
在VS的MFC文件夹里有部分.cpp文件,但都是对MFC的扩展,没有最初的实现函数。
比如:
/////////////////////////////////////////////////////////////////////////////
// CMenu

class 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的实现文件?
...全文
102 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
solar 2003-12-20
  • 打赏
  • 举报
回复
很简单,比如要找CMenu类的实现代码,在CMenu上面单击鼠标右键,选择go to defination,则跳到相应的原文件去了
会思考的草 2003-12-20
  • 打赏
  • 举报
回复
CMenu我跟进去过的,当时主要是想知道Menu的Attach和Detach到底是怎么执行的,确实可以看到它们的函数实现部分。
koolfoo 2003-12-20
  • 打赏
  • 举报
回复
真遗憾,偶还是找不到。
楼上可否给在下发一份?
谢了。
ross33123 2003-12-20
  • 打赏
  • 举报
回复
要找一个类的相应代码也很容易

Windows explorer 本身就有全文搜索的功能

VC 也有 Find in Files 功能

有些工具软件也有这个功能

ross33123 2003-12-20
  • 打赏
  • 举报
回复
如果 VC 装全了,肯定有 MFC 全部源代码的

我还做过修改源代码然后重建 MFC 库的事情

这就表明源代码一点没漏
bluebohe 2003-12-20
  • 打赏
  • 举报
回复
唉唉,现在我的机器没有VC,怎么帮你,调试跟踪不熟悉的话你还是再学一下如何调试跟踪巴,这是编程最最基本的东西
koolfoo 2003-12-20
  • 打赏
  • 举报
回复
我是想要MFC的完整的实现代码来学习一下,况且对于调试跟踪不熟悉.
如果你有完整的,能不能给我发一份?
wopgod@yeah.net
qq:10353029
谢了.
bluebohe 2003-12-20
  • 打赏
  • 举报
回复
实在不行的话你写一个小程序,比如 CMenu menu;menu.CreateMenu();
调试,F11跟踪进去,就找到了
bluebohe 2003-12-20
  • 打赏
  • 举报
回复
我的机器现在没有VC,你搜索所有后缀名的文件,一般找析构函数就找到了(当然有的类没有析构函数除外)
koolfoo 2003-12-20
  • 打赏
  • 举报
回复
薄荷兄,请说详细一点。
我在MFC文件夹下没找到CMenu的实现文件.请问在哪个文件中?可否贴出来?
其他类的实现呢?是否也有?
bluebohe 2003-12-20
  • 打赏
  • 举报
回复
查找~CMenu会找到两个,一个是头文件,一个是实现文件,MFC的源代码不是可以找到一部分,而是全部都可以找到,MFC是开源的!所以你跟踪程序的时候可以跟踪到MFC的实现内部
vcforever 2003-12-20
  • 打赏
  • 举报
回复
sorry 楼主 ,可以找到一部分,并不是一点都找不到 !
楼主要了解MFC的内部机制的话建议看一下《深入浅出MFC》
flyelf 2003-12-20
  • 打赏
  • 举报
回复
mfc的源代码还是有的,但是和名称并没有一个完全的对应关系,在vc的安装目录的src下面可以找到需要的
vcforever 2003-12-20
  • 打赏
  • 举报
回复
Microsoft的东西不是开源的,他们的保密工作很成功,好象找不到MFC的原代码,如果能找到MFC的,那windows的原代码差不多也能找到了!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧