Click here to Skip to main content
15,921,028 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi I am new to MFC . I want to get the tool bar code runnig from a DLL into a SDI Application. Below is my code.

Target .exe
C++
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "SDI_TEST.h"
#include "MainFrm.h"
// "Tool_Test.h"
#include"Export.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)

//const int  iMaxUserToolbars = 10;
//const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
//const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	ON_WM_CREATE()
	ON_WM_SETFOCUS()
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
}

CMainFrame::~CMainFrame()
{
}

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

	// create a view to occupy the client area of the frame

	if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
	{
		TRACE0("Failed to create view window\n");
		return -1;
	}

	//CWnd hHandle = reinterpret_cast<cwnd>(((CMainFrame*)AfxGetMainWnd()->m_hWnd);

	CMainFrame * pMAinFrame = (CMainFrame*) AfxGetMainWnd();

	CWnd *pHandle = reinterpret_cast<cwnd*>(pMAinFrame);

	function(*pHandle);

   pMAinFrame->EnableDocking(CBRS_ALIGN_ANY);
   pMAinFrame->DockControlBar(0,AFX_IDW_CONTROLBAR_FIRST);

	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;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
	cs.lpszClass = AfxRegisterWndClass(0);

	return TRUE;
}

// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}
#endif //_DEBUG

// CMainFrame message handlers

void CMainFrame::OnSetFocus(CWnd* /*pOldWnd*/)
{
	// forward focus to the view window
	m_wndView.SetFocus();
}

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
	// let the view have first crack at the command
	if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
		return TRUE;

	// otherwise, do default handling
	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

and this is my DLL code.
C++
#include "stdafx.h"
#include "Tool_Test.h"
#include"resource.h"

void Tool_Test::Toolbar_create(CWnd &hHandle)
{
    if (!m_wndToolBar.CreateEx(&hHandle) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))
    {
        TRACE0("Failed to Create Dialog Toolbar\n");

    }


And i Am calling the Creation of Tool_test object in DLL. 



#include "stdafx.h"
#include "Export.h"


extern "C"
{

	void function(CWnd &hHandle)
	{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());
	 Tool_Test  obj;
	obj.Toolbar_create(hHandle);
	

	}
}

I am able to deploy the SDI APP but the tool bar is missing from it.Please suggest me what iam missing
Posted
Updated 2-Jun-15 19:06pm
v3
Comments
Richard MacCutchan 2-Jun-15 11:37am    
Why are you moving the application's toolbar out into a DLL? It serves no real purpose and makes it more difficult to deploy the application, as you have found.
Member 11722558 3-Jun-15 0:49am    
Actually it is a Project requirement. So i have to do it .
Member 11722558 3-Jun-15 0:51am    
Any Suggestions Please.....
Richard MacCutchan 3-Jun-15 4:00am    
Make sure the DLL is deployed with the application. But it is still a bad idea.
Member 11722558 3-Jun-15 4:39am    
Can u Please elaborate on ur comment. Deplyoing a DLL means?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900