踊れないダメ人間

本人は面白いと思ってるらしい

Archive for 10月 2010

アキバ総研-Windows 7の発売1周年記念イベントが開催! リナカフェ・ベルばらの2か所で実施-[秋葉原総合情報サイト]

leave a comment »

Written by aoikagami

2010年10月24日 at 1:38 午後

カテゴリー: どうでもいい話

地デジその後

leave a comment »

この間ケーブルテレビを解約しろと言われて(http://wp.me/p188RX-i)、
今月末に解約することにしたんで管理会社に電話した。

TVKとMXは映るのか訊いたら、「確認します」と言われた。
ついでにダメもとでBSデジタルは映るのか訊いたら、なんと映るらしい!
BSとCSは映るようにするんだと

イヤッッホォォォオオォオウ! (AA略、崩れたorz

これでうちのVARDIAでもBSの録画ができるぜぃ!

Written by aoikagami

2010年10月22日 at 11:00 午後

カテゴリー: テレビ

今日の元住吉商店街

leave a comment »

グロリアが流れてた...

ちょっと前にJ-POP()で出てきた変なアレンジの奴じゃなくて、讃美歌の奴

しかし、こないだのストパンといい、どういう基準で選曲してんだろう?

Written by aoikagami

2010年10月22日 at 10:45 午後

カテゴリー: どうでもいい話

機動戦士ガンダム22話

leave a comment »

image

フラウ・ボウのフルヌード
しかも乳首出てるYO

さすが70年代

Written by aoikagami

2010年10月21日 at 11:28 午後

カテゴリー: アニメ

世の中にはいろいろ考える人がいるもんだ

leave a comment »

Written by aoikagami

2010年10月16日 at 2:14 午後

カテゴリー: ヨタ話

Windows LiveがWordPressに移行するから変えろと言ってきたので…

leave a comment »

Windows LiveがWordpressに移行するから変えろと言ってきたので変えたら
CodeSnippetプラグインで書いたコードが軒並み崩れやがった

修正で気が狂いそうだ

なんかさ、相手の言ってくることまじめに対応してたらバカ見るばっかりだよね。
大体なんでWindows Liveと同じテーマがないわけ?

Written by aoikagami

2010年10月14日 at 10:26 午後

カテゴリー: こころのさけび

Visual Studio 2010 C++のラムダ関数で遊んでみた その2

leave a comment »

Visual Studio 2010 C++のラムダ関数で遊んでみた の続き

前回のコードを改造

template <typename t_Wnd>
class EventHandler
{
private:
	typedef bool(t_Wnd::*MESSAGEPROC)(HWND,WPARAM,LPARAM);

	typedef std::vector<std::function<bool(HWND,WPARAM,LPARAM)> > vf_t;
	vf_t procs;

	t_Wnd* m_pWnd;

public:
	EventHandler<t_Wnd>(t_Wnd& wnd) : m_pWnd(&wnd) {} 

	virtual EventHandler<t_Wnd>& operator +=(std::function<bool(HWND,WPARAM,LPARAM)> proc)
	{
		procs.push_back(proc);
		return *this;
	}

	virtual EventHandler<t_Wnd>& operator +=(MESSAGEPROC proc)
	{
		return operator+=([=](HWND hWnd,WPARAM wParam,LPARAM lParam)->bool{
			return (m_pWnd->*proc)(hWnd,wParam,lParam);
		});
	}

	virtual bool Invoke(HWND hWnd, WPARAM wParam, LPARAM lParam)
	{
		bool rtn = false;

		for (vf_t::const_iterator it = procs.begin() ; it != procs.end() ; ++it)
		{
			rtn |= (*it)(hWnd,wParam,lParam);
		}
		return rtn;
	}
};

// メッセージマップクラス
template <typename t_Wnd>
class MessageMap
{
private:
	typedef std::shared_ptr<EventHandler<t_Wnd> > handler_t;
	std::map<UINT,handler_t> handlers;

	t_Wnd* m_pWnd;

public:
	MessageMap() {}

	void Attach(t_Wnd& wnd)
	{
		m_pWnd = &wnd;
	}

	EventHandler<t_Wnd>& operator [](UINT message)
	{
		if ( handlers.find(message) == handlers.end() )
		{
			handlers[message] = handler_t(new EventHandler<t_Wnd>(*m_pWnd));
		}

		return *handlers[message];
	}

	bool Invoke(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
	{
		if ( handlers.find(message) != handlers.end() )
		{
			return handlers[message]->Invoke(hWnd,wParam,lParam);
		}
		else
		{
			return false;
		}
	}
};

で、メインウインドウクラスを追加

// メインウインドウクラス
class MainWindow
{
private:
	MessageMap<MainWindow> messageMap;

public:
	MainWindow()
	{
		CreateMessageMap();
	}

	bool OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
	{
		WORD wmId    = LOWORD(wParam);
		WORD wmEvent = HIWORD(wParam);

		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return false;
		}
		return true;
	}

	bool OnPaint(HWND hWnd,WPARAM wParam,LPARAM lParam)
	{
		PAINTSTRUCT ps;
		HDC hdc;
		hdc = BeginPaint(hWnd, &ps);
		EndPaint(hWnd, &ps);

		return true;
	}

	bool OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam)
	{
		PostQuitMessage(0);
		return true;
	}

	LRESULT WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
	{
		return messageMap.Invoke(hWnd,message,wParam,lParam) 
			? 0 : ::DefWindowProc(hWnd, message, wParam, lParam);
	}

private:
	void CreateMessageMap()
	{
		messageMap.Attach(*this);
		messageMap[WM_COMMAND] += &MainWindow::OnCommand;
		messageMap[WM_PAINT  ] += &MainWindow::OnPaint;
		messageMap[WM_DESTROY] += &MainWindow::OnDestroy;
	}
};

MainWindowのグローバル変数g_Wndを作成

MainWindow g_Wnd;

WndProcからg_WndのWndProcを呼び出すようにする

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	return g_Wnd.WndProc(hWnd,message,wParam,lParam);
}

