「おとは@でいじー開発部」トップページに移動します
プロフィール
短く紹介
一応肩書付き最前線プロのプログラマーです☆
デザイン、サウンド、企画、設計、プログラム構築まで幅広く知識を身につけるべく修行に励んでおります!!
ハードウェア開発の沼にどっぷり漬かってぬくぬく☆

ひとり言
ハードウェア開発に興味を持ってしまった・・・当分はハードウェアについて記事を書いていくのだ♪♪
WPFの紹介ウェブページもある程度コンテンツが増えたのでライブラリの公開を一時中断したよ(爆)
スポンサード リンク
カレンダー
2023年 3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
人気記事
- 2017/11/28 22:40 (0)
新規記事
- 2017/11/28 22:40 (0)
コメント
登録はありません
トラックバック
登録はありません
バックナンバー
RSS
常に最新情報を得るためにはRSSを利用しましょう。
QRコード
QR Code

現在のページを通報
「ぶろぐるすとーりーと管理人」へ不適切な記事の通報が行えます。
通報を行いたい対象記事のみを表示した状態で通報して下さい。

ページ切り替え


スレッドを利用した分散処理

投稿日時 2015/05/04 00:46:26

ゲストさん、こんにちはhappy01

高級アプリ製作の極意 ~WPF編~のお部屋へようこそ。
このお部屋では 第17章 の「 スレッドを利用した分散処理 」についてお話したいと思います。

アプリ製作において どうしても避けられないのは CPU負荷の高い処理 です。
たくさんのデータの中から検索したり難しい計算を繰り返し行ったりするとCPUをたくさん使用することになります。

高級アプリは基本操作する人を待たせないことが要求されますsign03
どうしても待ってもらう必要が出てきた時は「 処理を行っている状態を常に表示する 」や「 バックスレッドを使用して他の作業が出来るようにする 」などの対策が必要です。

バックスレッドは便利で表向きのUI操作とは別に自由に処理を行うことが出来ます shine
そして、スレッドの処理のタイミングで表向きのUIへ表示を反映させることが出来ます
scissors

バックスレッドをたくさん使用すればその分CPU負荷も上がるので全部スレッドを分ければ良いのかと聞かれたらそうではないので 本当に高負荷の処理に合わせて利用するのが好ましい

サンプルで実装しているスレッド処理は、「 Threadクラスを使用した高度なスレッド制御 」と「 Taskクラスを使用したシンプルなスレッド処理 」の2種類ですheart04


特に .Net framework 4.5から用意されたTaskクラスのスレッド処理は本当に実装が楽で扱いやすい 処理ですnote
1分掛かるアプリがあってそこへ10行程度のTask分散処理を記述したところ10秒程度になったなんてこともありますhappy02
お仕事で200人以上の人が使うアプリとかをちょくちょく作る私は 特に処理速度は気を使っていますよ

仕事でも下の単純な計算式を周りの人にしっかり伝えています。
アプリ利用者の作業コストdollar アプリによって待たされる時間clock ×人数shadow ×使用頻度pc

待ち時間が1分10人1日に10回使用するとしたら100分の作業時間が掛かるわけで、10秒の待ち時間なら10分で済むわけです。

1日に平等にある作業時間を とりあえずで組んだへなちょこプログラムで浪費しないように sign01


clip サンプルダウンロード
 


clip サンプルイメージ画像

おとは@開発隊長さんの投稿画像
解析用のボタンを2種類用意しました。
「解析」 のボタンはバックスレッドを使用しないので ボタンを押した瞬間から数分間、アプリの操作を一切受け付けません
「解析(スレッド)」 のボタンはバックスレッドを使用します。
バックスレッド処理のため処理中でも操作を行うことができます。

サンプルプログラムは2種類のスレッド処理を記述しています。
ソースコード内にマクロで機能の切り替えが出来るようになっていますのでUSE_THREADの定義を探して有効無効に切り替えてみて下さい。

サンプルの中では C言語向けのAPIをDLLから参照して呼び出しする少し高度な処理 も書いています。
独自制御のスレッド処理の場合はCPU割り当てもしたいことがあるので使用するCPU割り当てを行うための処理も参考になるかと思います。
 


投稿者

おとは@開発隊長  

