MFCを使わない人のための
CEFANらくちんライブラリ
ヘッダ部

[WindowsCEプログラミングTIPSインデックス] へ  
#ifndef	_CEFANLIB_H_
#define	_CEFANLIB_H_
//*************************************************************************
// MFCを使わない人のためのCEFANらくちんライブラリヘッダファイル
//  CeFanLib.h
// 作成 :Ver 0.1 2000/09/09 かっぴー@WindowsCE FAN 
//  更新歴:
//*************************************************************************
#include <Windows.h>
#include <Windowsx.h>

#define CEFANWIN_DEFAULT	0

//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// CEFANらくちんライブラリのベースクラスです。
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
class CEFANBase
{
public:
	static	HINSTANCE	m_hInst;
	HWND		m_hWnd;	//ウィンドウハンドル
	HWND		m_hPWnd;//親ウィンドウハンドル
	HMENU		m_hMenu;//メニューハンドル
	CEFANBase() { 
		m_hWnd  = m_hPWnd = NULL;
		m_hMenu = NULL;
	};
	~CEFANBase() {};
	LRESULT	Show(int mode = SW_SHOW );
	LRESULT MoveToCenter(BOOL bRepaint = TRUE);
};

//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// CEFANWin/Dlgクラス用のメッセージ分岐処理を簡単に書くためのマクロです。
// ATLの実装方法とよくにています。
// 作成 :Ver 0.1 2000/09/09 かっぴー@WindowsCE FAN
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
#define BEGIN_MSG_MAP()\
public: \
	LRESULT ProcessWindowMessage(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam ) \
	{ \
		BOOL done = false;\
		LRESULT lResult;

#define MESSAGE_HANDLER( MsgToBeHandled, FunctionName ) \
		if( uMessage == MsgToBeHandled ){ \
			done = TRUE; \
			lResult = FunctionName(uMessage, wParam, lParam, done ); \
			if(done)return lResult; \
		}

#define COMMAND_HANDLER( CmdIdToBeHandled, FunctionName) \
		if(uMessage == WM_COMMAND && LOWORD(wParam) == CmdIdToBeHandled){ \
			done = TRUE; \
			lResult = FunctionName(uMessage, wParam, lParam, done ); \
			if(done)return lResult; \
		}

#define END_MSG_MAP() \
		return ::DefWindowProc(hWnd, uMessage, wParam, lParam);\
	}

#define BEGIN_DLG_MSG_MAP()\
public: \
	BOOL ProcessWindowMessage(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam ) \
	{ \
		BOOL done = false;\
		BOOL lResult;\

#define END_DLG_MSG_MAP() \
		return FALSE; \
	}

//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// CEFANWinクラス
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
class CEFANWin : public CEFANBase
{
public:
	CEFANWin();
	virtual ~CEFANWin();
	LRESULT	Create( LPCTSTR ClassName,		//ウィンドウクラス名
					LPCTSTR WinName,		//ウィンドウ名(キャプションにでるよ)
					DWORD Style=WS_VISIBLE, //ウィンドウスタイル
					int x=CW_USEDEFAULT,	//ウィンドウ左上X座標
					int y=CW_USEDEFAULT,	//ウィンドウ左上Y座標
					int w=CW_USEDEFAULT,	//ウィンドウ幅
					int h=CW_USEDEFAULT,	//ウィンドウ高さ
					HWND hPWin=NULL );		//親ウィンドウハンドル

	virtual LRESULT ProcessWindowMessage(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam )=0;
		
};
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// CEFANDlgクラス
//
// WM_INITDIALOGメッセージ応答を行う場合
//  SetFocusでダイアログ内コントロールにフォーカスを与えた→FALSE
//	SetFocusでダイアログ内コントロールにフォーカスを与えなかった→TRUE
//  を返してください。
// それ以外のメッセージに応答を行う場合
//  メッセージ処理を行った→TRUE
//  メッセージ処理を行わなかった→FALSE
//  を返してください。
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
class CEFANDlg : public CEFANBase
{
public:
	LRESULT			m_ReturnValue;

	CEFANDlg();
	virtual ~CEFANDlg();
	LRESULT	Create(  LPCTSTR TemplateName, HWND hPWin );
	LRESULT	SendDlgItemMessage(int id, UINT msg,WPARAM wp, LPARAM lp );
	virtual BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)=0;
		
};

//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// CEFANらくちんライブラリ専用初期化ルーチン
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
extern LRESULT CEFANInitialize( HINSTANCE hInst );

//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// CEFANらくちんライブラリ専用Windowクラスレジスター
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
extern ATOM CEFANRegisterWinClass( WNDCLASS& WC );

//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// CEFANらくちんライブラリデフォルトウィンドウプロシージャ
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
extern LRESULT CALLBACK DefCEFANWinProc(HWND hWnd, UINT uMessage,  WPARAM wParam, LPARAM lParam );
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// CEFANらくちんライブラリデフォルトダイアログプロシージャ
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
extern BOOL CALLBACK DefCEFANDlgProc(HWND hDlg, UINT uMessage,  WPARAM wParam, LPARAM lParam );


//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
// CEFANらくちんライブラリダイアログ作成用マクロ
//   十分なマクロがまだ用意されていないので拡張してつかってください。
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
#define	lpCEFANBUF(ID)						BUF##ID

#define	CEFAN_TEXTEDIT_DEFINE(ID,MAXLEN)	TCHAR  BUF##ID[MAXLEN+1]   
#define CEFAN_TEXTEDIT_GET(ID,MAXLEN)		GetDlgItemText(m_hWnd,ID,BUF##ID,MAXLEN)
#define CEFAN_TEXTEDIT_PUT(ID)				SetDlgItemText(m_hWnd,ID,BUF##ID)
#define CEFAN__TEXTEDIT_SETLIMIT(ID,MAXLEN)	SendDlgItemMessage(ID,EM_SETLIMITTEXT,MAXLEN,0)

#define	CEFAN_CBOX_DEFINE(ID,MAXLEN)		TCHAR  BUF##ID[MAXLEN+1]
#define	CEFAN_CBOX_ADD_STRING(ID,STR)		::SendDlgItemMessage(m_hWnd,ID,CB_ADDSTRING,0,(LPARAM)(LPCSTR)STR )
#define CEFAN_CBOX_SET_SELECTNO(ID,SELNO)	::SendDlgItemMessage(m_hWnd,ID,CB_SETCURSEL,(SELNO),0)
#define	CEFAN_CBOX_GET_SELECTNO(ID,HENSUU)	(HENSUU)=::::SendDlgItemMessage(m_hWnd,ID,CB_GETCURSEL,0,0)
#define CEFAN_CBOX_GET_SELECTLBTEXT(ID,MAXLEN)	{long sn=::SendDlgItemMessage(m_hWnd,ID,CB_GETCURSEL,0,0);\
												::SendDlgItemMessage(m_hWnd,ID,CB_GETLBTEXT,sn,(LPARAM) (LPCSTR)BUF##ID );}

#endif

===更新履歴===

2000/9/10 初稿

Reported by かっぴー

(C)2000 Windows CE FAN