C#

HID情報を入手する - C#でTOUCHINPUTを使う

C#

さて、前回MFCでWM_TOUCHとGetTouchInputInfoを使ってタッチパネルの情報を取得したのだが、MFCよりはC#で書いた方が、あとでいろいろといじりやすい。 今回は、必要なAPIをインポートしてC#で同様の実装をしてみる。 Visual StudioでC#のフォームのスケルト…

BitmapをJPEGで画質を指定して保存する

C#

さてJPEG、知っている方には言わずもがな、圧縮率と画質の間にトレードオフがある。 ちょっと気の利いた画像加工ソフトや、デジタル一眼のRAW現像ソフトなどでは、JPEG保存を指定するときに画質の指定ができる。 これが.net FrameworkのBitmapクラスでも実装…

Bitmapを保存する

C#

C#のBitmapクラスはとてもよくできている。 なんでも「バチこい!」で取り込んでくれるわ、好きなように切り貼りできるわ、でもって好きなフォーマットで保存できる. Bitmap bmpFromFile = new Bitmap(strSrcFilename); bmpFromFile.Save(strDistFilename, S…

Formに画像を表示する

C#

Formに画像を表示する方法はいろいろあるのだが、一番簡単なのはFormの背景(Backgroundimage)にしてしまうことだ。 Form appを作る Visual Studioを開き、New Projectを作る、名前は"DLLTestForm" Formにドラッグ&ドロップを出来るようにする Form1を開き、…

MFCでDLLをつくり、それをC#から呼ぶ(復習)

Form appを作る Visual Studioを開き、New Projectを作る、ダイアログで"Visual C#" -> "Windows Form Applicattion"を選択し、名前は"DLLTestForm" MFC DLLプロジェクトをソリューションに追加する Solution Explorerで"Solution 'DLLTesForm'"を右クリック…

Visual Studioのスキンの色の変更方法

Tools -> Options -> Environment -> General -> Color Theme 背景が暗いほうが昔のグリーンディスプレイぽくってよいので、筆者は"Dark"がお気に入り。

C#で構造体その2

C#

これについての考察。 C#では構造体は値渡しである。 しかし、この例では配列を設定している。 これは参照渡し、もしくはポインタ渡しでないとできないはずだ。 と思い、知られべて見たらこちら。 http://smdn.jp/programming/netfx/struct/3_arrayfields/ …

マウスでお遊び

C#

マウスの座標を取得する(グローバルな座標) System.Windows.Forms.Cursor.Positionフォーム内の座標が取りたい場合には、 System.Drawing.Point pointMouse = this.PointToClient(System.Windows.Forms.Cursor.Position); フォームの座標 this.Locationこれ…

C#で構造体

C#

お仕事でCのプロジェクトの構造体をC#で使いまわす必要があったのでメモ。 いくつかの違い。 インスタントするのにコンストラクタが必要、Cのように配列でインスタントはできない 構造体メンバに配列がある場合には、その配列をインスタントすることも必要、…

加速度計で遊ぶその2