カテゴリー

C#言語

タグ

Windows C# WPF
  • Yahoo!ブックマークに登録
  • このエントリーをはてなブックマークに追加

データの入出力の簡略化

投稿日時 2015/05/03 22:49:23

ゲストさん、こんにちはhappy01

高級アプリ製作の極意 ~WPF編~のお部屋へようこそ。
このお部屋では 第16章 の「 データの入出力の簡略化 」についてお話したいと思います。

アプリケーションの製作において 必然的になるものと言えばデータ入出力 もその一つです。
ここまで読み進めているゲストさんはもうアプリの1つや2つ作ったことがあるかもしれないですねnote
データの入出力処理はどうしていますかsign02

昔、私は自分でCSVや手書きのXMLなどで入出力を行っていましたdanger

プログラムを組んで1つ1つの入出力処理を書くって かなり重労働 なんですよねthunder
今回紹介する簡略化を行うとデータの入出力のための処理は 短めのコード2行sign03 で出来ますshine
(共通コードとして数十行書いたコードがあることが前提ですが)

今回紹介するのは XMLのシリアライズとデシリアライズによるファイルの読み書き についてです。

XMLシリアライズの利用の有無でどう違うのかまとめます。

heart04 XMLシリアライズを利用する

  1. クラス構造を書くだけでXMLファイルにメンバ変数の情報が入出力できる(利点)
  2. ファイルの入出力に関するコード記述が1度だけで使いまわせる(利点)
  3. 読み込みトラブルが発生しにくい(利点)
  4. クラスのインスタンスを直接変換されるので扱いやすい(利点)
  5. クラス構造に名前を付けておくことで自由なタグ名やアトリビュート名が付けられる(利点)
  6. クラス構造にルールを設けて記述を行う必要がある(難点)
  7. 読み込みトラブルに失敗した時に何が原因か分かりにくい(難点)
  8. ファイルサイズが大きくなりやすい(難点)


heart03 XMLシリアライズを利用しない

  1. 自由な形式のフォーマットで出力できる(利点)
  2. ファイルサイズを小さく出来る(利点)
  3. 読み込みトラブルが発生しても原因を特定しやすい(利点)
  4. 実装にコストが掛かる(難点)
  5. メンバ変数追加の度に変数からの読み込みや書きだし対応が必要(難点)
  6. 複雑なデータ構造にするとメンテナンスが大変(難点)


clip サンプルダウンロード
 


clip サンプルイメージ画像

おとは@開発隊長さんの投稿画像
4つのメンバ変数を持つクラスをUIに割り当てました。
開くボタンでXMLファイルを読み込みUIへ直接反映します。
保存は入力されている情報をXMLへ書き込みします。

おとは@開発隊長さんの投稿画像
XML中身はこんな感じです↑(横長だったので改行入れてます)

今回はシンプルなデータでしたので4つのアトリビュートを持つ1つのクラスで構成されています。
エレメントを持たせたり階層構造にするとより 複雑なXMLファイルが入出力出来る ようになります sign01
コードを見て頂くとお分かりになると思いますが、変数名とXMLに出力されている名前は別扱いしています。
変数名直接だと見難くなったりもするのでアトリビュート名を記述して分かり易くしています

 


投稿者

おとは@開発隊長  

カテゴリー

C#言語

タグ

Windows C# WPF
  • Yahoo!ブックマークに登録
  • このエントリーをはてなブックマークに追加

データの保護

投稿日時 2015/05/03 21:37:46

ゲストさん、こんにちはhappy01

高級アプリ製作の極意 ~WPF編~のお部屋へようこそ。
このお部屋では 第15章 の「 データの保護 」についてお話したいと思います。

アプリケーションの開発が進み設定データや各種データの保存を行うようになってくると色々と気になってくることがあるかと思います。
前回のデータサイズもそうですが、 データの構造 ってあまり 外部公開すべきではないことがあります
特に ノウハウが詰まったデータ構造をしていると言うのであればなおさら です。
データサイズの記事でもデータの安全性について述べていますが今回はよりデータを保護するために暗号化を施していきます。