コンパイル&実行

image
 
 

もうラムダ関数とはあんま関係ないような気もするけど...

 

委譲、じゃなかった以上

Written by aoikagami

2010年10月14日 at 10:19 午後

元住吉商店街

leave a comment »

けいおん!!を流すのは百歩譲っていいとして

ストパン(1期)のOPを流すのはどうかと思う

Written by aoikagami

2010年10月14日 at 8:12 午後

カテゴリー: どうでもいい話

Visual Studio 2010 C++のラムダ関数で遊んでみた

leave a comment »

Visual Studio 2010のC++(以下VC++10.0)でラムダ関数が使えるようになったのは既知の通り
で、とりあえず遊んでみた

VC++10.0の新規作成でWin32プロジェクトを選択、Windowアプリケーションを作成

クラスEventHandlerを作成

// イベントハンドラークラス
class EventHandler{
private:
    typedef std::vector<std::function<bool(HWND,WPARAM,LPARAM)> > vf_t;    vf_t procs;

public:
    EventHandler() {} 

    EventHandler& operator=(const EventHandler& src)
    {
        this->procs = src.procs;
        return *this;
    }

    virtual EventHandler& operator +=(std::function<bool(HWND,WPARAM,LPARAM)> proc)
    {
        procs.push_back(proc);
        return *this;
    }

    virtual bool Invoke(HWND hWnd, WPARAM wParam, LPARAM lParam)
    {
        bool rtn = false;
        for (vf_t::const_iterator i = procs.begin() ; i != procs.end() ; ++i)
        {
            rtn |= (*i)(hWnd,wParam,lParam);
        }
        return rtn;
    }

};

 

クラスMessageMapを作成

class MessageMap
{
private:
    typedef std::map<UINT,EventHandler> proc_t;
    proc_t g_procs;

public:
    MessageMap() {}

    MessageMap& Add(UINT message,std::function<bool(HWND,WPARAM,LPARAM)> func)
    {
        if ( g_procs.find(message) == g_procs.end() )
        {
            g_procs[message] = EventHandler();
        }

        g_procs[message] += func;
        return *this;
    }

    bool Invoke(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        if ( g_procs.find(message) != g_procs.end() )
        {
            return g_procs[message].Invoke(hWnd,wParam,lParam);
        }
        else
        {
            return false;
        }
    }
};

 

で、グローバル変数g_MessageMapを宣言

MessageMap g_MessageMap;
 
WndProcを書き換える
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    if ( !g_MessageMap.Invoke(hWnd,message,wParam,lParam))
    {
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
 
で、ここまでやってWinMain関数の中でラムダ関数を使ってメッセージプロシージャーを登録
(もともとWndProcの中にあった処理を移しただけ(^^;)
// WM_COMMANDメッセージのイベントハンドラーを追加
g_MessageMap.Add(WM_COMMAND,[](HWND hwnd,WPARAM wParam,LPARAM lParam)-> bool{
    WORD wmId    = LOWORD(wParam);
    WORD wmEvent = HIWORD(wParam);

    switch (wmId)
    {
    case IDM_ABOUT:
        DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hwnd, About);
        break;
    case IDM_EXIT:
        DestroyWindow(hwnd);
        break;
    default:
        return false;
    }
    return true;});

// WM_PAINTメッセージのイベントハンドラーを追加
g_MessageMap.Add(WM_PAINT,[](HWND hWnd,WPARAM wParam,LPARAM lParam)-> bool{
    PAINTSTRUCT ps;
    HDC hdc;
    hdc = BeginPaint(hWnd, &ps);
    EndPaint(hWnd, &ps);
    return true;});

// WM_DESTROYメッセージのイベントハンドラーを追加
g_MessageMap.Add(WM_DESTROY,[](HWND hWnd,WPARAM wParam,LPARAM lParam)-> bool{
    PostQuitMessage(0);
    return true;});

 

これをコンパイル&実行

LAMBDA_TEST

見事ラムダ関数で追加したWM_COMMANDのイベントハンドラーが実行された

ま、これが何の役に立つのかは知らんが...

Written by aoikagami

2010年10月12日 at 7:14 午後

WWEスマックダウン

leave a comment »

久しぶりに見た

ビッグショーの絶対領域...

Written by aoikagami

2010年10月10日 at 7:59 午後

カテゴリー: テレビ