mfc真的公开了所有的源代码么?

gb0519 2007-05-18 11:43:53
我用source insight建了个工程,里面包含了vc安装目录下
\VC98\MFC\ 下的所有文件

想看下 CWnd 的以下函数的实现
CDC* BeginPaint(LPPAINTSTRUCT lpPaint);
void EndPaint(LPPAINTSTRUCT lpPaint);
void ValidateRect(LPCRECT lpRect);
void ValidateRgn(CRgn* pRgn);

结果都只能找到原型,找不到实现,以上只是举例,其他只有原型,没有实现的函数还很多,所以问下,mfc真的公开了所有的源代码么?
...全文
429 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
那个文件的具体位置,我在上面说了呀,我的是VS2005,低版本的可能没有这个文件,但是也有很多类似的inl文件,短小精干,对API只有一层封装的函数都在里面写着。
  • 打赏
  • 举报
回复
Microsoft Visual Studio 8\VC\atlmfc\src
目录下的readme.txt

Building ATL and MFC

To build either ATL or MFC open a command prompt and run vcvars32.bat from <path to vc8>\bin
Change directory to <path to vc8>\atlmfc\src

atlmfc.mak can be used to rebuild all ATL and MFC libraries and DLLs.
Following is the command line you can specify with NMAKE

nmake /f atlmfc.mak [ALL | ATL | MFC] [CLEAN= ] [LIBNAME= ] [PLATFORM= ]

Targets
ALL - builds both ATL and MFC. This is the default target. LIBNAME has to be specified.
ATL - builds only ATL.
MFC - builds only MFC. LIBNAME has to be specified.

CLEAN=1 cleans the files generated by the specified targets

LIBNAME="name of the MFCdll being built" - specifying MFC80 builds the prebuilt DLLs

PLATFORM=[AMD64|IA64] if building for 64-bit on a 32-bit system
healer_kx 2007-05-18
  • 打赏
  • 举报
回复
MFC的代码是公开的,但是不是开源的。
「已注销」 2007-05-18
  • 打赏
  • 举报
回复
当然不会了,这是比哥的作风么?
菜牛 2007-05-18
  • 打赏
  • 举报
回复
封装了API的,只是提供对API的调用,否则不就变成Windows也开源了。
Oversense 2007-05-18
  • 打赏
  • 举报
回复
1.是
2.你再好好找找
houdongfeng 2007-05-18
  • 打赏
  • 举报
回复
没有
知识提供常见调用的一些代码和借口
wltg2001 2007-05-18
  • 打赏
  • 举报
回复
应该已经包含了吧,深入浅出不就行根据这些源码写的吗?
yoyo_alex_lw 2007-05-18
  • 打赏
  • 举报
回复
封装了API的,只是提供对API的调用,否则不就变成Windows也开源了。
gb0519 2007-05-18
  • 打赏
  • 举报
回复
感谢ukyo1的回复

source insight里面默认是不加入inl文件的,所以找不到

后来我用操作系统的资源管理器的搜索功能 在vc安装目录下查找包含了“BeginPaint”的文件,也没有找出afxwin2.inl..只是找出了几个h, cpp, def文件。

你是怎么找到那个inl文件的呢?望赐教
wlwlxj 2007-05-18
  • 打赏
  • 举报
回复
自己没找到不能说没公开
kugou123 2007-05-18
  • 打赏
  • 举报
回复
是公开的
  • 打赏
  • 举报
回复
是公开的,如果你安装在默认位置,源代码就在 Program Files\Microsoft Visual Studio 8\VC\atlmfc\src里,但是如果某些函数特别简单而且是 inline 实现,比如你上面说的 BeginPaint,就在 Program Files\Microsoft Visual Studio 8\VC\atlmfc\include 目录的 inl文件里。
比如 BeginPaint在 afxwin2.inl里,代码如下:
_AFXWIN_INLINE CDC* CWnd::BeginPaint(LPPAINTSTRUCT lpPaint)
{ ASSERT(::IsWindow(m_hWnd)); return CDC::FromHandle(::BeginPaint(m_hWnd, lpPaint)); }
_AFXWIN_INLINE void CWnd::EndPaint(LPPAINTSTRUCT lpPaint)
{ ASSERT(::IsWindow(m_hWnd)); ::EndPaint(m_hWnd, lpPaint); }
上面说的都是以VS2005为例子。

16,472

社区成员

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

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

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