WindowsCE プログラミングTIPS WindowsAPIで書こう
MFCを使わない人のための
CEFANらくちんライブラリ

その1

[WindowsCEプログラミングTIPSインデックス] へ  

■はじめに

 いろんな理由からMFCを使わないでプログラムを書いている人もお多いと思います。ただ普通の書き方をするとメッセージループの部分が長くなり悩んでいる方も多いと思います。そこですっきりプログラムを書ける一方法を公開します。今回は1日でもはやくそれを知りたい方のために、サンプルコーディングとライブラリを公開します。これでどんどんWindowsCE用のアプリケーションを書いてくださいね。

ライブラリとサンプルコードは?

ライブラリ名はCEFANlibと名付けました。使用にあたっては何の制限も設けませんが、何の保証もしません。みなさん各自のリスクで工夫してご利用ください。都合によりライブラリの変更を行うこともあります。
ダウンロードはここからです->CEFANlibV01.LZH

■ちょっとライブラリをみたいのだけど?

こちらへどうぞ→  ヘッダ部を見る   コード部を見る


1回目はこれだけ....

 長い説明はさておき、今回はサンプルコーディング例を紹介します。ライブラリのソースやヘッダを合わせても約300行しかないので全体を把握するのは難しくないと思います。

//-------------------------------------------
//CEFAN LIB サンプルプログラム
//-------------------------------------------
#include <Windows.h>
#include <commctrl.h>
#include <tchar.h>
#include "resource.h"
#include "CEFANlib.h"
//-------------------------------------------
//テストダイアログ
//-------------------------------------------
class TestDlg: public CEFANDlg
{
public:
LRESULT OnInit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done);
LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done);

BEGIN_DLG_MSG_MAP()←なんとなくMFC風....
	MESSAGE_HANDLER(WM_INITDIALOG,OnInit)
	COMMAND_HANDLER(IDCANCEL,OnClose)
	COMMAND_HANDLER(IDOK,OnClose)
END_DLG_MSG_MAP()

public:
	CEFAN_TEXTEDIT_DEFINE(IDC_EDIT1,MAX_PATH);←ダイアログ用変数の自動定義
	CEFAN_CBOX_DEFINE(IDC_COMBO1,MAX_PATH);←ダイアログ用変数の自動定義
};

LRESULT TestDlg::OnInit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done)
{
	CEFAN_CBOX_ADD_STRING(IDC_COMBO1,TEXT("LBL-0"));
	CEFAN_CBOX_ADD_STRING(IDC_COMBO1,TEXT("LBL-1"));
	CEFAN_CBOX_ADD_STRING(IDC_COMBO1,TEXT("LBL-2"));
	CEFAN_CBOX_SET_SELECTNO(IDC_COMBO1,0);
	_tcscpy( lpCEFANBUF(IDC_EDIT1),TEXT("TEST"));
	CEFAN_TEXTEDIT_PUT(IDC_EDIT1);
	MoveToCenter();
	return TRUE;
}

LRESULT TestDlg::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done)
{
	CEFAN_TEXTEDIT_GET(IDC_EDIT1,MAX_PATH);
	CEFAN_CBOX_GET_SELECTLBTEXT(IDC_COMBO1,MAX_PATH);
	EndDialog( m_hWnd, TRUE) ;
	return TRUE;
}
//-------------------------------------------
//テストMAINウィンドウ
//-------------------------------------------
class CMainWin : public CEFANWin
{
public:
	LRESULT OnFileExit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done);
	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done);
	LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done);
	LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done);
	LRESULT OnDlg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done);

BEGIN_MSG_MAP()
	MESSAGE_HANDLER(WM_CREATE, OnCreate)
	MESSAGE_HANDLER(WM_PAINT, OnPaint)	
	MESSAGE_HANDLER(WM_DESTROY, OnDestroy)	
	COMMAND_HANDLER(IDM_FILE_END,OnFileExit )
	COMMAND_HANDLER(IDM_TEST, OnDlg )
END_MSG_MAP()

	HWND	m_hwndCB;		//コマンドバーハンドル
	TCHAR	buf[MAX_PATH];	//表示文字列

};

LRESULT CMainWin::OnDlg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done)
{
	TestDlg d;
	d.Create(  MAKEINTRESOURCE(IDD_DIALOG1),m_hWnd );
	_tcscpy( buf, d.lpCEFANBUF(IDC_EDIT1) );
	_tcscat( buf, d.lpCEFANBUF(IDC_COMBO1) );
	UpdateWindow( m_hWnd );
	return 0;
}

LRESULT CMainWin::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done)
{
	m_hwndCB = CommandBar_Create(m_hInst, m_hWnd, 1);			
	CommandBar_InsertMenubar(m_hwndCB, m_hInst, IDR_MENU1, 0);
	CommandBar_AddAdornments(m_hwndCB, 0, 0);
	CommandBar_Show(m_hwndCB, TRUE);
	_tcscpy( buf,TEXT("HELLO! WindowsCE FAN!") );
	return 0;
}

LRESULT CMainWin::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done)
{
	PostQuitMessage(0);
	return 0;
}

LRESULT CMainWin::OnFileExit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done)
{
	CommandBar_Destroy(m_hwndCB);
	DestroyWindow(m_hWnd);
	return 0;
}

LRESULT CMainWin::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &done)
{
	PAINTSTRUCT ps;
	RECT rt;
	HDC hdc = BeginPaint(m_hWnd, &ps);
	GetClientRect(m_hWnd, &rt);
	DrawText(hdc, buf, _tcslen(buf), &rt, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
	EndPaint(m_hWnd, &ps);
	return 0;
}
//-------------------------------------------
//立ち上げ部
//-------------------------------------------
int WINAPI WinMain(	HINSTANCE hInstance,
					HINSTANCE hPrevInstance,
					LPTSTR    lpCmdLine,
					int       nCmdShow)
{
	//------CEFANらくちんライブラリ初期化-----
	CEFANInitialize( hInstance );
	//------メインウィンドウの立ち上げ--------
	WNDCLASS     wc;
	wc.style          = CS_HREDRAW|CS_VREDRAW;
	wc.lpfnWndProc    = CEFANWIN_DEFAULT;
	wc.cbClsExtra     = CEFANWIN_DEFAULT;
	wc.cbWndExtra     = CEFANWIN_DEFAULT;
	wc.hInstance      = CEFANWIN_DEFAULT;
	wc.hIcon          = CEFANWIN_DEFAULT;
	wc.hCursor        = CEFANWIN_DEFAULT;
	wc.hbrBackground  = (HBRUSH) GetStockObject(WHITE_BRUSH);
	wc.lpszMenuName   = CEFANWIN_DEFAULT;
	wc.lpszClassName  = TEXT("NORMALWIN");
	CEFANRegisterWinClass(wc);

	CMainWin mw;
	mw.Create(	TEXT("NORMALWIN"),
				TEXT("TEST"),
				WS_VISIBLE|WS_SYSMENU,
				CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL);
	mw.Show();
	//----- おきまりメッセージループ-------
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

===更新履歴===

2000/9/9 初稿

Reported by かっぴー

(C)2000 Windows CE FAN