![]()
WindowsCE
プログラミングTIPS WindowsAPIで書こう |
![]()
■はじめに
いろんな理由から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