是不是所以C++的PROJ都有main函数?
登录 | 论坛导航 -> 华新鲜事 -> 社会百科 | 本帖共有 6 楼,分 1 页, 当前显示第 1 页 : 本帖树形列表 : 刷新 : 返回上一页
<<始页  [1]  末页>>
作者:lamborghini (等级:2 - 初出茅庐,发帖:59) 发表:2003-06-18 19:36:49  楼主  关注此帖
是不是所以C++的PROJ都有main函数?
以下是一个SKIN PROJ的主程序,我不知道从何开始,请行家指点!


#include "stdafx.h"
#include "Skin.h"

#include "MainFrm.h"
#include "ChildFrm.h"
#include "SkinDoc.h"
#include "SkinView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSkinApp

BEGIN_MESSAGE_MAP(CSkinApp, CWinApp)
//{{AFX_MSG_MAP(CSkinApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSkinApp construction

CSkinApp::CSkinApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CSkinApp object

CSkinApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CSkinApp initialization

BOOL CSkinApp::InitInstance()
{
AfxEnableControlContainer();

// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.

#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

// Change the registry key under which our settings are stored.
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Skin"));

LoadStdProfileSettings(10); // Load standard INI file options (including MRU)
loadOptions_();

// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.

CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_SKINTYPE,
RUNTIME_CLASS(CSkinDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CSkinView));
AddDocTemplate(pDocTemplate);

// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;

// Enable drag/drop open
m_pMainWnd->DragAcceptFiles();

// Enable DDE Execute open
EnableShellOpen();
RegisterShellFileTypes(TRUE);

// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;

// The main window has been initialized, so show and update it.
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();

return TRUE;
}


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
// No message handlers
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// App command to run the dialog
void CSkinApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// CSkinApp message handlers


int CSkinApp::ExitInstance()
{
saveOptions_();
return CWinApp::ExitInstance();
}

void CSkinApp::loadOptions_()
{
unsigned int red,green,blue;

// Gl back color
red = GetProfileInt("OpenGL back color","Red",0);
green = GetProfileInt("OpenGL back color","Green",0);
blue = GetProfileInt("OpenGL back color","Blue",0);
m_OptionColorGlBack = RGB(red,green,blue);

// Gl light ambient color
red = GetProfileInt("OpenGL light ambient color","Red",200);
green = GetProfileInt("OpenGL light ambient color","Green",200);
blue = GetProfileInt("OpenGL light ambient color","Blue",200);
m_OptionColorGlLight = RGB(red,green,blue);

}

void CSkinApp::saveOptions_()
{
unsigned char red,green,blue;

// Gl back color
red = GetRValue(m_OptionColorGlBack);
green = GetGValue(m_OptionColorGlBack);
blue = GetBValue(m_OptionColorGlBack);
WriteProfileInt("OpenGL back color","Red",red);
WriteProfileInt("OpenGL back color","Green",green);
WriteProfileInt("OpenGL back color","Blue",blue);

// Gl light ambient color
red = GetRValue(m_OptionColorGlLight);
green = GetGValue(m_OptionColorGlLight);
blue = GetBValue(m_OptionColorGlLight);
WriteProfileInt("OpenGL light ambient color","Red",red);
WriteProfileInt("OpenGL light ambient color","Green",green);
WriteProfileInt("OpenGL light ambient color","Blue",blue);

}

CRenderView* CSkinApp::getRenderView()
{
CMainFrame *pMainFrame = (CMainFrame *)m_pMainWnd;
CChildFrame *pFrame = (CChildFrame *)pMainFrame->GetActiveFrame();
CView *pView = (CView *)pFrame->m_wndSplitter.GetPane(0,1);
return (CRenderView*) pView;
}

void CSkinApp::OnFileNew()
{
return;
}
Put your OWN COOL signature here!
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:kronecker (等级:2 - 初出茅庐,发帖:112) 发表:2003-06-18 20:26:31  2楼 评分:
main() is necessary
main() is necessary.
your program appears to me more like a source file, in which holds some class member definitions.

and the implementation seems unfinished. that's probably why you can't find main. hehe...
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:lamborghini (等级:2 - 初出茅庐,发帖:59) 发表:2003-06-18 20:53:08  3楼
main() is necessarymain() is necessary. your program appears to me more like a source file, in which holds some class member definitions. and the implementation seems unfinished. that's probably why you can't find main. hehe...
thanks for your reply
it is a source code.

The problem is that when I search for main() in the whole directory of the project, none is returned. That's why i am comfused.

So any more suggestions on how I can understand the codes?
By the way, it is a 100M big proj:)
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:kronecker (等级:2 - 初出茅庐,发帖:112) 发表:2003-06-18 21:12:03  4楼
thanks for your replyit is a source code. The problem is that when I search for main() in the whole directory of the project, none is returned. That's why i am comfused. So any more suggestions on how I can understand the codes? By the way, it is a 100M big proj:)
basiclly i dunno
first make sure your souce code is complete. Because from what you've posted, the souces seems incomplete, e.g. the default constructor is empty and desctructor is missing. Even if you have the main function, it still doesn't compile. And i don't think one would have the patience to finish the 100M+ mass.

depending on your programming environment, the main function may have different forms. In m$ visual c++, windows application has main() called WinMain(), if my memory serves me correctly.

maybe you search for main and Main in all your text files.
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:hula (等级:7 - 出类拔萃,发帖:3682) 发表:2003-06-18 21:57:51  5楼 评分:
hoho
if u don't know what all these things are, go back and read books about windows programming and MFC.

MFC provides a strange and huge framework that encapsulates WinMain or _tWinMain. If u wanna find where WinMain is, please read MFC source code or read the book 《深入浅出MFC》by 侯俊杰(台湾), there are a lot of links where u can download the whole book coz hou sir made it free.
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:风中的树叶 (等级:1 - 微不足道,发帖:15) 发表:2003-06-19 10:00:41  6楼
这是用MFC写的
正如Hula大哥说的MFC provides a strange and huge framework that encapsulates WinMain or _tWinMain.

在MFC中,main被封装了。 在VC(VisualStudio)的安装目录下可以找到源程序(\VC98\MFC\SRC\WINMAIN.CPP)。程序在编译时,会自动把该函数链接到你的程序中的。(这个函数不可更改)

下面是它的一个简化版本: (摘自MFC深入浅出)

void main()
{
CWinApp* pApp = AfxGetApp(); //取得用户程序指针
pApp->InitApplication();
pApp->InitInstance();
pApp->Run();
}


(注:上面三个函数都是虚拟函数,如在用户程序中没有改写,执行的将是CWinApp中的对应函数。)


所以,可以把InitApplication和InitInstance看作程序入口点。

(要理解MFC,推荐侯先生的"MFC深入浅出")
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
论坛导航 -> 华新鲜事 -> 社会百科 | 返回上一页 | 本主题共有 6 篇文章,分 1 页, 当前显示第 1 页 | 回到顶部
<<始页  [1]  末页>>

请登录后回复:帐号   密码