今回は、 TripleDES を使った簡単な暗号化についてサンプルを紹介します。
TripeDESは安全面でいえばややSHA-2などに比べれば劣るのですが.Net Frameworkで簡単に利用できるAPIが用意されているので紹介 しています。
24bitのキーと8bitの初期ベクタの2つの情報を使用して暗号化、複合化を行います。
この2つの情報が暗号化時と複合化時に必要になります。
なので 暗号化した外部ファイルなどどこかに情報として保持しておく必要がありますのでご注意 ください。

clip サンプルダウンロード
 

clip サンプルイメージ画像

おとは@開発隊長さんの投稿画像
今回のサンプルでは 文字列を相互に暗号化・複合化するための処理 を作成しました。
単純には解読できないデータになりますので秘密の文章交換などにも利用できそうですね。

内部の処理ではバイナリデータを取り扱いしていますので、 バイナリデータとして出力したファイルを暗号化 したり、 ネットワークの通信で利用するデータを暗号化 したりするなど応用が利きますよ。


投稿者

おとは@開発隊長  

カテゴリー

C#言語

タグ

Windows C# WPF
  • Yahoo!ブックマークに登録
  • このエントリーをはてなブックマークに追加

データの圧縮

投稿日時 2015/02/22 20:52:26

ゲストさん、こんにちはhappy01

高級アプリ製作の極意 ~WPF編~のお部屋へようこそ。
このお部屋では 第14章 の「 データの圧縮 」についてお話したいと思います。

アプリケーションを作成していけば 必然的に必要になるのがデータの入出力 なのですが 単純なテキストやバイナリをそのまま出力すると大変sign01 なことになります。
それは、 ファイルのサイズsign03 です。
とくに テキストファイルはどんどんファイルサイズが太ります bearing

そこで必要になってくるのが圧縮してのサイズを小さくすることですdown
圧縮ってファイルサイズが小さくなるだけじゃなくてちょいと良いことがあるんですよnote

それは、 データの安全性の向上 ですsign03
下手に圧縮ファイルをいじれば展開出来なくなります
テキストに比べれば可読性が悪いのでデータを直接いじることも難しくなります shadow

今回のサンプルでは 圧縮を行うため便利な関数を含めていますのでそのまま利用できます shine

関数の処理だけなのでVisual Studioの画面はいらないと思うのですが・・・
WPFを使ったアプリの 上級編ってことでWPFの利用テクニックを追加で紹介 しますよ。

今回のアプリでは処理結果をTextBlockで画面に表示していますtv
おなじみの Bindingを利用すればプログラムで設定した文字が表示できる のですが今までのやり方、 変数に代入するだけでは表示されない問題 となりますsweat01
これは、変数が変わってもUIの表示が更新されないために発生するのです。
おとは@開発隊長さんの投稿画像
赤線で目印をしたところが PropertyChanged と言う バインドされた変数の更新を受け取ってUIを更新する ためのやり方ですflair
黄色線はウィンドウの設定で今までのサンプルで使わなかったものです。

それぞれの内容です・・・
one WindowsStyleでツールウィンドウ表示に
two ResizeModeでウィンドウサイズを固定に
three SizeToContentで高さをUIに合わせて自動調整するように
four TopMostで最前面表示に
five WindowStartupLocationで実行画面の中央に表示されるように
各プロパティに設定した項目の説明でした。

今回もサンプルを載せましたので色々いじって研究してみてはいかがでしょう wrench

clip サンプルダウンロード
 


clip サンプルイメージ画像

圧縮したいファイルのパスを指定して圧縮ボタンを押すことで元ファイルの隣に圧縮済みのデータを保存します。(圧縮後は.zlibと言う拡張子が付きます)
おとは@開発隊長さんの投稿画像

展開したいファイルのパスを指定して展開ボタンを押すことでZLib圧縮されたファイルを展開してファイルに保存します。(.binファイルとして拡張子を指定してます)
おとは@開発隊長さんの投稿画像

出来れば圧縮したことが分からない拡張子を選択することをおすすめします。
サンプルは簡単なエラーチェックのみをしていますので 製品アプリを製作する際はエラーチェックをしっかりとして 下さいね。
 


投稿者

おとは@開発隊長  

カテゴリー

C#言語

タグ

Windows C# WPF
  • Yahoo!ブックマークに登録
  • このエントリーをはてなブックマークに追加

