是不是所以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;
}
[lamborghini (6-18 19:36, Long long ago)]
[ 传统版 |
sForum ][登录后回复]1楼
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...[kronecker (6-18 20:26, Long long ago)]
[ 传统版 |
sForum ][登录后回复]2楼
(引用 kronecker:main() is necessarymain() is necessary.
your program appears to me more like a source file, in which holds some class member def...)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:)[lamborghini (6-18 20:53, Long long ago)]
[ 传统版 |
sForum ][登录后回复]3楼
(引用 lamborghini:thanks for your replyit is a source code.
The problem is that when I search for main() in the whole directory of the project, n...)basiclly i dunnofirst 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.[kronecker (6-18 21:12, Long long ago)]
[ 传统版 |
sForum ][登录后回复]4楼
hohoif 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.[hula (6-18 21:57, Long long ago)]
[ 传统版 |
sForum ][登录后回复]5楼
这是用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深入浅出")[风中的树叶 (6-19 10:00, Long long ago)]
[ 传统版 |
sForum ][登录后回复]6楼