自己建了一个单文档MFC程序,添加了一些程序后,发现无法执行OnAppAbout(),其他的都正常,就是弹不出来关于窗口,而且ToolBar也添加不了多余了,任意添加就提示“标识中含有非法字符,请输入一个有效字符”,找了好几天都没有发现原因所在,请高手帮忙!
解决方案 »
- c++动态调用dll,函数不存在,怎么让函数不存在时程序也能运行
- sndPlaySound函数不断重复播放时,有实效的时候吗?
- 还是关于主线程中new,两个子线程读操作,最后delete的问题。新手学习,不知道如何下手,请赐教:理顺一下思路。不胜感激!
- VC选项卡实现
- 这样的DLL怎样写?
- 关于时间控件问题,烦烦烦!!
- ??请问静态连接库中自身的代码可否加载库中的资源
- 如何解除dll占用
- jiangsheng(蒋晟)请回答一个问题,谢谢(其他高手请帮忙)
- 最简单大问题, 通常中文字符串你们都设为何种数据类型?
- 关于sql server 同时查询的问题
- 谁有 数据结构与算法--C++版(第3版) 电子书
//{{AFX_MSG_MAP(CCnEarthApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}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()/////////////////////////////////////////////////////////////////////////////
// CCnEarthApp constructionCCnEarthApp::CCnEarthApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}/////////////////////////////////////////////////////////////////////////////
// The one and only CCnEarthApp objectCCnEarthApp theApp;/////////////////////////////////////////////////////////////////////////////
// CCnEarthApp initializationBOOL CCnEarthApp::InitInstance()
{/*
{ // BLOCK: doc template registration
// Register the document template. Document templates serve
// as the connection between documents, frame windows and views.
// Attach this form to another document or frame window by changing
// the document or frame class in the constructor below.
CSingleDocTemplate* pNewDocTemplate = new CSingleDocTemplate(
IDR_LEFTOPTION_TMPL,
RUNTIME_CLASS(CCnEarthDoc), // document class
RUNTIME_CLASS(CMainFrame), // frame class
RUNTIME_CLASS(CLeftOption)); // view class
AddDocTemplate(pNewDocTemplate);
}*/
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("Local AppWizard-Generated Applications")); LoadStdProfileSettings(); // Load standard INI file options (including MRU) // Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views. CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CCnEarthDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CCnEarthView));
AddDocTemplate(pDocTemplate); // 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 one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow(); return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App Aboutclass 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 CCnEarthApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}/////////////////////////////////////////////////////////////////////////////
// CCnEarthApp message handlers
CCnEarthApp.cpp
IMPLEMENT_DYNCREATE(CCnEarthDoc, CDocument)BEGIN_MESSAGE_MAP(CCnEarthDoc, CDocument)
//{{AFX_MSG_MAP(CCnEarthDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CCnEarthDoc construction/destructionCCnEarthDoc::CCnEarthDoc()
{
// TODO: add one-time construction code here}CCnEarthDoc::~CCnEarthDoc()
{
}BOOL CCnEarthDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE; // TODO: add reinitialization code here
// (SDI documents will reuse this document) return TRUE;
}/////////////////////////////////////////////////////////////////////////////
// CCnEarthDoc serializationvoid CCnEarthDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}/////////////////////////////////////////////////////////////////////////////
// CCnEarthDoc diagnostics#ifdef _DEBUG
void CCnEarthDoc::AssertValid() const
{
CDocument::AssertValid();
}void CCnEarthDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////
// CCnEarthDoc commands
CCnEarthDoc.cpp
//{{AFX_MSG_MAP(CCnEarthView)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CCnEarthView construction/destructionCCnEarthView::CCnEarthView()
{
// TODO: add construction code here}CCnEarthView::~CCnEarthView()
{
}BOOL CCnEarthView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs return CView::PreCreateWindow(cs);
}/////////////////////////////////////////////////////////////////////////////
// CCnEarthView drawingvoid CCnEarthView::OnDraw(CDC* pDC)
{
CCnEarthDoc* pDoc = (CCnEarthDoc*)CView::GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}/////////////////////////////////////////////////////////////////////////////
// CCnEarthView printingBOOL CCnEarthView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}void CCnEarthView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}void CCnEarthView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}/////////////////////////////////////////////////////////////////////////////
// CCnEarthView diagnostics#ifdef _DEBUG
void CCnEarthView::AssertValid() const
{
CView::AssertValid();
}void CCnEarthView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
/*
CCnEarthDoc* CCnEarthView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCnEarthDoc)));
return (CCnEarthDoc*)m_pDocument;
}*/
#endif //_DEBUG
CCnEarthView.cpp
{
protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)// Attributes
public:// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMainFrame)
public:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
//}}AFX_VIRTUAL// Implementation
public:
CSplitterWnd m_wndSplitter;
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endifprotected: // control bar embedded members
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;// Generated message map functions
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_MAINFRM_H__3F037053_F534_4C0F_88D0_B847F168FB4E__INCLUDED_)
CMainFrame.cpp
{
protected:
CLeftOption(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CLeftOption)// Form Data
public:
//{{AFX_DATA(CLeftOption)
enum { IDD = IDD_LEFTOPTION_FORM };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA// Attributes
public:// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CLeftOption)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected:
virtual ~CLeftOption();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif // Generated message map functions
//{{AFX_MSG(CLeftOption)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_LEFTOPTION_H__EFD5F89C_D802_46AE_8BB5_8D96381E67C0__INCLUDED_)
CLeftOption.cpp