//-----------------------------------------------------------------------------
// 基本コントロール
//-----------------------------------------------------------------------------

#ifndef _NWCONTROL_H_
#define _NWCONTROL_H_

#define DefMsgProc(x) NWCONTROL::MsgProc(x)

//-----------------------------------------------------------------------------

class NWCONTROL: public NWCLASS {
private:
	void _init( void );
	void _sort( PNWCONTROL pCtrl );
	void _preinit( PNWCONTROL pRootControl );
protected:
	NWRECT			sRect;						// 矩形
	NWRECT			sAlignRect;					// アライン用矩形
	int				nAlignWidth;				// アライン幅
	NWALIGN			eAlign;						// アラインコントロール
	
	int				bEnabled;					// 有効フラグ
	int				bVisible;					// 可視フラグ
	NWCURSORNO		eCursorNo;					// カーソル
	
	NWCONTROL( void );
	virtual void SetChildRect( int nX, int nY );
	virtual void AlignChild( void );
	virtual void Align( PNWRECT pR );
public:
	PNWCONTROL		pRoot;						// 親コントロール
	PNWCONTROL		pRootForm;					// 親フォーム
	PNWLIST			pControls;					// 子コントロール
	PNWPOPUPMENU	pPopupMenu;					// ポップアップメニュー
	
	int				nTag;						// タグ
	int				nTabOrder;					// タブオーダー
	int				bTabStop;					// タブストップ
	int				nZorder;					// Zオーダー
	
	NWCONTROL( PNWCONTROL pRootControl );
	~NWCONTROL( void );
	
	void Dump( int n );
	
	int CheckRect( PNWPOINT p );
	int CheckRectEx( PNWPOINT p );
	void SetRect( PNWRECT pNewR );
	void SetRectClip( PNWRECT pNewR );
	NWRECT GetRect( void );
	void SetAlign( NWALIGN eNewAlign );
	NWALIGN GetAlign( void );
	void SetCursorNo( NWCURSORNO eNewNo );
	NWCURSORNO GetCursorNo( void );
	
	int IsVisible( void );
	int IsEnabled( void );
	
	void Show( void );
	void Hide( void );
	void ScreenToClient( PNWPOINT p );
	void ClientToScreen( PNWPOINT p );
	void SetZorder( int nZ );
	
	virtual void Enable( void );
	virtual void Disable( void );
	
	virtual int MsgProc( PNWMESSAGE pMessage );
	virtual int MsgShortCut( PNWMESSAGE pMessage );
	
	virtual int MsgIdle( PNWMESSAGE pMessage )			{ return 0; };
	virtual int MsgPaint( PNWMESSAGE pMessage )			{ return 0; };
	virtual int MsgMouseDown( PNWMESSAGE pMessage )		{ return 0; };
	virtual int MsgMouseUp( PNWMESSAGE pMessage )		{ return 0; };
	virtual int MsgMouseMove( PNWMESSAGE pMessage )		{ return 0; };
	virtual int MsgKeyDown( PNWMESSAGE pMessage )		{ return 0; };
	virtual int MsgKeyUp( PNWMESSAGE pMessage )			{ return 0; };
	virtual int MsgDialog( PNWMESSAGE pMessage )		{ return 0; };
	virtual int MsgResize( PNWMESSAGE pMessage )		{ return 0; };
	virtual int MsgShow( PNWMESSAGE pMessage )			{ return 0; };
	virtual int MsgHide( PNWMESSAGE pMessage )			{ return 0; };
};

//-----------------------------------------------------------------------------

#endif
