#include "gdi.h"
#include "winsystem.h"
#define UNIQUE_APP_INSTANCE 0
int init_templates(WindowTemplate& wc);
int init_windows(GenericWindow& w,WindowTemplate& wc,WindowDriver& d,int nCmdShow);
Cursor cursor;
Icon icon, small_icon(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON));
class WindowMainDriver:public WindowDriver
{
public:
int respond(Window&,WindowMessageData&);
};
void startup_message(const char *message)
{
message_box(0,message);
}
int PASCAL WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow )
{
#if(UNIQUE_APP_INSTANCE)
if(hPrevInstance) return 1;
#endif
int g=0;
G_app_instance_data=new AppInstanceData(hInstance,hPrevInstance);
WindowTemplate wc;
if (init_templates(wc))
return 1;
GenericWindow w;
WindowMainDriver d;
if (init_windows(w,wc,d,nCmdShow))
return 1;
// main thread
WindowMessageFilter filter(w.get_handle());
while(!GUI_step(filter)){}
winsystem_thread_cleanup();
// cleanup
delete G_app_instance_data;
return 0;
}
int init_templates(WindowTemplate& wc)
{
WindowTemplateId wc_id("GenericAppMenu",G_app_instance_data);
WindowTemplateData wc_data;
wc_data.cursor=cursor.get_handle();
wc_data.icon=icon.get_handle();
wc_data.small_icon=small_icon.get_handle();
BOOL success = wc.store(wc_data,wc_id); // use defaults
if(!success) return 1;
return 0;
}
int init_windows(GenericWindow& w,WindowTemplate& wc,WindowDriver& d,int nCmdShow)
{
int g=0;
WindowId parent(G_app_instance_data); // top
WindowData w_data(wc);
w_data.area.top=100;
w_data.area.left=100;
w_data.area.width=300;
w_data.area.height=350;
g=w.create("Generic Application",w_data,parent,d);
if(g) return 1;
w.show(nCmdShow);
w.update();
return 0;
}
WindowMainDriver::respond(Window& w,WindowMessageData& m)
{
bool processed=true;
switch( m.message )
{
case WM_PAINT:
{FunctionPaint h(w.get_handle());
const char *z="Client";
TextOut( h.dc, 20, 20, z , 6 );
}
break;
case WM_DESTROY:
send_quit_gui_thread(0);
break;
default:
processed = false;
}
if(processed)
return 0;
return 1;
}