アプリ製作の設計

投稿日時 2015/02/16 13:54:47

ゲストさん、こんにちはhappy01

高級アプリ製作の極意 ~WPF編~のお部屋へようこそ。
このお部屋では 第12章 の「 アプリ製作の設計 」についてお話したいと思います。

アプリの製作において重要なのは設計ですよねsign03
設計図もなしに構築していくのは 自殺行為 sweat01
設計図を作成せずに製作出来る人は頭の中に設計図を描ける人だけですshadow
ただし、頭の中はだれにも読み取ることはできませんし本人が忘れたら終わり なのですdanger
情報として残すという意味でも設計は必ず行い書面化 しましょうmemo

無駄に数時間プログラムを書くならちゃんと 設計して短時間で必要なプログラムを書け って思うねshine
設計せずにプログラムすると後で後悔するし無駄な作業コストが増えるから設計してプログラムしろって意味 だよscissors

さて、アプリを作るぞって思ってからゲストさんはどうしますかsign02
いきなりコードは書きませんよね・・・catface

以下の内容は おとは が良く行う方法なのですが絶対ではありませんhappy02
悪いところもあるでしょうから参考情報としてご利用下さいwrench
ちなみに、ここで紹介している内容は とくに 転載とか2次配布禁止ですよっsign01
(他ページの物も基本私的利用以外は禁止だよ)
聞かれたら答える程度で後輩や新人にも教えたことない内容だから・・・secret
私的利用、社内利用はご自由にhappy01

one マインドマップによる構想
XMindというフリーのマインドマップツールですclip
PDFやMSプロジェクトへの出力などが便利なので  おとは  はそろそろ有料版にしようかと思っています。(1万円くらい)
社内でのブレインストーミングをするにも便利ですよnote
おとは@開発隊長さんの投稿画像

マインドマップでなくて もエクセルでもワードでも良いので社内で利用しやすいツールを使って 下さいfoot
重要なのは以下の内容を明記することですpencil

mobaq アプリの製作の肝となる「 目的 」、 何がしたいのか何が出来るのかを明確 にする。
mobaq 目的を達成するために必要なことを大枠で決める。 これをコアタスクとするticket
mobaq  コアタスクに概算工数 を付けて優先度順に並び変えていくenter
mobaq  概算工数からスケジュールに落とし込みしていくnight

上記の点をまとめるとワードのような文章よりはエクセルの図を利用する方が楽だと思いますscissors
おとは  は自宅ではXMindを利用していますのでそちらで紹介しますsnow
おとは@開発隊長さんの投稿画像
ぶろぐるすとーりーと 、本ウェブサイトの 土台システムの構想 ですcrown
one 最初に目的として「ゴール」を決めますsign01
two 次に要件として必要な資産をまとめて足りないものを予算に応じて書きとめました。
three ゴールが決まればどんな機能があると良いかを考えますeye
 ブログ投稿サイトの構想なので他のサイトを参考にして欲しい機能を決めていきます。
 欲しい機能が決まったら実装していきたい順番を決めます。
four 運営リスクを最初のうちから考えておきますdanger
 リスク対策をしながら構築していくことはとっても重要です。


two マインドマップによる基本設計
構想が出来たら具体的な設計に入っていきます。
こちらの画像はぶろぐるすとーりーとの基本レイアウト・フォルダ構成・ライブラリの構成をまとめたものです。
おとは@開発隊長さんの投稿画像
ぶろぐるすとーりーとがどのようなレイアウト構成で表示を行っているのかが分かるようになっていますshine
アプリの構成は書いていないですがライブラリの構成をまとめています。
開発PCとウェブサーバーへの反映方法も少しだけ記載していますpen


three アプリの基本設計
構想が出来たら具体的な設計に入っていきます。
この画像はメインアプリとライブラリまとめたものです。
おとは@開発隊長さんの投稿画像
ライブラリとメインアプリのソースコードの関連性と一部のフォルダ階層は画像が大きくなるので割愛しておりますsecret
プログラムの設計上のフォルダ構成とプログラムの仕様別のファイル分けが分かってもらえたらと思いますsweat01


