<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++/CX</title><link>http://blogs.wankuma.com/episteme/category/2295.aspx</link><description>C++/CX</description><managingEditor>επιστημη</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>επιστημη</dc:creator><title>[C++/CX] ややこしい仕事は裏でやる</title><link>http://blogs.wankuma.com/episteme/archive/2013/04/09/327840.aspx</link><pubDate>Tue, 09 Apr 2013 21:07:00 GMT</pubDate><guid>http://blogs.wankuma.com/episteme/archive/2013/04/09/327840.aspx</guid><wfw:comment>http://blogs.wankuma.com/episteme/comments/327840.aspx</wfw:comment><comments>http://blogs.wankuma.com/episteme/archive/2013/04/09/327840.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/episteme/comments/commentRss/327840.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/episteme/services/trackbacks/327840.aspx</trackback:ping><description>&lt;p&gt;非同期処理そのに。&lt;br&gt;ストアアプリはスレート/タブレット機でも動かさならんのでパフォーマンス重視、重たい処理のおかげでUIが固まるのを嫌います。なので時間のかかる処理はUIとは&lt;strong&gt;独立したスレッド&lt;/strong&gt;でやれ、と。&lt;/p&gt;&lt;p&gt;たとえばフィボナッチ数を求める。&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp; int fibonacci(int n) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( n &amp;lt; 0 ) n = -n;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( n == 0 || n == 1 ) return 1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return fibonacci(n-1) + fibonacci(n-2);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;再帰しまくる&lt;/strong&gt;関数です。ボタンをひとつ追加します。&lt;/p&gt;&lt;p&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_7th/step1.png"&gt;&lt;/p&gt;&lt;p&gt;コマンドの紐付けは&lt;strong&gt;前回と同じ&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;さて、上記の fibonacci() を裏で動かすには ＜&lt;strong&gt;ppltasks.h&lt;/strong&gt;＞ を #include し、&lt;br&gt;using namespace &lt;strong&gt;concurrency&lt;/strong&gt;; した上で &lt;strong&gt;create_task&lt;/strong&gt;() を呼べばいい。&lt;br&gt;ただし create_task() の引数は Windows::Foundation::&lt;strong&gt;IAsyncAction族&lt;/strong&gt;でなくちゃならん。&lt;br&gt;&lt;strong&gt;create_async&lt;/strong&gt;() にラムダ式や関数オブジェクトを渡すと IAsyncAction族 を作ってくれるので、&lt;br&gt;そいつを create_task() に渡します。&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp; &lt;font color="#008000"&gt;// ボタン押されたら async_fibonacci() を呼ぶ&lt;/font&gt;&lt;br&gt;&amp;nbsp; ICommand^ CounterModel::Fibonacci::get() { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ref new Command(ref new Action([this](Object^) { async_fibonacci();}));&lt;br&gt;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp; &lt;font color="#008000"&gt;// フィボナッチ数を求め、表示する&lt;/font&gt;&lt;br&gt;&amp;nbsp; void CounterModel::async_fibonacci() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; create_task(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#008000"&gt;// カウント値を引数に fibonacci数を求める&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; create_async([this]()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { return fibonacci(Count); }))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;// 答えが出たら表示&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .then&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ([this](int n) { set(n); })&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;br&gt;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;create_task() のあと .then( 次にする仕事 ) で処理を裏で続けられます。&lt;br&gt;C#/VBだと async/await とかいう構文で楽できるらしいけど、C++/CXではこれがお作法。&lt;/p&gt;&lt;p&gt;これまでのマトメとして、プロジェクトまるごと&lt;strong&gt;&lt;font size="5"&gt; &lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www1.c3-net.ne.jp/episteme/images/cppcx_7th/App1.zip"&gt;&lt;strong&gt;&lt;font size="5"&gt;ココ&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;に置いときます。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/episteme/aggbug/327840.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>[C++/CX] コマンドの紐付け</title><link>http://blogs.wankuma.com/episteme/archive/2013/04/07/327449.aspx</link><pubDate>Sun, 07 Apr 2013 21:30:00 GMT</pubDate><guid>http://blogs.wankuma.com/episteme/archive/2013/04/07/327449.aspx</guid><wfw:comment>http://blogs.wankuma.com/episteme/comments/327449.aspx</wfw:comment><comments>http://blogs.wankuma.com/episteme/archive/2013/04/07/327449.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/episteme/comments/commentRss/327449.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/episteme/services/trackbacks/327449.aspx</trackback:ping><description>&lt;p&gt;おつぎはちょっとだけメンドクセーこと。&lt;br&gt;ボタンのクリックイベント・ハンドラを廃しプロパティに紐付ける。&lt;br&gt;これができればコード・ビハインドが減るし、MVVMとかゆー&lt;strong&gt;小洒落た&lt;/strong&gt;マネができるとな。&lt;/p&gt;&lt;p&gt;現時点でふたつのボタンのClickイベント・ハンドラを TrialPage.xaml.hおよびcppから取っ払う。&lt;br&gt;しかるのち ボタンのCommand属性を追加。&lt;/p&gt;&lt;p&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_6th/step1.png"&gt;&lt;/p&gt;&lt;p&gt;紐付けたプロパティ:Increment/Decremenet をCounterModelに追加。&lt;br&gt;プロパティの型は Windows::UI::Xaml::Input::ICommand^ なのでヘッダはこんな:&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;// --- Countermodel.h&lt;br&gt;&amp;nbsp; ...&lt;br&gt;&amp;nbsp; [Windows::UI::Xaml::Data::Bindable] &lt;br&gt;&amp;nbsp; public ref class CounterModel sealed : public Common::BindableBase {&lt;br&gt;&amp;nbsp; public:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; property Windows::UI::Xaml::Input::ICommand^ Increment &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { Windows::UI::Xaml::Input::ICommand^ get(); }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; property Windows::UI::Xaml::Input::ICommand^ Decrement &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { Windows::UI::Xaml::Input::ICommand^ get(); }&lt;br&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void clear();&lt;br&gt;&amp;nbsp; private:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void increment();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void decrement();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;&amp;nbsp; };&lt;/font&gt;&lt;/p&gt;&lt;p&gt;cpp側では Windows::UI::Xaml::Input::ICommand を実装したインスタンスを返さにゃならんのだが、そいつがちとばかしメンドーです。&lt;br&gt;まずヘルパー・クラスを用意する。&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;// --- CounterModel.cpp&lt;br&gt;&lt;font color="#ff0000"&gt;namespace {&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;nbsp; delegate void Action(Object^ arg);&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;nbsp; ref class Command sealed : ICommand {&lt;br&gt;&amp;nbsp; public:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Command(Action^ action) { action_ = action; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; virtual void Execute(Object^ arg) { action_(arg); }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; virtual bool CanExecute(Object^ arg) { return true; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; virtual event EventHandler&lt;object^&gt;^ CanExecuteChanged;&lt;br&gt;&amp;nbsp; private:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Action^ action_;&lt;br&gt;&amp;nbsp; };&lt;/object^&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;んでもって:&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;// --- CounterModel.cpp&lt;br&gt;namespace App1 {&lt;br&gt;&amp;nbsp; ...&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp; ICommand^ CounterModel::Increment::get() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ref new Command(ref new Action([this](Object^ arg) { increment();}));&lt;br&gt;&amp;nbsp; }&lt;br&gt;&amp;nbsp; ICommand^ CounterModel::Decrement::get() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ref new Command(ref new Action([this](Object^ arg) { decrement();}));&lt;br&gt;&amp;nbsp; }&lt;br&gt;&lt;/font&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;「increment()/decrement() を呼び出す&lt;strong&gt;ラムダ式&lt;/strong&gt;」から起こした ICommand を返すって&lt;strong&gt;スンポー&lt;/strong&gt;ですな。&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/episteme/aggbug/327449.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>[C++/CX] Popup Dialog</title><link>http://blogs.wankuma.com/episteme/archive/2013/04/06/326411.aspx</link><pubDate>Sat, 06 Apr 2013 19:13:00 GMT</pubDate><guid>http://blogs.wankuma.com/episteme/archive/2013/04/06/326411.aspx</guid><wfw:comment>http://blogs.wankuma.com/episteme/comments/326411.aspx</wfw:comment><comments>http://blogs.wankuma.com/episteme/archive/2013/04/06/326411.aspx#Feedback</comments><slash:comments>245</slash:comments><wfw:commentRss>http://blogs.wankuma.com/episteme/comments/commentRss/326411.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/episteme/services/trackbacks/326411.aspx</trackback:ping><description>&lt;p&gt;ストアアプリは&lt;strong&gt;キホン全画面&lt;/strong&gt;なのでいわゆるダイアログの出番がありません。&lt;br&gt;あるにはあるけど簡単な確認ダイアログの類。こんなの。&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_5th/step1.png"&gt;&lt;/p&gt;&lt;p&gt;座標固定だからこいつの実装は前回のPopupより楽。&lt;br&gt;前回の Tappedイベントハンドラの&lt;strong&gt;ナカミを差し替え&lt;/strong&gt;ます。&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;void App1::TrialPage::txtCount_Tapped(Object^ sender, TappedRoutedEventArgs^ e) {&lt;br&gt;&amp;nbsp; auto action = [this](IUICommand^ command){ count_.clear(); };&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp; MessageDialog^ msg = ref new MessageDialog(L"クリアして差し上げてもよくってよ");&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;nbsp; UICommand^ yesCmd = ref new UICommand(L"おねしゃす",&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ref new UICommandInvokedHandler(action));&lt;br&gt;&amp;nbsp; UICommand^ noCmd&amp;nbsp; = ref new UICommand(L"遠慮します"); &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;&lt;font color="#008000"&gt;&amp;nbsp; // 上記コマンドをダイアログに追加&lt;br&gt;&lt;/font&gt;&amp;nbsp; msg-&amp;gt;Commands-&amp;gt;Append(yesCmd);&lt;br&gt;&amp;nbsp; msg-&amp;gt;Commands-&amp;gt;Append(noCmd);&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;&lt;font color="#008000"&gt;&amp;nbsp; // デフォルトおよびキャンセル時のコマンド・インデックス&lt;br&gt;&lt;/font&gt;&amp;nbsp; msg-&amp;gt;DefaultCommandIndex = 1;&lt;br&gt;&amp;nbsp; msg-&amp;gt;CancelCommandIndex = 1;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#ff0000"&gt;&lt;font color="#008000"&gt;&amp;nbsp; // ダイアログ表示&lt;br&gt;&lt;/font&gt;&amp;nbsp; msg-&amp;gt;ShowAsync();&lt;br&gt;&lt;/font&gt;}&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/episteme/aggbug/326411.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>[C++/CX] PopupMenuを追加する</title><link>http://blogs.wankuma.com/episteme/archive/2013/04/05/326006.aspx</link><pubDate>Fri, 05 Apr 2013 23:43:00 GMT</pubDate><guid>http://blogs.wankuma.com/episteme/archive/2013/04/05/326006.aspx</guid><wfw:comment>http://blogs.wankuma.com/episteme/comments/326006.aspx</wfw:comment><comments>http://blogs.wankuma.com/episteme/archive/2013/04/05/326006.aspx#Feedback</comments><slash:comments>230</slash:comments><wfw:commentRss>http://blogs.wankuma.com/episteme/comments/commentRss/326006.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/episteme/services/trackbacks/326006.aspx</trackback:ping><description>&lt;p&gt;ストアアプリの鬼門(?)、非同期処理とやらをちょっとばかり。&lt;br&gt;&lt;br&gt;カウント値をタップすると[クリア」メニューをぺろっと出します。&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_4th/step1.png"&gt;&lt;/p&gt;&lt;p&gt;ともあれCounterModelにclear()メソッドを追加して:&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;//--- CounterModel.h&lt;br&gt;&amp;nbsp; [Windows::UI::Xaml::Data::Bindable] &lt;br&gt;&amp;nbsp; public ref class CounterModel sealed : public Common::BindableBase {&lt;br&gt;&amp;nbsp; public:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;void clear();&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;&amp;nbsp; };&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;//--- CounterModel.cpp&lt;br&gt;...&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp; void CounterModel::clear() { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; value_ = 0; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OnPropertyChanged(L"Count"); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; addLog(L"ちゃら"); &lt;br&gt;&amp;nbsp; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;しかるのち TextBlock に Tapped イベントハンドラを打ち込みます。&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_4th/step2.png"&gt;&lt;/p&gt;&lt;p&gt;イベントハンドラ ではタップされたコントロールの位置(=PopupMenu表示位置)を求めるヘルパ関数を用意。&lt;br&gt;MSDNのサンプルコードから拝借しました。&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;namespace {&lt;br&gt;&amp;nbsp; Rect GetElementRect(FrameworkElement^ element) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GeneralTransform^ buttonTransform = element-&amp;gt;TransformToVisual(nullptr);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const Point pointOrig(0, 0);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const Point pointTransformed = buttonTransform-&amp;gt;TransformPoint(pointOrig);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const Rect rect(pointTransformed.X, pointTransformed.Y, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; safe_cast&amp;lt;float&amp;gt;(element-&amp;gt;ActualWidth), &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; safe_cast&amp;lt;float&amp;gt;(element-&amp;gt;ActualHeight));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return rect;&lt;br&gt;&amp;nbsp; } &lt;br&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;C#/VBではこーゆーのをstaticメソッドにするんだろけども、&lt;br&gt;C++なら&lt;strong&gt;関係ないものは関係ないとこ&lt;/strong&gt;にぽつんと置けるのが潔くてよろしいですな。&lt;/p&gt;&lt;p&gt;んでもってハンドラ本体。&lt;br&gt;&lt;font color="#ff0000" face="Courier New"&gt;using namespace Windows::UI::Popups;&lt;/font&gt;&amp;nbsp; を追加して:&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;void App1::TrialPage::txtCount_Tapped(Object^ sender, TappedRoutedEventArgs^ e) {&lt;br&gt;&amp;nbsp; auto action = [this](IUICommand^ command){ count_.clear(); }; &lt;font color="#008000"&gt;// 押されたらクリア&lt;/font&gt;&lt;br&gt;&amp;nbsp; auto menu = ref new PopupMenu();&lt;br&gt;&amp;nbsp; menu-&amp;gt;Commands-&amp;gt;Append(ref new UICommand(L"クリア", &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ref new UICommandInvokedHandler(action)));&lt;br&gt;&amp;nbsp; menu-&amp;gt;ShowForSelectionAsync(GetElementRect(safe_cast&amp;lt;FrameworkElement^&amp;gt;(sender)));&lt;br&gt;&amp;nbsp; &lt;font color="#008000"&gt;// ↑ココが非同期。完了を待たずに"するっ"と抜ける。(クリア処理は舞台裏)&lt;/font&gt;&lt;br&gt;}&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/episteme/aggbug/326006.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>「C++/CX] C++/CX は C++11/CX なのか?</title><link>http://blogs.wankuma.com/episteme/archive/2013/04/03/324850.aspx</link><pubDate>Wed, 03 Apr 2013 05:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/episteme/archive/2013/04/03/324850.aspx</guid><wfw:comment>http://blogs.wankuma.com/episteme/comments/324850.aspx</wfw:comment><comments>http://blogs.wankuma.com/episteme/archive/2013/04/03/324850.aspx#Feedback</comments><slash:comments>66</slash:comments><wfw:commentRss>http://blogs.wankuma.com/episteme/comments/commentRss/324850.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/episteme/services/trackbacks/324850.aspx</trackback:ping><description>&lt;p&gt;そゆわけで片方向(データ→コントロール)の紐付けができたところでこれ以上は深入りしないことに。&lt;br&gt;と言いますのも、僕はストアアプリが書きたいんじゃなく、C++/CXをいぢくり回したいわけで。&lt;br&gt;C++ならコンソールアプリで済ますわけだがC++/CXだと今んとこストアアプリ限定なもんだから&lt;br&gt;コンソールI/Oの代替をこしらえたかったってことっす。&lt;/p&gt;&lt;p&gt;んで、ここらへんでそろそろC++11の機能がC++/CXでも活きるのかためしてみんよ。&lt;br&gt;Visual C++ Compiler 2012 CTP　　&lt;a href="http://codezine.jp/article/detail/7061"&gt;http://codezine.jp/article/detail/7061&lt;/a&gt;&lt;br&gt;をインストールしてこんなコードを追加しました。&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;// ---- VectorWriter.h&lt;br&gt;#pragma once&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;#include &amp;lt;sstream&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;namespace App1 {&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; std::wostream&amp;amp; operator&amp;lt;&amp;lt;(std::wostream&amp;amp; stream, Platform::Object^ arg);&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; class VectorWriter {&lt;br&gt;&amp;nbsp; public:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VectorWriter(Windows::Foundation::Collections::IVector&amp;lt;Platform::String^&amp;gt;^ vec) : vec_(vec) {}&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; template&amp;lt;typename Tcar, typename ...Tcdr&amp;gt; void write(Tcar head, Tcdr ...tail) { stream_ &amp;lt;&amp;lt; head; write(tail...); }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; template&amp;lt;typename ...T&amp;gt; void writeln(T ...args) { write(args...); writeln(); }&lt;br&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void write() {}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void writeln();&lt;br&gt;&amp;nbsp; private:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::wostringstream stream_;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Windows::Foundation::Collections::IVector&amp;lt;Platform::String^&amp;gt;^ vec_;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp; };&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;// --- VectorWriter.cpp&lt;br&gt;#include "pch.h"&lt;br&gt;#include "VectorWriter.h"&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;namespace App1 {&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; std::wostream&amp;amp; operator&amp;lt;&amp;lt;(std::wostream&amp;amp; stream, Platform::Object^ arg) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return stream &amp;lt;&amp;lt; arg-&amp;gt;ToString()-&amp;gt;Data();&lt;br&gt;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; void VectorWriter::writeln() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; vec_-&amp;gt;Append(ref new Platform::String(stream_.str().c_str()));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stream_.str(L"");&lt;br&gt;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;そ。Variadic Templates ね。んでもって CounterModel::addLog() がこーなる:&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp; void CounterModel::addLog(const wchar_t* op) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTimeFormatting::DateTimeFormatter datefmt(L"shortdate");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTimeFormatting::DateTimeFormatter timefmt(L"shorttime");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime dt = Calendar().GetDateTime();&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VectorWriter writer(%history_);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer.writeln(datefmt.Format(dt), L' ', timefmt.Format(dt), L' ', op);&lt;br&gt;&lt;/font&gt;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;うれしいことに動いてくれちゃったりするわけだ。&lt;br&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/episteme/aggbug/324850.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>C++/CX: データとコントロールの紐付け(そのに)</title><link>http://blogs.wankuma.com/episteme/archive/2013/03/31/324021.aspx</link><pubDate>Sun, 31 Mar 2013 21:24:00 GMT</pubDate><guid>http://blogs.wankuma.com/episteme/archive/2013/03/31/324021.aspx</guid><wfw:comment>http://blogs.wankuma.com/episteme/comments/324021.aspx</wfw:comment><comments>http://blogs.wankuma.com/episteme/archive/2013/03/31/324021.aspx#Feedback</comments><slash:comments>63</slash:comments><wfw:commentRss>http://blogs.wankuma.com/episteme/comments/commentRss/324021.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/episteme/services/trackbacks/324021.aspx</trackback:ping><description>&lt;p&gt;ついでに値の列を紐付けるよ。&lt;/p&gt;&lt;p&gt;増加/減少した履歴を表示してみる。こんなの。&lt;/p&gt;&lt;p&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_3rd/step1.png"&gt;&lt;/p&gt;&lt;p&gt;TrialPage.xamlにListBoxを貼り、ItemsSource属性を "{Binding History}" とします。&lt;br&gt;TextBlockと同様、"ナカミは紐付け元のHistoryプロパティからもらうよ"てことな。&lt;br&gt;&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_3rd/step2.png"&gt;&lt;/p&gt;&lt;p&gt;あとは CounterModelにHistoryプロパティを用意すりゃえぇです。&lt;br&gt;プロパティの型は&amp;nbsp; Windows::Foundation::Collections::IVector&amp;lt;&amp;gt; &lt;br&gt;こいつは interface なんで、メンバとしては IVector&amp;lt;&amp;gt;を実装した Vector&amp;lt;&amp;gt; を使うです。&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_3rd/step3.png"&gt;&lt;/p&gt;&lt;p&gt;実装はこんなもんでえぇじゃろ。&lt;br&gt;&lt;font face="Courier New"&gt;// --- CounterModel.cpp&lt;br&gt;#include "pch.h"&lt;br&gt;#include "CounterModel.h"&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;using namespace Platform;&lt;br&gt;using namespace Windows::Globalization;&lt;br&gt;using namespace Windows::Foundation;&lt;br&gt;using namespace Windows::Foundation::Collections;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;namespace App1 {&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp; CounterModel::CounterModel() : value_(0) {}&lt;br&gt;&amp;nbsp; int CounterModel::Count::get() { return value_; }&lt;br&gt;&amp;nbsp; void CounterModel::increment() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ++value_; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OnPropertyChanged(L"Count"); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;addLog(L"ふえた");&lt;/font&gt; &lt;br&gt;&amp;nbsp; }&lt;br&gt;&amp;nbsp; void CounterModel::decrement() { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --value_; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OnPropertyChanged(L"Count"); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;addLog(L"へった");&lt;/font&gt; &lt;br&gt;&amp;nbsp; }&lt;br&gt;&amp;nbsp; &lt;font color="#ff0000"&gt;void CounterModel::addLog(String^ op) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTimeFormatting::DateTimeFormatter datefmt(L"shortdate");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTimeFormatting::DateTimeFormatter timefmt(L"shorttime");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Calendar cal;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime dt = cal.GetDateTime();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; history_.Append(datefmt.Format(dt) + L" " + timefmt.Format(dt) + L" " + op);&lt;br&gt;&amp;nbsp; }&lt;br&gt;&amp;nbsp; IVector&amp;lt;Platform::String^&amp;gt;^ CounterModel::History::get() { return %history_; }&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Vector&amp;lt;&amp;gt;は要素が追加/削除されるたびに勝手に"変更したよー"て通知を紐付け先に飛ばしてくれます。&lt;br&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/episteme/aggbug/324021.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>C++/CX: データとコントロールの紐付け</title><link>http://blogs.wankuma.com/episteme/archive/2013/03/31/323988.aspx</link><pubDate>Sun, 31 Mar 2013 11:48:00 GMT</pubDate><guid>http://blogs.wankuma.com/episteme/archive/2013/03/31/323988.aspx</guid><wfw:comment>http://blogs.wankuma.com/episteme/comments/323988.aspx</wfw:comment><comments>http://blogs.wankuma.com/episteme/archive/2013/03/31/323988.aspx#Feedback</comments><slash:comments>59</slash:comments><wfw:commentRss>http://blogs.wankuma.com/episteme/comments/commentRss/323988.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/episteme/services/trackbacks/323988.aspx</trackback:ping><description>&lt;p&gt;さてとーちょっくらいぢくるよ。&lt;/p&gt;&lt;p&gt;前回のコード、ここいらへん↓の居心地がよくない。&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;void App1::TrialPage::btnInc_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)&lt;br&gt;{&lt;br&gt;&amp;nbsp; ++count_;&lt;br&gt;&amp;nbsp; &lt;font color="#ff0000"&gt;txtCount-&amp;gt;Text = count_.ToString();&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;ロジック内に画面の面倒を見る処理が&lt;strong&gt;混入&lt;/strong&gt;してます。できることならカウンタ値を+/-するだけで画面上の値が&lt;strong&gt;勝手にぴょこぴょこ&lt;/strong&gt;更新されるとステキ。それやってみましょ。&lt;br&gt;データ・バインディングといわれるやつですな。&lt;strong&gt;データ束縛&lt;/strong&gt;と訳されてたりするけども、"束縛"ちゅーとほのかに&lt;strong&gt;淫靡な香り&lt;/strong&gt;が漂います。なんかこー&lt;strong&gt;ぎりぎり&lt;/strong&gt;と縛り上げていたぶるみたいで..."紐付け"の方がまだマシな気が。&lt;/p&gt;&lt;p&gt;TrialPage.xaml状にあるTextBlockのText属性を書き換えます:&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_2nd/step1.png"&gt;&lt;/p&gt;&lt;p&gt;"{Binding Count}" が「紐付け元にあるCountプロパティの値を置け」ちう意味ですな。&lt;br&gt;んで、Countプロパティを提供する"紐付け元"をこさえます。&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;// --- CounterModel.h&lt;br&gt;#pragma once&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;#include "Common/BindableBase.h"&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;namespace App1 { &lt;font color="#008000"&gt;// この名前空間はプロジェクト名に合わせる&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp; &lt;font color="#ff0000"&gt;[Windows::UI::Xaml::Data::Bindable]&lt;/font&gt; &lt;br&gt;&amp;nbsp; public ref class CounterModel sealed &lt;font color="#ff0000"&gt;: public Common::BindableBase&lt;/font&gt; {&lt;br&gt;&amp;nbsp; public:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CounterModel();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; property int Count { int get(); }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void increment();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void decrement();&lt;br&gt;&amp;nbsp; private:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int value_;&lt;br&gt;&amp;nbsp; };&lt;br&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;ここでのキモはふたつ:&lt;br&gt;- [Windows::UI::Xaml::Data::Bindable] てなアトリビュートを付けること。このクラスは&lt;strong&gt;紐付け可能&lt;/strong&gt;であることを示します。&lt;br&gt;- Common::BindableBase から導出すること。BindableBaseが紐付けに必要な&lt;strong&gt;モロモロ&lt;/strong&gt;を提供してくれるのな。&lt;/p&gt;&lt;p&gt;CounterModel の実装はこんなカンジ。&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;// --- CounterModel.cpp&lt;br&gt;#include "pch.h"&lt;br&gt;#include "CounterModel.h"&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;namespace App1 { &lt;font color="#008000"&gt;// この名前空間はプロジェクト名に合わせる&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp; CounterModel::CounterModel() : value_(0) {}&lt;br&gt;&amp;nbsp; int CounterModel::Count::get() { return value_; }&lt;br&gt;&amp;nbsp; void CounterModel::increment() { ++value_; &lt;font color="#ff0000"&gt;OnPropertyChanged(L"Count");&lt;/font&gt; }&lt;br&gt;&amp;nbsp; void CounterModel::decrement() { --value_; &lt;font color="#ff0000"&gt;OnPropertyChanged(L"Count");&lt;/font&gt; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;OnPropertyChanged(L"Count") が"Countプロパティが&lt;strong&gt;変更されたよー&lt;/strong&gt;"と紐付け先に通知してくれます。通知を受けたXAMLさんはそいじゃってんでCountプロパティを読み取って&lt;strong&gt;絵ヅラを描き換える&lt;/strong&gt;ってスンポーです。&lt;/p&gt;&lt;p&gt;TrialPage.xaml.h をちょっとだけいぢり、int count_ を CounterModel^ count_ に取り替えます。&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_2nd/step2.png"&gt;&lt;/p&gt;&lt;p&gt;実装側(TrialPage.xaml.cpp)は...&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;TrialPage::TrialPage()&lt;br&gt;{&lt;br&gt;&amp;nbsp; InitializeComponent();&lt;br&gt;&amp;nbsp; &lt;font color="#ff0000"&gt;count_ = ref new CounterModel();&lt;br&gt;&amp;nbsp; DataContext = count_;&lt;br&gt;&lt;/font&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;void App1::TrialPage::btnInc_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)&lt;br&gt;{&lt;br&gt;&amp;nbsp; &lt;font color="#ff0000"&gt;count_-&amp;gt;increment();&lt;/font&gt;&lt;br&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;void App1::TrialPage::btnDec_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)&lt;br&gt;{&lt;br&gt;&amp;nbsp; &lt;font color="#ff0000"&gt;count_-&amp;gt;decrement();&lt;/font&gt;&lt;br&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;コンストラクタでDataCountextをセットすることで紐付け先(XAMLさん)に紐付け元(CounterModel)を教えてあげてます。これで完成。動くハズよ。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/episteme/aggbug/323988.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>C++/CX: はじめてのストアアプリ</title><link>http://blogs.wankuma.com/episteme/archive/2013/03/31/323951.aspx</link><pubDate>Sun, 31 Mar 2013 00:01:00 GMT</pubDate><guid>http://blogs.wankuma.com/episteme/archive/2013/03/31/323951.aspx</guid><wfw:comment>http://blogs.wankuma.com/episteme/comments/323951.aspx</wfw:comment><comments>http://blogs.wankuma.com/episteme/archive/2013/03/31/323951.aspx#Feedback</comments><slash:comments>331</slash:comments><wfw:commentRss>http://blogs.wankuma.com/episteme/comments/commentRss/323951.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/episteme/services/trackbacks/323951.aspx</trackback:ping><description>&lt;p&gt;C++/CLI の次は C++/CX ですか...&lt;/p&gt;&lt;p&gt;επιστημηといたしましては、C++/CXには少なからず期待しています。&lt;br&gt;だってアナタ、&lt;strong&gt;nativeだっつー&lt;/strong&gt;じゃないですか。&lt;/p&gt;&lt;p&gt;C++/CLIはmanagedなんでref-classの&lt;strong&gt;縛りがキツかった&lt;/strong&gt;んですわ。ref-class内にnativeなメンバを置けないとかref-classがstd::vectorの要素になれないとか。&lt;br&gt;対してC++/CXのref-classはnativeだという。ならばC++/CLIでのきっつい縛りが相当緩和されるに違いない、と。&lt;br&gt;んだもんで遅ればせながらC++/CXでしばらく遊んでみようかと&lt;strong&gt;本日突然&lt;/strong&gt;思い立ったわけですわ。&lt;br&gt;つってもC++/CXで書けるのはストアアプリだけとのことなんで、まずはC++/CXで遊ぶべくストアアプリに慣れるとこから着手するです。&lt;/p&gt;&lt;p&gt;GUIのお試しに僕が決まって作るのは「Counter」...まずはとにかく雛形を用意するとこから。Windowsストアアプリ:「新しいアプリケーション」を選択。&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_1st/step1.png"&gt;&lt;/p&gt;&lt;p&gt;わしゃわしゃとコードが吐かれ、その中にMainPage.xaml(h,cpp)があるけども、ここで一枚新たなページを作ります。プロジェクト→新しい項目の追加 から Windowsストア:「基本ページ」で TrialPage.xaml を吐いてもらいます。なんか&lt;strong&gt;見慣れぬダイアログ&lt;/strong&gt;が上がってくるけど構わず[はい]って答えとく。&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_1st/step2.png"&gt;&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_1st/step3.png"&gt;&lt;/p&gt;&lt;p&gt;CounterPageを主ページとすべく、App.xaml.cpp に現れる "MainPage" を "TrialPage" に差し替えます。&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_1st/step4.png"&gt;&lt;/p&gt;&lt;p&gt;ここで一度 build すれば MainPage.xamlなんちゃらは&lt;strong&gt;用済み&lt;/strong&gt;なので削除します。&lt;/p&gt;&lt;p&gt;んでもって CounterPage に TextBlock と Button をふたつ貼り付け、それぞれ txtCount, btnInc, btnDec と命名しました。&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_1st/step5.png"&gt;&lt;/p&gt;&lt;p&gt;ふたつのボタンに Click イベントハンドラをあてがい、TrialPage.xaml.h にある public ref class TrialPage sealed 内に private メンバ int count_ を追加し、TrialPage.xaml.cpp に加筆します:&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;TrialPage::TrialPage() &lt;font color="#ff0000"&gt;: &lt;strong&gt;count_(0)&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;{&lt;br&gt;? InitializeComponent();&lt;br&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;void App1::TrialPage::btnInc_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)&lt;br&gt;{&lt;br&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;? ++count_;&lt;br&gt;? txtCount-&gt;Text = count_.ToString();&lt;br&gt;&lt;/font&gt;&lt;/strong&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;font face="Courier New"&gt;void App1::TrialPage::btnDec_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)&lt;br&gt;{&lt;br&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;? --count_;&lt;br&gt;? txtCount-&gt;Text = count_.ToString();&lt;br&gt;&lt;/font&gt;&lt;/strong&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;こんなもんでいいかな、シミュレータで動かしてみましょ。&lt;br&gt;&lt;img src="http://www1.c3-net.ne.jp/episteme/images/cppcx_1st/step6.png"&gt;&lt;/p&gt;&lt;p&gt;よしよし。今日はこのへんで勘弁したらぁ。&lt;br&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/episteme/aggbug/323951.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>