2017-07-14 92 views
0

我有我的MFC应用程序一个奇怪的问题,我与Visual Studio 2015年MFC应用程序不Visual Studio的

创建如果我运行通过本地Windows调试一切在Visual Studio中的应用程序工作按预期之外的显示工具栏。

如果我在Visual Studio之外启动生成的.exe文件,工具栏和状态栏不会显示在大型机中。我无法通过查看菜单激活它们。所以当我使用将文本写入状态栏的菜单点时,我的应用程序崩溃。

有人现在最新最新问题?

也许我不知道我应该在问题中显示哪些代码,请随时在注释中询问特定的代码部分。我将编辑问题并提供代码。

这是创建工具栏和状态栏的代码。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
     return -1; 

    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || 
     !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) 
    { 
     //TRACE0("Failed to create toolbar\n"); 
     return -1;  // fail to create 
    } 

    m_wndToolBar.LoadTCToolBar(16, IDB_TOOLICONS, IDB_TOOLICONS_HOT, IDB_TOOLICONS_DISABLED, RGB(255, 0, 255)); 

    if (!m_wndStatusBar.Create(this)) 
    { 
     //TRACE0("Failed to create status bar\n"); 
     return -1;  // fail to create 
    } 
    m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); 

    return 0; 
} 
+0

“我不知道我应该在问题中显示哪些代码”可复制错误并导致完整的可运行程序的最小可能代码集。这通常被称为[mcve]或MCVE。 MCVE的美妙之处在于,一旦你创建了一个,这个bug在它可以隐藏的空间很小,并且经常允许你删除或自己回答这个问题,因为MCVE可以清楚地解决问题的原因。 – user4581301

+0

您可以显示代码,在主框架中创建状态和工具栏的位置? –

+0

我已经创建了一个像问题一样的新MFC程序。在新创建的MFC程序中,所描述的错误没有发生。 – Kevin

回答

0

我已经解决了在OnCreate方法中使用简单代码重新排列的问题。

的方法现在看起来是这样的:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 


    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || 
     !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) 
    { 
     //TRACE0("Failed to create toolbar\n"); 
     return -1;  // fail to create 
    } 

    m_wndToolBar.LoadTCToolBar(16, IDB_TOOLICONS, IDB_TOOLICONS_HOT, IDB_TOOLICONS_DISABLED, RGB(255, 0, 255)); 

    if (!m_wndStatusBar.Create(this)) 
    { 
     //TRACE0("Failed to create status bar\n"); 
     return -1;  // fail to create 
    } 
    m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); 

    if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
     return -1; 

    return 0; 
} 

我不得不线

if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
      return -1; 

移动到方法的结束。之后,酒吧显示。

相关问题