sharp おまけ
現在開発中の おとは製 のC#の基本ライブラリと高級ライブラリの作成段階の構成図です。
こちらを元にVisual Studioでちょこちょこプログラムを構築していますcd
おとは@開発隊長さんの投稿画像
Ex が付いているのが 高級 ライブラリcrown です。
各個別のライブラリ処理をまとめて便利にしているから高級ってことになっています・・・sweat01
高級と付けるくらいだからこの画像からもっと進化していくだろうとは思うけどねup
実際に使ってみて思うことがあれば拡張していくものなのでどんどん便利になるはずsign01

設計に困ったら経験豊富な上司や先輩に素直に質問した方が絶対良い結果になるよheart01
(ちゃんと実績・実力がある人にたよってねっwink


投稿者

おとは@開発隊長  

カテゴリー

C#言語PHP言語 

タグ

Windows C# PHP Web
  • Yahoo!ブックマークに登録
  • このエントリーをはてなブックマークに追加

WPFアプリ配布の注意事項

投稿日時 2015/02/16 00:34:33

ゲストさん、こんにちはhappy01

高級アプリ製作の極意 ~WPF編~のお部屋へようこそ。
このお部屋では 第13章 の「 WPFアプリ配布の注意事項 」についてお話したいと思います。

ここからは上級編となりますsign03
個人の方よりは 企業向けの内容 で、コスト削減のテクニック」や「ツールノウハウ」や「データの保護」、「業務で気にして欲しいこと」などをまとめていきます。

上級編の最初にお伝えするのは完成したアプリやライブラリの保護についてですshine
体験版だったり、期限を設けてバージョンアップを強制するなど色々と 販売商品には工夫をする必要 があります。
ライセンスファイル認証 でも アカウント認証 でも良いので実装します。
と言うのも、 無制限に利用し続けられるのは危険度が高いので避けるべき ですsign01
古いバージョンで動かないって言われてももう直しましたって言うバグもあるわけなのでcoldsweats01

WPFだけでなく.Net Frameworkを利用したマネージコードは組みやすい代わりにかなりの安全面に問題 がありますshock
マネージコードはコンパイル後にMSILやCILと言う中間言語に変換 されますmemo
このIL言語は組み直すことで処理を改変・編集することが出来てしまいます thunder
どういうことになるかと言うと、 ライセンス認証起動期限などを付けたとしても その判定処理自体を削除 してしまえば 無効化 できる のですcrying
ツールを自由に利用できるだけでなく、ソースコードの中身も読み取れるのでどのような実装をしているかもわかってしまうのですheart03
たくさんのノウハウを自らばらまいているということになりますsad
ソースコードを読めるならそのまま利用して他のアプリを作ることだって出来てしまうのですdown

販売する商品がそんなのであったら・・・danger
本当に、おそろしい・・・sweat02

具体的に中身が見えているところをお見せしようeye

おとは@開発隊長さんの投稿画像
これは ILSpy と言うフリーのソフトを利用しています。
私のWPFの講座の第11章で作成した実行ファイルWPF_Sample_06.exeを読込した際の情報が表示されています。
関数の中身が丸見えでしょ・・・eye

アプリを販売するなら、この 真っ裸のままじゃ怖すぎるので難読化を行う必要 がありますsign01
難読かアプリは10種類以上も出ており、10万~20万程度のものが主流のようですdash
Visual Studioに付属(機能制限版)のDotfuscatorも20万ほどしますsign03
予算がある企業なら実績のあアプリを使って難読化することをお勧め します。

今回、この講座においてわたしが個人と言うこともあるのと、 ライブラリやアプリを販売することも検討しているので数万円程度で購入できるdollarアプリ を探すことにしました。
日本製やフリーの物など5種類ほど試したところで、ライセンス形式によりますが2~3万程度で購入できる
.Net Reactor を紹介します。

おとは@開発隊長さんの投稿画像
まずは、 検証も兼ねて体験版を利用 してみました。
英語版と言うことで敷居は高めですが、 出来ることはかなり多い ですね。
数10万する他のソフトよりも安くて機能が多いのがウリ のようですflair

実際、16項目をあげて.Net Reactorは15.5の機能がありますが他の比較されている高額製品は10ほどの機能と差が付いています。(本家サイトの情報元 -> http://www.eziriz.com/comparison.htm

.Net Reactorで先ほどの実行ファイルに保護をして みましたshadow
おとは@開発隊長さんの投稿画像
読み取り不可能になっていますdanger
中間言語のIL自体を削除することが機能としてあるので読み取りが出来なくなるのですnote

他の製品はアプリが起動しなくなる問題があったり使い物になりませんでしたが .Net Reactorは問題なし
体験版のままだとアプリ起動時に警告メッセージが表示されるので 無償利用はできない です。

販売する自社製品は大事 に扱いましょうsign03


投稿者

おとは@開発隊長  

カテゴリー

C#言語

タグ

Windows C# WPF
  • Yahoo!ブックマークに登録
  • このエントリーをはてなブックマークに追加

高度なユーザーインターフェース

投稿日時 2015/02/15 21:03:11

ゲストさん、こんにちはhappy01

高級アプリ製作の極意 ~WPF編~のお部屋へようこそ。
このお部屋では 第11章 の「 高度なユーザーインターフェース 」についてお話したいと思います。

高度なユーザーインターフェースは、TextBlockTextBoxButtonをはじめとするWPFで最初から用意されているコントロールを基本のウィンドウに貼り付けるのは変わりません sign03
ただ、 共通のUIというものは設計のうちで出てくる ことがありますwink
そんなときに、共通の見た目、挙動をするUIの処理をその都度コピー&ペーストして作成しますかsign02
作業効率を上げたいのにソースのコピー&ペーストをしていたら処理の変更を行う時に大変ですcoldsweats01

そこで、 利用するのがユーザーコントロール と言う機能ですnote
簡単に行ってしまえば共通の見た目、共通の処理を定義したコントロールですwrench
基本のウィンドウとは別のユーザーコントロールにUIを実装していきます。
実装したユーザーコントロールを基本のウィンドウに貼り付ければ共通化完了ですgood

sharp ユーザコントロールの追加
プロジェクトを作成したら基本のウィンドウ(MainWindow.xaml)はほっといてユーザーコントロールを作成していきますrun
おとは@開発隊長さんの投稿画像

名前を決めて追加しましょうshine
おとは@開発隊長さんの投稿画像

1度コンパイルを行えばツールボックスに追加 されますsoon
danger自動でツールボックスに反映するにはVisual Studioの設定が必要です。
(本お部屋の一番したに設定方法を記載しています)
おとは@開発隊長さんの投稿画像

作成したユーザーコントロールを基本のウィンドウに貼り付けますclip
おとは@開発隊長さんの投稿画像

pen サンプルの説明
サンプルでは 貼りつけたユーザーコントロールが別々の動きをする (それぞれの状態が保持される)ことを分かりやすくするためにタブコントロールを用意して3つのタブにそれぞれ作成したユーザーコントロールを貼りつけました dash
おとは@開発隊長さんの投稿画像
TextBoxとButtonは以前にもお伝えしたBindingでメッセージボックス出しています。
今回ちょっと新しいのは TreeViewとListBoxにBindingを利用 しているのと 独自定義したクラスでTemplate表示 を行っているところです。
また、 GridSplitterによるコントロールの幅の簡易調整機能 を設けてみました。
Tempalate表示を利用することでより高度な表示が出来る ようになります。
今回のサンプルだとチェックボックスとテキストを並べて表示してます。

サンプルを動かしてもらった方が早いのでどぞっhappy01

clip サンプルのダウンロード
 

wrench 自動My UserControl追加設定の手順
コンパイル後にツールボックス内に自作ユーザーコントロールを自動で表示する方法をお伝えします。
Visual Studioの「ツール (T)」から「オプション (O)...」を選びます。
おとは@開発隊長さんの投稿画像
Windowsフォームデザイナーから「ツールボックスを自動取得する」を選んでVisual Studioを再起動しますon


これであなたも、 高度なUIを1度だけ作成するだけで 色んなアプリに再利用できて スト激減になること間違いなし ですっscissors


投稿者

おとは@開発隊長  

カテゴリー

C#言語

タグ

Windows C# WPF
  • Yahoo!ブックマークに登録
  • このエントリーをはてなブックマークに追加

WPFアプリとフォームアプリの違い

投稿日時 2015/02/08 21:08:00

ゲストさん、こんにちはhappy01

高級アプリ製作の極意 ~WPF編~のお部屋へようこそ。
このお部屋では 番外編 の「 WPFアプリとフォームアプリの違い 」についてお話したいと思います。
WPFの強いところ、素晴らしいところはゲストさんもご存じの通り、 XAMLのマークアップ言語による高度なUIの実現プログラムとの連動 です。
一昔前、WPFが導入される前からあった.Net Frameworkで動作するGUIのアプリ作成方法。
それが、フォームアプリです。

フォームアプリはWPFと違ってマークアップ言語はありません
簡単にまとめれば、 すべてC#言語のプログラムで書いている ことに違いはありません。
Visual StudioにGUIを作成するための補助機能があってプログラムを書いてUIを作成しているようには思えないのですが実際その通りなのです。
フォームもWPFも同じく .Net Frameworkを使用して開発するアプリなのに大きく差 があります。

eye WPFで作成したアプリの見た目

おとは@開発隊長さんの投稿画像
ボタンの見た目背景色など 作成者の思考や趣味が具体的に反映 されるUIですnote
ゴージャスcrown にもチープgawk にも見た目を変えられる点はフォームでの実現はかなり難しいですng

clip サンプルダウンロード  
 


eye  フォームで作成したアプリの見た目

おとは@開発隊長さんの投稿画像
べ、別にさぼりたくてさぼったわけじゃ・・・ないんだからねっ sweat01
どうあがいてもシンプル is the ベストと言う言葉でごまかすしかない見た目ですねrun

フォームアプリを製作している時のVisual Studioの画面です。
おとは@開発隊長さんの投稿画像
WPFのXAMLに近いファイルがありましてそれがForm1.Designer.cs と言うファイルです。
完全にC#言語のファイルになっています。
このファイルを見ると、1行ずつ書くUIの表示位置だったり詳細設定だったりが記載されていますcoldsweats01
Visual Studioの補助機能で自動でプログラムが生成されているということになりますdash

clip サンプルダウンロード
 


投稿者

おとは@開発隊長  

カテゴリー

C#言語

タグ

Windows C# WPF Form
  • Yahoo!ブックマークに登録
  • このエントリーをはてなブックマークに追加

外部ライブラリの利用

投稿日時 2015/02/08 15:17:07

ゲストさん、こんにちはhappy01

高級アプリ製作の極意 ~WPF編~のお部屋へようこそ。
このお部屋では 第10章 の「 外部ライブラリの利用 」についてお話したいと思います。
外部ライブラリの参照方法としては主に2つの方法 があります。
その2つは「 DLLを直接参照してプロジェクト全体で使用できるようにする方法 」と「 DLLから特定の関数のみを参照して利用する方法 」です。
その他、「DLLをプログラム上から実行時に動的に読込する」などもありますがより高度なので今回は割愛します。

clip DLLまるごと参照する
直接プログラム内で外部のDLLを指定して関数レベルで参照を行う方法を紹介しますnote
DLLのまるごと参照を行うためには .Net Frameworkで作成されたDLLであることが必須 です。
参照を追加した際に追加出来なければ.Net Frameworkで生成されたものではありません。
おとは@開発隊長さんの投稿画像
プロジェクト内ではないので外部から参照ウィンドウを使ってDLLを追加しますwrench
追加後は参照チェックをつけ忘れないようにご注意くださいsweat01

おとは@開発隊長さんの投稿画像
参照設定が完了したらusingで名前空間を指定するかプログラムに直接書いて使用しましょうshine

wrench サンプルダウンロード


このサンプルは以前、「おとは製 WPFミニアプリの紹介」でも紹介したウェブカメラを操作するアプリですsign01
DirectX系の機能の一つDirectShowの.Net Frameworkのライブラリを使っていますmovie


clip 関数レベルで外部DLLを参照する
直接プログラム内で外部のDLLを指定して関数レベルで参照を行う方法を紹介しますhappy02

おとは@開発隊長さんの投稿画像
DllImportの命令を使用して参照するDLL名を指定すると共に参照したい関数を次の行に記述しますwink
使用できる関数はC言語の関数でも利用できるところがうれしいところですねhappy01
この書き方はC#言語と言うより C言語の書き方になりますので安全性が落ちる点はお気をつけて 使ってねdanger

wrench サンプルダウンロード


今回のサンプルは2年前に作成したアプリですscissors
カテゴリー別に分けて登録してある顔文字を選んでブログなどで貼りつけるためのアプリですart
おとは の常用アプリの一つですnote

データバインディングを利用している点も見て頂きたいところですsign03
高度なインターフェースを利用しているのですが、UIそれぞれの説明は次回をお楽しみに。
おとは@開発隊長さんの投稿画像
 


投稿者

おとは@開発隊長  

カテゴリー

C#言語

タグ

Windows C# WPF
  • Yahoo!ブックマークに登録
  • このエントリーをはてなブックマークに追加

マークアップ言語でコスト削減

投稿日時 2015/02/08 14:11:24

ゲストさん、こんにちはhappy01

高級アプリ製作の極意 ~WPF編~のお部屋へようこそ。
このお部屋では 第9章 の「 マークアップ言語でコスト削減 」についてお話したいと思います。

今回は WPFの一番の肝になるところ 高級アプリ製作においてはしっかりと習得 して頂く必要がありますsign03
これが出来ないとしょぼいアプリ製作しか出来なくなります weep
・・・と言うのはやりすぎですが かなりのプログラミング時間を増加 させることになります。

タイトルは プログラムの削減としてプログラム時間を少なくするかのように書いてはいますが、増やさないのが今回の目的 なのです。
WPFではなく フォームアプリでプログラミングしたことがある人はどれだけの差があるか理解して頂ける はずです。

おとは@開発隊長さんの投稿画像
one 外部リソースをXAMLで使用する際にしてするための記述です。
two 外部リソースをXAMLに埋め込みする際の記述です。
three  超重要sign03   データバインディングと言うプログラムと連動させるための指定 です。

おとは@開発隊長さんの投稿画像
one  プログラムに記述したプロパティの変数名とXAMLで連動する名前を一致させます。
two  外部からのアクセスが行えるようにpublic修飾子で外部公開します。
 また、直接書き換えが可能になるようにgetとsetの権限を与えます。

three 直接書き換え用のプロパティは自ら初期化が必要なのでコンストラクタで初期値を入れています。
four MainWindowのDataContextに自分自身のインスタンスをしていします。
 これによりそれぞれのUIがMainWindowのインスタンスを知ることが出来ます。
five メンバ変数をメッセージボックスで表示しています。

clip サンプルダウンロード


サンプルを実行してみましょう。
おとは@開発隊長さんの投稿画像
リソースで指定した文字がUIで表示されていますねhappy01

おとは@開発隊長さんの投稿画像
テキストボックスの内容を書き換えて表示ボタンを押すとメッセージボックスに書き換えた内容が表示されるようになっていますshine
プログラム内で定義した propMainText と言う文字列の プロパティがXAMLとプログラム共通の変数となりどちらからでも読み書きできるようになっている でほとんどプログラムを書かずにUI処理が出来ます
 


投稿者

おとは@開発隊長  

カテゴリー

C#言語

タグ

Windows C# WPF
  • Yahoo!ブックマークに登録
  • このエントリーをはてなブックマークに追加

ページ切り替え


ページビューカウンター
145153
ウェブページ
+ハードウェア編
+ソフトウェア編
+ノウハウ・技能編
+道具・雑貨編
+初級編
+中級編
+上級編
+番外編
+初級編
+中級編
フリースペース
☆ハイレゾ音源☆

☆お絵かきするなら☆

☆カスタムPC☆

ギャラリー
カテゴリー
ほびぃ~
くりえいてぃぶ
電子回路 (14)
ぷろぐらみんぐ
C#言語 (21)
C++言語 (4)
PHP言語 (3)
あいてぃー・こんぴゅーた
ぷろふぇっしょなる
全般 (16)
れびゅー
お気に入りたぐ
ツイッター
お問合わせ
ぶろぐ管理者にお問合わせしたい時は専用フォームから連絡が行えます。


  • ipv6 ready
Blogle Storeet Core System v2.0a
おとはうぇぶあぷりぶ (IPv4) v2.6a
Copyright (C) 2014-2018 Blogle Storeet Development Team.