Исследование способов создания приложения Windows с использованием ObjectWindows 2.x, страница 5

/* ------------------------------------------------------- *

*         QwlMain : TApplication

* ------------------------------------------------------- */

#include <owl\applicat.h>

int

OwlMain ( int /* argc */, char* /* argv */ [] )

{

TApplication App ( "Hello world !" );

return App.Run();

}

/* ------------------------------------------------------ *

*    WinMain: TApplication

* ------------------------------------------------------ */

#include <owl\applicat.h>

#pragma argsused

int PASCAL

WinMain (

HINSTANCE hInst,

HINSTANCE hPrevInst,

LPSTR     lpszCmdLine,

int       nCmdShow

)

{

TApplication App ( "Hello world!", hInst,       hPrevInst,

lpszCmdLine, nCmdShow  );

return App.Run();

}

Директива #pragma argsused подавляет предупреждения компилятора о неиспользованных аргументах для следующей за ним функции.

Эти приложения определяют объект класса TApplication. Он инкапсулирует в себе все приложение. Функция Run() вызывается для запуска  цикла ожидания  и обработки  сообщений. Она возвращает значение состояния, которое передается в качестве кода возврата из OwlMain ( WinMain ).

/* ------------------------------------------------------ *

*         QwlMain : Window1 - 1

*

*           class TMyApp

* ------------------------------------------------------ */

#include <owl\applicat.h>

#include <owl\framewin.h>

// ----------------------------------------------------------class TMyApp: public TApplication

{

public:

TMyApp ( const char far* title ):

TApplication ( title )  { };

void InitMainWindow ();

};

// ----------------------------------------------------------void

TMyApp::InitMainWindow ()

{

MainWindow = new TFrameWindow ( 0, "MainWindow" );

}

// ----------------------------------------------------------#pragma argsused

int

OwlMain ( int argc , char* argv[] )

{

TMyApp App ( argv[0] );

return App.Run();

}

/* ------------------------------------------------------- *

*         QwlMain : Window1 - 2

*

*               class TMyWin

*               class TMyApp

*

* ------------------------------------------------------- */

#include <owl\applicat.h>

#include <owl\framewin.h>

//-----------------------------------------------------------class TMyWin: public TFrameWindow

{

public:

TMyWin ( TWindow *parent, const char far* title ) :

TFrameWindow ( parent, title ),

TWindow      ( parent, title )   { };

};

// ----------------------------------------------------------class TMyApp: public TApplication

{

public:

TMyApp ( const char far* name ):

TApplication ( name )  { };

void InitMainWindow ();

};

// ----------------------------------------------------------void

TMyApp::InitMainWindow ()

{

MainWindow = new TMyWin ( 0, "MainWindow" );

}

//-----------------------------------------------------------#pragma argsused

int

OwlMain ( int argc , char* argv[] )

{

TMyApp App ( argv[0] );

return App.Run();

}

//               Run()   ---------------------------------void TApplication :: Run ()

{

if ( !hPrevInstance )

InitApplication ();

if ( Status == 0 )

InitInstance ();

if ( Status == 0 )

MessageLoop ();

else

Error ( Status );

}

//       MessageLoop()   ---------------------------------void TApplication :: MessageLoop ()

{

MSG Message;

while ( TRUE )

{

if ( PeekMessage ( &Message, 0, 0, 0, PM_REMOVE )  )

{

if ( Message.message == WM_QUIT )

break;

if ( ProcessAppMsg ( &Message )  )

{

TranslateMessage ( &Message );

DispatchMessage  ( &Message );

}

}

else

IdleAction ();

}

Status = Message.wParam;

}