问题: 如果创建2个button则会运行时出错.
在Win32中,直接用CreateWindow()创建2个buttons时,只要ID不同没有任何任何问题, 但是这里就是不行.
m_Btn.Create("按钮A",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,CRect(0,0,100,100),this,123); // 创建按钮123
m_Btn.Create("按钮B",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,CRect(100,100,200,200),this,12);//同时创建按钮12 Failed.
// Lesson3View.cpp : implementation of the CLesson3View class // #include "stdafx.h" #include "Lesson3.h" #include "Lesson3Doc.h" #include "Lesson3View.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLesson3View IMPLEMENT_DYNCREATE(CLesson3View, CView) BEGIN_MESSAGE_MAP(CLesson3View, CView) //{{AFX_MSG_MAP(CLesson3View) ON_WM_CREATE() ON_WM_SIZE() ON_WM_LBUTTONDOWN() //}}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() ///////////////////////////////////////////////////////////////////////////// // CLesson3View construction/destruction CLesson3View::CLesson3View() { // TODO: add construction code here } CLesson3View::~CLesson3View() { } BOOL CLesson3View::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CLesson3View drawing void CLesson3View::OnDraw(CDC* pDC) { CLesson3Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } ///////////////////////////////////////////////////////////////////////////// // CLesson3View printing BOOL CLesson3View::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CLesson3View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CLesson3View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CLesson3View diagnostics #ifdef _DEBUG void CLesson3View::AssertValid() const { CView::AssertValid(); } void CLesson3View::Dump(CDumpContext& dc) const { CView::Dump(dc); } CLesson3Doc* CLesson3View::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLesson3Doc))); return (CLesson3Doc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CLesson3View message handlers // 增加Create消息响应函数 OnCreate int CLesson3View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here // m_Btn.Create("按钮A",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,CRect(0,0,100,100),this,123); // 创建按钮123 m_Btn.Create("按钮B",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,CRect(100,100,200,200),this,12);//同时创建按钮12 Failed. // m_Btn.ShowWindow(SW_SHOWNORMAL); // m_Btn.UpdateData(); return 0; } // Size消息响应 void CLesson3View::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); // TODO: Add your message handler code here static int flag =0; if(flag==0) { // m_Btn.Create("按钮B",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,CRect(100,100,200,200),this,1234); flag =1; } } // left button 消息响应 void CLesson3View::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default static int flag =0; if(flag==0) { // m_Btn.Create("按钮C",WS_CHILD|WS_VISIBLE|BS_AUTO3STATE,CRect(210,210,300,300),this,12345); flag =1; } CView::OnLButtonDown(nFlags, point); }