MFC单文档的toolbar无法添加按钮

iskyshop 2009-05-04 09:53:35
自己建了一个单文档MFC程序,添加了一些程序后,发现无法执行OnAppAbout(),其他的都正常,就是弹不出来关于窗口,而且ToolBar也添加不了多余了,任意添加就提示“标识中含有非法字符,请输入一个有效字符”,找了好几天都没有发现原因所在,请高手帮忙!
...全文
286 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
iskyshop 2009-05-07
  • 打赏
  • 举报
回复
而且关于窗口这里打不开了,点击“关于”,程序处于死机状态
iskyshop 2009-05-07
  • 打赏
  • 举报
回复
我发现在单文档中任意添加一个View,原来的toolbar资源图标添加的时候就会出错!盼帮忙解答!
iskyshop 2009-05-07
  • 打赏
  • 举报
回复
我指的按钮编辑,是自己用笔刷绘制一个简单的按钮,只要用笔刷点一下图标,就会出现这个对话框!
iskyshop 2009-05-07
  • 打赏
  • 举报
回复
以上是所有的代码,我就是为了在单文档MFC工程中形成左右格局,坐标是一些操作的tree,右边是显示数据的地方,能正常运行,但是如果编辑toolbar资源,只要添加一个新的按钮就会弹出一个对话框"标识中含有非法字符,请输入一个有效的字符!",单文档自身带动按钮可以编辑!而且按钮资源是新添加到,还没有设置ID!
iskyshop 2009-05-07
  • 打赏
  • 举报
回复
class CLeftOption : public CFormView
{
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
iskyshop 2009-05-07
  • 打赏
  • 举报
回复
class CMainFrame : public CFrameWnd
{

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;
#endif

protected: // 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
iskyshop 2009-05-07
  • 打赏
  • 举报
回复
IMPLEMENT_DYNCREATE(CCnEarthView, CView)

BEGIN_MESSAGE_MAP(CCnEarthView, CView)
//{{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/destruction

CCnEarthView::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 drawing

void CCnEarthView::OnDraw(CDC* pDC)
{
CCnEarthDoc* pDoc = (CCnEarthDoc*)CView::GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CCnEarthView printing

BOOL 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
iskyshop 2009-05-07
  • 打赏
  • 举报
回复

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/destruction

CCnEarthDoc::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 serialization

void 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
iskyshop 2009-05-07
  • 打赏
  • 举报
回复
BEGIN_MESSAGE_MAP(CCnEarthApp, CWinApp)
//{{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 construction

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

/////////////////////////////////////////////////////////////////////////////
// The one and only CCnEarthApp object

CCnEarthApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CCnEarthApp initialization

BOOL 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 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 CCnEarthApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// CCnEarthApp message handlers

CCnEarthApp.cpp
宁静的心_Yuri 2009-05-07
  • 打赏
  • 举报
回复
学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fengrx 2009-05-06
  • 打赏
  • 举报
回复
没看到代码不好说啊。
  • 打赏
  • 举报
回复
检查一下资源ID
菜牛 2009-05-04
  • 打赏
  • 举报
回复
标识中含有非法字符,请输入一个有效字符

那就检查用到的标识符啊。
warmyellow 2009-05-04
  • 打赏
  • 举报
回复
有代码么,看看代码,在做分析...

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