さすがにシリアルコンソールに数字が表示されるだけでは寂しいので、ちょっと改造をした。 Arduino側をまずバイナリーで出力するようにする。 void loop() { for(count = 0; count { SensorOutputADC[ count ] = analogRead( inputAnalogPin[ count ] ); byt…

参照渡し

C#

C#で参照渡しをしたいときにはキーワードrefをつける。 void aho() { int hoge; boke(ref hoge); } void boke(ref int hogehoge) { hogehoge += hogehoge; }ただし 構造体は値型なので、refをつけないと値渡しとなる(この例、intやdouble、structやenumもそ…

Task(またの名をすっどれ)

C#

今日はC#ですっどれを使う練習。 すっどれと言っても、2chのあれではない(このネタは前にもやったが)。 1つのプログラムで、あたかも複数のプロセスが同時・並列処理されるように見える、あれだ。 最近の高度なフレームワーク(.netやJVMなど)では、いちいち…

シリアルポートの制御

C#

頼まれ趣味プロで、シリアルポートの制御Appを作ることになった。 以前MFCで書いたときには、各IOピンを直接たたく必要があったため、Windows2000以降で直接I/Oにアクセスすることができないの壁にぶつかったりと、なかなか苦労した。 今回はただのシリアル…

C#のdelegate

C#

ある趣味プロでC#のdelegateを初めてまともに使うことになったので、メモ。 誤解を恐れずにいえば、C#におけるdelegateは、非同期通信を利用するためのものだ。 例えば、ワーカースレッドから親スレッドのメソッドを呼び出したい場合や、複数のイベントハン…

モードレスダイアログを表示する

C#

Form formMessage = new Form(); formMessage.Show();表示したダイアログを消すのには、 formMessage.Close()

Formのボタンを表示しない

C#

Formのプロパティの"ControlBox"をFalseにする。 こうすると、最大化・最小化ボタン、アイコン化ボタン、クローズボタンが表示されなくなる。 MessageDialogとしてフォームを使う時に便利。

Graphicsで画像をTiling(並べて)で貼り付ける呪文

C#

TextureBrush texturebrushBMPTiling = new TextureBrush(bmpImageFromResource); gfxOffscreen.FillRectangle(texturebrushBMPTiling, 0, 0, ClientRectangle.Width, ClientRectangle.Height);

オフスクリーン描画

C#

お次は、オフスクリーン描画である。 Form上に画像を描く場合、Paintイベントハンドラを実装する。 private void onFormAhoPaint(object sender, PaintEventArgs e) { e.Graphics.(適当に画像を描くメソッド); }ただ、このままだと表示メモリに直接描くこと…

画像をリソースとしてプロジェクトに取り込み、表示する

C#

以前作ったテストパターン表示ソフトの最適化、リファクタリングを始めた。 最初に作ったときには、時間優先で幾何学的な表示パターンを全てその場で計算して描いていたのだが、これだと描画に時間が掛かる。 周期的なパターンについては、事前にリソースと…

アプリケーションのアイコンを指定する

C#

Solution Explorerで、現在のプロジェクトを右クリックして"Properties" -> Icon and manifestで"Icon"のファイルを指定、bmpなどから作成したい場合には@icon変換などがお勧め。

PictureBoxいろいろ

C#

こちらはまだ新年ではないので、新年そうそうやっているわけではない、暮れの押し詰まった日にやっているのだ。 で、何をやっているのかといえばこれとかこれなどのwebマンガのビュワーを作っているのだ。 PictureBoxを画面の中心に、フォームのサイズ変更に…

AVIファイルの読み書き

C#

今回の課題は非圧縮のAVIファイルとのBitmapファイルのやり取りだ。 AForge.NETを利用する、http://www.aforgenet.com/、このブログを書いている時点で最新バージョンは2.2.5である。 準備 上記のサイトの"download"からzipファイルをダウンロード 適当なフ…

MFCで作ったDLLをC#で使用する(補足)

C#

過去に作ったDLLが、C#でエラーが発生して使用できないとお悩みの(筆者と同じ)貴兄に、もしDLLの宣言が int WINAPI DLL_Foo(...)となっている場合には、C#でimportする際に [DllImport("(DLLファイル名).dll", CallingConvention = CallingConvention.Winapi…

Formに配置したControlのサイズをFormの大きさに合わせて変える呪文

C#

buttonAho.Location = new Point(ClientSize.Width * 3 / 4, 0); buttonAho.Width = ClientSize.Width / 4;これをFormのLoadとSizeChangedのイベントハンドラに実装すれば吉。 LoadはFormをダブルクリックすると挿入されるよぅん。 (追記 on 20140303)SizeCh…

MFCで作ったDLLをC#で使用する

C#

今回のプロジェクトでは、まずC#で実装したフォームを利用して、過去の資産のDLLを使用することにした。 復習:DLLの作り方 Visual StudioでMFC DLLプロジェクトを新しく作成する 実装クラス(大概"プロジェクト名.cpp"になっているはず)に以下のようなエント…

新しいプロジェクト

先週末から新しいプロジェクトとして「(半分仕事)MFC: 画像処理フレームワーク、画像処理部をDLL化(外部公開可能にする)、解析用の2D-FFTとPSNR、MFC6からのポーティング」を始めたのだが、いろいろあって処理部をMFC DLL(C++)、UIはC#で書くことになった。 …

foreach

C#

foreachはC++にはない(おっと最近追加になったらしい)制御構文である。 forにも似ているのだが、ループカウンターを用意する必要がない。 こんな感じである。 int[] testArray = { 0, 1, 2, 3, 4 }; foreach (int output in testArray) { MessageBox.Show(st…

レジストリのアクセス

C#

Microsoft.Win32.RegistryKey regkeyHogehoge = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(stringHogehoge, false); string[] stringHogehogeSubKeyNames = regkeyEnumDisplay.GetSubKeyNames(); var SubKey0 = regkeyHogehoge.GetValue(string str…

C#Tipsいろいろ

C#

ComboBox ComboBoxを編集不可能にするのには"DropDownStyle"プロパティを"DropDownList"にする 選択の変更は"SelectedIndexChanged"のイベントハンドラに実装する ドロップダウンリストにアイテムを追加するためにはItem.Addメソッドを使用する 初期値などア…

C#とポインタ

C#

今回書いているEDIDリーダーは物としてはbinaryリーダーで、128バイトのEDID情報の各バイト(もしくは、複数バイト)を定義に従いそれぞれ意味合いの異なるデータとして解釈していく。 例えばこんな感じである、言語はC#である。 // EDIDHeader byteEDIDBuffer…

初めてのC#その5

C#

なかなか本題に入らず、C#の勉強ばかり。 今日はネットラジオの再生。 フォームにWindows Media Playerコンポネントを貼り付ける、標準では表示されないので、ツールボックスを右クリックし、"アイテムの選択"を選んで、"COMコンポネント"タブのWindows Medi…

初めてのC#その4

C#

またしてもC#関連だ。 KeyDownイベントではKeyEventArgsにKeyCodeやKeyData、KeyValueなどのプロパティが取得できるが、KeyPushイベントではKeyCharのみとなる。 F1-F12、ALT、INS、DELなどの特殊キーはKeyDownイベントは発生するが、KeyPushは発生しない。 …

初めてのC#その3

C#

ちょいと脱線して、.net frameworkを利用した、Windows Form Applicationの勉強中。 今日は、Drag & Dropの実装。 単に"DragDrop"のイベントハンドラーを実装するだけでは、NG。 フォームのプロパティで"AllowDrop"を"True"に フォームの"DragEnter"に以下を…

今日の教訓

C#

Image img = new Image.FromFile( "C:\\temp\\lena_std.jpg" );などとはできません。 やるなら、こうです。 Image img = Image.FromFile( "C:\\temp\\lena_std.jpg" );

初めてのC#その2

C#

久々の何もしなくてもよい日曜日、酒をあおりながらいそいそとコーディングにいそしむ、至福の一時。これからはじめるVisualC#2010作者: 木暮啓一出版社/メーカー: 秀和システム発売日: 2010/09/22メディア: 単行本 クリック: 4回この商品を含むブログ (3件)…

初めてのC#その1

C#

出張往路の機上で、いわゆる「初めてのC#・・・」系の本をほぼ通読。 誤解を承知で言えば、.net frameworkで参照で使う限りはC#もC++も変わらなくて、 (C#) Hoge aho = new Hoge(); で、メソッド・プロパティの呼び出しに aho.foo; を使うか (C++) Hoge^ aho …