// OnscreenKeyboard.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "OnscreenKeyboard.h"
#include "OnscreenKeyboardDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// COnscreenKeyboardApp

BEGIN_MESSAGE_MAP(COnscreenKeyboardApp, CWinApp)
	//{{AFX_MSG_MAP(COnscreenKeyboardApp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG
	ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COnscreenKeyboardApp construction

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

/////////////////////////////////////////////////////////////////////////////
// The one and only COnscreenKeyboardApp object

COnscreenKeyboardApp theApp;

/////////////////////////////////////////////////////////////////////////////
// COnscreenKeyboardApp initialization

BOOL COnscreenKeyboardApp::InitInstance()
{
	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

	COnscreenKeyboardDlg dlg;
	m_pMainWnd = &dlg;
	int nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with OK
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with Cancel
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}

From where this programe start execution ?

Dani AI

Generated

showed the CWinApp-derived code and a global theApp; several replies pointed at parts of the truth. To put it precisely: Windows hands control to the C runtime startup (the OS loader -> CRT entry), the CRT runs C++ static initializers (that is when COnscreenKeyboardApp::COnscreenKeyboardApp() for the global theApp is executed), and only afterwards the runtime calls the program's WinMain/wWinMain. In an MFC build that WinMain implementation lives in the MFC libraries and performs framework initialization; the framework then calls your overridden CWinApp::InitInstance() (where your dialog is created and DoModal() runs).

To verify this in practice, set function breakpoints on the app constructor and on InitInstance (Visual Studio lets you add a breakpoint by function name). Run the debugger and watch the order: constructor first, then WinMain (in the MFC module), then InitInstance. If you need to find the literal entry point, check the Linker → Advanced → Entry Point setting or break on the runtime entry (WinMainCRTStartup) in the disassembly.

A few practical cautions: avoid doing GUI or MFC-dependent work in global constructors — MFC itself may not be initialized yet. Also beware static-initialization order across translation units; don’t rely on another translation unit’s global being ready inside a different global ctor. Put heavy or framework-dependent startup in InitInstance, and use lazy initialization or factory functions for cross-file globals if needed.

Summary: , , and each picked up part of the picture — the full startup sequence runs: CRT startup → global constructors → WinMain (MFC) → CWinApp::InitInstance.

Recommended Answers

All 5 Replies

Sorry but it didn't help me ... I want the answer from my given source code.

In the constructor (as always in C++) --> COnscreenKeyboardApp::COnscreenKeyboardApp()

A program starts at main() or another function with _stdcall in front of it.

This is just a class, so you'll prolly still need to create the class/run the constructor to start it.

Your main() should be in an other file...

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.