📄 subject_49816.htm
字号:
<p>
序号:49816 发表者:鹏程 发表日期:2003-08-14 04:07:48
<br>主题:有个问题请教?
<br>内容:为什么下面的程序(一)生成的EXE文件有1.23M呀?好大呀!<BR>而同样功能的用API编的程序(二)生成的EXE文件只有150K。<BR><BR><BR>程序(一):<BR>//HelloMFC.h<BR>//////////////////////////////////////////////////////////////////////<BR>class CMyApp : public CWinApp<BR>{<BR>public:<BR> virtual BOOL InitInstance();<BR>};<BR><BR>class CMainWindow : public CFrameWnd<BR>{<BR>public:<BR> CMainWindow();<BR>protected:<BR> afx_msg void OnPaint();<BR> DECLARE_MESSAGE_MAP()<BR>};<BR><BR>//HelloMFC.cpp<BR>//////////////////////////////////////////////////////////////////////<BR>#include <afxwin.h><BR>#include "HelloMFC.h"<BR><BR>CMyApp theApp;<BR><BR>//////////////////////////////////////////////////////////////////////<BR>//<BR>//应用程序类CMyApp的成员函数<BR>BOOL CMyApp::InitInstance()<BR>{<BR> m_pMainWnd = new CMainWindow;<BR> m_pMainWnd->ShowWindow(m_nCmdShow);<BR> m_pMainWnd->UpdateWindow();<BR> return TRUE;<BR>}<BR><BR>//////////////////////////////////////////////////////////////////////<BR>//<BR>//主窗口类的消息映射和成员函数<BR>BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)<BR> ON_WM_PAINT()<BR>END_MESSAGE_MAP()<BR><BR>CMainWindow::CMainWindow()<BR>{<BR> Create(NULL,_T("The Hello World Application!"));<BR>}<BR><BR>void CMainWindow::OnPaint()<BR>{<BR> CPaintDC dc(this);<BR> CRect rect;<BR> GetClientRect(&rect);<BR> dc.TextOut(rect.Width()/2-60,rect.Height()/2,"Hello World MFC");<BR>}<BR><BR><BR><BR>程序(二):<BR>//HelloAPI.cpp<BR>//////////////////////////////////////////////////////////////////////<BR>#include <windows.h><BR><BR>//窗口函数声明<BR>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);<BR><BR>//以下代码初始化窗口类<BR>//////////////////////////////////////////////////////////////////////<BR>int WINAPI WinMain(HINSTANCE hInstance,<BR> HINSTANCE hPrevInstance,<BR> LPSTR lpCmdLine,<BR> int nCmdShow)<BR>{<BR> //窗口类名<BR> static TCHAR szAppName[] = TEXT("HelloWorld");<BR> //窗口标题名<BR> static TCHAR lpszTitle[] = TEXT("MY First Windows Program");<BR><BR> HWND hWnd; //定义窗口句柄<BR> MSG msg; //定义消息变量<BR> WNDCLASS WndClass; //定义窗口类<BR> <BR> //窗口类没有扩展<BR> WndClass.cbClsExtra = 0;<BR> //窗口类实例没有扩展<BR> WndClass.cbWndExtra = 0;<BR> //窗口背景为白色<BR> WndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);<BR> //窗口采用箭头光标<BR> WndClass.hCursor = LoadCursor(NULL,IDC_ARROW);<BR> //窗口的最小化图标为默认图标<BR> WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION);<BR> //当前实例句柄<BR> WndClass.hInstance = hInstance;<BR> //窗口处理函数为WndProc<BR> WndClass.lpfnWndProc = WndProc;<BR> //窗口类名<BR> WndClass.lpszClassName = szAppName;<BR> //窗口没有菜单<BR> WndClass.lpszMenuName = NULL;<BR> //窗口类风格<BR> WndClass.style = CS_HREDRAW|CS_VREDRAW;<BR> <BR> //如果注册失败则发出警告声<BR> if(!RegisterClass(&WndClass))<BR> {<BR> MessageBox(NULL,<BR> TEXT("This Program requires Windows NT!"),<BR> szAppName,<BR> MB_ICONERROR);<BR> return 0;<BR> }<BR> hWnd = CreateWindow(szAppName,<BR> TEXT("The Hello Program"),<BR> WS_OVERLAPPEDWINDOW,<BR> CW_USEDEFAULT,<BR> CW_USEDEFAULT,<BR> CW_USEDEFAULT,<BR> CW_USEDEFAULT,<BR> NULL,<BR> NULL,<BR> hInstance,<BR> NULL);<BR> //显示窗口<BR> ShowWindow(hWnd,nCmdShow);<BR> //绘制用户区<BR> UpdateWindow(hWnd);<BR> //消息循环<BR> while(GetMessage(&msg,NULL,0,0))<BR> {<BR> TranslateMessage(&msg);<BR> DispatchMessage(&msg);<BR> }<BR> //消息循环结束(即程序终止)时将信息返回系统<BR> return msg.wParam;<BR>}<BR><BR>//窗口函数定义<BR>//////////////////////////////////////////////////////////////////////<BR>LRESULT CALLBACK WndProc(HWND hWnd,<BR> UINT message,<BR> WPARAM wParam,<BR> LPARAM lParam)<BR>{<BR> HDC hDC;<BR> PAINTSTRUCT ps;<BR> RECT rect;<BR> //消息处理语句<BR> switch (message)<BR> {<BR> case WM_CREATE:<BR> <BR> //PlaySound(TEXT("helloworld.wav"),<BR> // NULL,<BR> // SND_FILENAME|SND_ASYNC);<BR> return 0 ;<BR> //当客户区的一部分或全部变为无效以致必须刷新时,将由这个消息通知程序<BR> case WM_PAINT:<BR> hDC = BeginPaint(hWnd,&ps);<BR> GetClientRect(hWnd,&rect);<BR> DrawText(hDC,<BR> TEXT("Hello World!"),<BR> -1,<BR> &rect,<BR> DT_SINGLELINE|DT_CENTER|DT_VCENTER);<BR> EndPaint(hWnd,&ps);<BR> return 0;<BR> //退出窗口<BR> case WM_DESTROY:<BR> //调用PostQuitMessage函数发出WM_QUIT消息<BR> PostQuitMessage(0); <BR> return 0;<BR> }<BR> return DefWindowProc(hWnd,message,wParam,lParam);<BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:管理员 回复日期:2003-08-14 04:11:47
<br>内容:你利用了MFC<BR>但是你编译Debug版本时候选择了静态连接MFC<BR>所以很大。<BR><BR>如果是Release版本的静态连接MFC只有200K<BR>如果是动态连接MFC DLL就应该只有30K<BR><BR>VC6中,你在菜单project -》Setting中设置连接方式。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bird 回复日期:2003-08-14 08:50:11
<br>内容:很少看到老大出手了!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bird 回复日期:2003-08-14 08:52:01
<br>内容:提醒楼主:尽量别发重复的帖子!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:鹏程 回复日期:2003-08-14 12:03:49
<br>内容:谢谢老大!还有一点不明白,如果编译Debug版本时候选择了动态连接MFC,那么是不是生成的EXE文件有可能在其他的机器上不能运行呀?<BR><BR>我对重复发贴表示抱歉,当时连接提示出错,所以重复了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -