はじめに
僕の手元に一冊の本が届きました。
- 『〔速攻入門〕 C#プログラミング すぐに現場で使える知識』 中博俊・猪股健太郎・岩永信之・山本康彦 著、技術評論社、2012年3月
Java/C++と対比しつつC#を解説してまして、校正に先立ってC++屋目線でのレビューを頼まれた本です。
献本で届いた本書の「3.3.2 ─」でWPFアプリケーションをC#で実装する手順とテクニックがコンパクトにまとめられています。Visual StudioでWPFアプリケーションを作るとなると、今のところC#もしくはVBの二択でして、C++やC++/CLI向けにはWPFアプリのひな形を作ってはくれず、C++屋の僕には歯がゆい思い。鬱憤を紛らすため(?)、WPFによるUI部とC++によるロジック部とをC++/CLIで繋いでみることにしました。
今回作成するサンプル
サンプルに選んだのは「カウンタ」です。
画面上の+/-ボタンのクリックに応じてカウンタ値が増減するだけの単純なアプリケーションです。
ビュー部分の作成
プロジェクト:C#/WPFアプリケーション「DataBindingSample」を起こし、生成された MainWindows.xamlを以下のように書き換えます:
<Window x:Class="DataBindingSample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="データ バインディング サンプル" Width="193" SizeToContent="Height" Height="157"> <StackPanel> <TextBox Text="{Binding Count}" FontSize="36" FontWeight="Bold" TextAlignment="Center" /> <Button Content="+" Command="{Binding IncCommand}" /> <Button Content="-" Command="{Binding DecCommand}" /> </StackPanel> </Window>
ここでのキモはTextBoxとButtonのText/Commandに「{Binding ...}」すること。これによってTextBoxの表示内容とボタンが押されたときの処理を外に追い出し、ビュー(外観)とロジック(本体)とを分離します。
UIを受け持つMainWindowはひとまずここまで。次にアプリケーションの本体(カウンタのキモ)はC++で書きましょうか。
ロジック部分の作成
プロジェクト:C++/スタティックライブラリ「Counter」を起こし、以下のような単純なクラスを実装します。
#ifndef COUNTER_H__ #define COUNTER_H__ namespace DataBindingSample { class Counter { public: void inc(); void dec(); int count(); private: int count_; }; } #endif
#include "Counter.h" namespace DataBindingSample { void Counter::inc() { ++count_; } void Counter::dec() { --count_; } int Counter::count() { return count_; } }