WPFアプリケーションで腕試し ~C++でもWPFアプリを

CodeZine / 2012年6月6日 14時0分

 WPFアプリケーションのひな形を起こせるのはC#とVBだけなのがC++屋には面白くない。そこで本稿では、C#,VB,C++/CLI,C++を全部使ったWPFアプリの実装を試みます。

■はじめに

 僕の手元に一冊の本が届きました。

『〔速攻入門〕 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を以下のように書き換えます:

MainWindow.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」を起こし、以下のような単純なクラスを実装します。

Counter.h
#ifndef COUNTER_H__ #define COUNTER_H__ namespace DataBindingSample { class Counter { public: void inc(); void dec(); int count(); private: int count_; }; } #endif
Counter.cpp
#include "Counter.h" namespace DataBindingSample { void Counter::inc() { ++count_; } void Counter::dec() { --count_; } int Counter::count() { return count_; } }


■関連記事
開発ツールベンダーの老舗が語る C++によるソフトウェア開発の今と将来性
次期C++Builderはアーキテクチャを刷新 ~「エンバカデロ・デベロッパーキャンプ東京」レポート
開発者と非開発者を結ぶ新パラダイム「Workflow Foundation 4」
C++Builder XE2+FireMonkeyで昔のラケットゲームを再構築してみる(2)
WPFアプリケーションで腕試し ~C++でもWPFアプリを

■記事全文へ

CodeZine

トピックスRSS

ランキング