用VC如何编译
有如下源码:
//HELLO.H
class CMyWinApp : public CWinApp
{
public:
virtual BOOL InitInstance(); // –莱ノ祘Α常莱赣э糶ㄧΑ
virtual BOOL OnIdle(LONG lCount); // OnIdle ノㄓ矪瞶盯竚丁idle time
};
//--------------------------------------------------------------------
class CMyFrameWnd : public CFrameWnd
{
public:
CMyFrameWnd(); // constructor
afx_msg void OnPaint(); // for WM_PAINT
afx_msg void OnAbout(); // for WM_COMMAND (IDM_ABOUT)
void IdleTimeHandler(LONG lCount); // we want it call by CMyWinApp::OnIdle
private:
DECLARE_MESSAGE_MAP() // Declare Message Map
static VOID CALLBACK LineDDACallback(int,int,LPARAM);
// 猔種: callback ㄧΑゲ斗琌 "static"埃留旅 'this' 夹
};
//--------------------------------------------------------------------
//HELLO.CPP
#include "Hello.h"
#include "Resource.h"
CMyWinApp theApp; // application object
//--------------------------------------------------------------------
// CMyWinApp's member
//--------------------------------------------------------------------
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMyFrameWnd();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
//--------------------------------------------------------------------
// CMyWinApp's member
//--------------------------------------------------------------------
BOOL CMyWinApp::OnIdle(LONG lCount)
{
CMyFrameWnd* pWnd = (CMyFrameWnd*)m_pMainWnd;
pWnd->IdleTimeHandler(lCount);
return TRUE;
}
//--------------------------------------------------------------------
// CMyFrameWnd's member
//--------------------------------------------------------------------
CMyFrameWnd::CMyFrameWnd()
{
Create(NULL, "Hello MFC", WS_OVERLAPPEDWINDOW, rectDefault,
NULL, "MainMenu"); // "MainMenu" ﹚竡 RC 郎
}
//--------------------------------------------------------------------
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
ON_COMMAND(IDM_ABOUT, OnAbout)
ON_WM_PAINT()
END_MESSAGE_MAP()
//--------------------------------------------------------------------
void CMyFrameWnd::OnPaint()
{
CPaintDC dc(this);
CRect rect;
GetClientRect(rect);
dc.SetTextAlign(TA_BOTTOM | TA_CENTER);
::LineDDA(rect.right/2, 0, rect.right/2, rect.bottom/2,
(LINEDDAPROC) LineDDACallback, (LPARAM) (LPVOID) &dc);
}
//--------------------------------------------------------------------
VOID CALLBACK CMyFrameWnd::LineDDACallback(int x, int y, LPARAM lpdc)
{
static char szText[] = "Hello, MFC";
((CDC*)lpdc)->TextOut(x, y, szText, sizeof(szText)-1);
for(int i=1; i<50000; i++); // 洪琌┑筐硉芠诡
}
//--------------------------------------------------------------------
void CMyFrameWnd::OnAbout()
{
CDialog about("AboutBox", this); // "AboutBox" ﹚竡 RC 郎
about.DoModal();
}
//--------------------------------------------------------------------
void CMyFrameWnd::IdleTimeHandler(LONG lCount)
{
CString str;
CRect rect(10,10,200,30);
CDC* pDC = new CClientDC(this);
str.Format("%010d", lCount);
pDC->DrawText(str, &rect, DT_LEFT | DT_TOP);
}
//--------------------------------------------------------------------
// resource.h
#define IDM_ABOUT 100
// hello.rc
#include "resource.h"
#include "afxres.h"
JJHouRIcon ICON DISCARDABLE "JJHOUR.ICO"
AFX_IDI_STD_FRAME ICON DISCARDABLE "JJHOUR.ICO"
MainMenu MENU DISCARDABLE
{
POPUP "&Help"
{
MENUITEM "&About HelloMFC...", IDM_ABOUT
}
}
AboutBox DIALOG DISCARDABLE 34, 22, 147, 55
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About Hello"
{
ICON "JJHouRIcon",IDC_STATIC,11,17,18,20
LTEXT "Hello MFC 4.0",IDC_STATIC,40,10,52,8
LTEXT "Copyright 1996 Top Studio",IDC_STATIC,40,25,100,8
LTEXT "J.J.Hou",IDC_STATIC,40,40,100,8
DEFPUSHBUTTON "OK",IDOK,105,7,32,14,WS_GROUP
}
//STDAFX.CPP
#include "stdafx.h"
//STDAFX.H
#include <afxwin.h>