ObjeqtNote #34 ウィンドウリストアイテムズパネルのリサイズ

ウィンドウリストアイテムズパネルは、アイテムが増えるごとにリサイズして大きくなっていく。 メインメニューの"開く"をクリックしたら、リサイズする処理を実装する。WindowListControl.hに、 挿入メンバ関数Insertを追加する。WindowListControl.cppで、 …

ObjeqtNote #33 ウィンドウリストアイテムズパネルの定義

ウィンドウリストコントロールの中には、ウィンドウリストアイテムズパネルを配置する。まず、resource.hで、 リソースIDを定義。WindowListItemsPanel.hを追加し、 こちらもユーザコントロール。 ペンやブラシのハンドル、RegisterClass、コンストラクタ、…

ObjeqtNote #32 ウィンドウ破棄時の処理&わかりやすいように背景に色を付ける

そろそろウィンドウ破棄時の処理を実装する。 また、それぞれの子ウィンドウがわかりやすいように背景に色を付ける。Window.hで、 DestroyとOnCloseを追加。Window.cppで、 Destroyでは、このウィンドウ自身をDestroyWindowで破棄。 OnCloseでは、Destroyを…

ObjeqtNote #31 ウィンドウリストコントロールの定義

いよいよ、ウィンドウリストコントロールを実装する。 本格的にウィンドウリストコントロールを使うのは、VizCommandだが、ObjeqtNoteでも使う可能性があるので、まずはこちらで実装する。まず、resource.hに、 ウィンドウリストコントロールのリソースIDを…

ObjeqtNote #30 InvalidateRectで更新することで簡単にスクロール描画

ScrollWindowだと、思ったような描画ができないので、InvalidateRectで更新を要求し、OnPaintで描画していくようにした。PictureBox.hは、 レンジをコメントアウトしておく。PictureBox.cppでは、 SetImageで画像をセットしたら、スクロールバーの位置m_iHSc…

ObjeqtNote #29 ScrollWindowで下にスクロールできたが様々な問題が発生

下にスクロールすると、画像が上に移動するようにしていく。PictureBox.cppのOnPaintで、 iDrawWidth、iDrawHeightが描画する幅と高さ。 そして、m_ScrollInfo.nPosが増えるたびに、上にずれていくので描画する領域は減っていく。 そして、新たに下から出て…

ObjeqtNote #28 垂直方向スクロールバーの動作

垂直方向についても実装する。PictureBox.cppのCPictureBox::OnVScrollで、 OnHScrollと同様にそれぞれの操作に対する処理を書く。下に動かしても止まるので、ちゃんと上手くいっている。・垂直方向スクロールバーの動作 · bg1bgst333/ObjeqtNote@3376781 · …

ObjeqtNote #27 水平方向スクロールバーの動作

水平方向のスクロールバーを制御する処理を実装する。Window.hでは、 OnHScroll、OnVScrollを追加。Window.cppでは、 WM_HSCROLLでOnHScroll、WM_VSCROLLでOnVScrollを呼ぶ。 OnHScroll、OnVScrollには何も定義しない。CustomControl.cppでは、 こちらでも、…

ObjeqtNote #26 ビットマップをピクチャーボックスのサイズにカットして表示

ビットマップが大きいと、ピクチャーボックスが拡大して表示する。 しかし、今回は、ピクチャーボックスのサイズにカットして表示する。まず、Window.hで、 OnPaintを追加する。Window.cppでは、 WM_PAINTでOnPaintを呼ぶ。 OnPaintの定義では、特にここでは…

BIO_write

今度は、BIO_writeでPUTリクエストを書き込み、ファイルをアップロードする。bio_write(3): BIO I/O functions - Linux man pageBIO_write.cで、bgstation0.comの下にshareフォルダを作って、そこにtest.txtをPUTする。 test.txtは、 ABCDE XYZ という文字列…

BIO_read

コネクションの接続ができたら、BIO_writeで接続先にリクエストを書き込み、BIO_readで接続先からレスポンスを読み込む。bio_read(3): BIO I/O functions - Linux man pageBIO_read.cで、bgstation0.comのindex.htmlをGETするリクエスト文字列request_strを…

ObjeqtNote #25 ピクチャーボックスを作成して画像を表示

ピクチャーボックスを作成して、ビットマップ画像を表示する。PictureBox.hを追加して、 CCustomControlの派生クラス、CPictureBoxを定義。 メンバ変数はビットマップハンドルm_hBitmap、メンバ関数はCreate、Load、SetImageの3つ。PictureBox.cppは、 Creat…

BIO_do_connect

接続できたかどうかは、BIO_do_connectで確認する。Manual:BIO s connect(3) - OpenSSLWikiBIO_do_connect.cで、BIO_new_connectでコネクション作成したら、BIO_do_connectを呼んで、真なら成功。 (今回はポートを80に戻してる。443でもできたけど。) $ vi B…

ObjeqtNote #24 選択したファイルの拡張子を取得する

久しぶりのObjeqtNoteの修正。 スタティックなGetOpenFileNameを実装して、選択したファイルの拡張子を取得する。BinaryFile.hで、 シェルAPIを使うので、shlwapi.hを追加する。リンクにも追加する。 staticなpublicメンバGetOpenFileNameを追加で定義。Bina…

BIO_new_connect

libjpeg以来のオープンソース編・・・。OpenSSLは、SSL通信を実現するためのオープンソースライブラリ・・・。/index.htmlまずは非セキュアな接続から始めてみる・・・。今回は、OpenSSL API によるセキュア・プログラミング: 第 1 回 API の概要を参考に、B…

yield

C#

前回、IEnumeratorを継承したオブジェクトを作ってGetEnumeratorで返すことで、foreachによるアクセスを可能にした。 しかし、いちいちオブジェクトを作るのも大変・・・。GetEnumerator内で、要素ごとにyield returnすれば、その要素を持つ仮想のコレクショ…

IEnumerator

前回は、配列が持っているGetEnumeratorメソッドでIEnumeratorを返すことができた・・・。IEnumerator インターフェイス (System.Collections)IEnumeratorは、C++でいうイテレータで、コレクションの次の要素の取出しをするためのインターフェイス・・・。今…

IEnumerable

配列やリストなどのコレクションクラスは、foreachを使って、各要素を取り出すことができた・・・。 では、foreachで各要素を取り出せるようなコレクションクラスを作るにはどうしたらいいか・・・。 そのクラスにIEnumerableインターフェイスを実装すればい…

Array

配列も1つのオブジェクトであり、すべての配列はArrayクラスを継承している・・・。Array クラス (System)配列がArrayクラスの派生であることの確認と、Arrayが持つプロパティLengthで配列のサイズを取得する・・・。intArray.GetType().ToString()で型名を…

String

Stringクラスは、エイリアスであるstring型の実体・・・。String クラス (System)Stringとstringが同じかどうかの確認・・・。 また、IndexOfメソッドで指定の文字が何番目にあるかをチェック・・・。strTypeに"ABC"、strClassに"XYZ"をセット・・・。 (クラ…

Int32

Int32構造体は、エイリアスであるint型の実体・・・。Int32 構造体 (System)Int32とintが同じかどうかの確認・・・。 また、Parseメソッドで文字列を数値にパース・・・。intTypeに10、intStructに100を代入・・・。 ここで値を設定したインスタンスが出来て…

構造体

C#

C#では、クラスは参照型、構造体は値型という大きな違いがある・・・。TestClass.csを、 // 名前空間の登録 using System; // 共通データ型と基本クラス(System名前空間) // 文字列を持つクラス class TestClass // TestClassクラスの定義 { // メンバフィー…

構造体

C++

C++にも構造体があるが、クラスとの違いで代表的なのは、クラスのデフォルトのメンバアクセスがprivateなのに対し、構造体のデフォルトのメンバアクセスがpublicであること・・・。struct_test.hで、アクセス指定子を付けずにメンバを用意・・・。 (C++では…

Object

これまでも出てきたobject型は、その正体はObjectクラスのエイリアスであり、すべての.NET Frameworkクラスの基底となるクラスである・・・。Object クラス (System)C#に出てくる型は、実体はCTSで定義されたクラスや構造体のエイリアス・・・。CTS 型Object…

新しいデリゲート

C#

C# 2.0から、新しいデリゲートの書き方が可能になり、メソッド名をそのまま左辺に持ってくることが可能になった・・・。 <デリゲート型名> <デリゲートオブジェクト> = <呼び出すメソッド名>; これまで、 // 名前空間の登録 using System; // 共通データ型と…

匿名メソッド

C#

これまで、デリゲートオブジェクトにメソッドを格納する形で、さまざまな場所でそのメソッドを呼ぶことができた・・・。 しかし、メソッド自体は、デリゲートの条件に合う引数型と戻り値型で名前の付いたメソッドをきちんと定義しないといけなかった・・・。…

Control.BeginInvoke

ButtonやTextBoxなどの基底クラスとなるControlクラスにも、BeginInvokeはある・・・。Control.BeginInvoke メソッド (Delegate) (System.Windows.Forms)これも非同期処理に関するものだが、C#コンパイラの用意するBeginInvokeとはちょっと違い、非同期処理…

AsyncResult

これまでは、BeginInvokeで非同期処理を実行してから、EndInvokeで非同期処理が終わるのを待っていた・・・。 しかし、これだと同期的に処理している事と変わらない・・・。 BeginInvokeで非同期処理を実行した後も、Mainは先の処理を進めつつ、一方で非同期…

AsyncCallback

AsyncCallbackデリゲートに、非同期処理完了後に呼び出すメソッドを指定できる・・・。AsyncCallback デリゲート (System)まず、デリゲートの生成から・・・。非同期処理で実行するasyncronousFunc、非同期処理完了後に呼び出すcallbackを生成・・・。Asyncr…

IAsyncResult

IAsyncResultを使って、実行している非同期処理の状態を取得できる・・・。IAsyncResult インターフェイス (System)今回は、IAsyncResult.IsCompletedで非同期処理が完了しているかを1秒毎に確認する・・・。今回は、引数も戻り値もないAsyncronousFuncDeleg…

EndInvoke

C#

EndInvokeでは、非同期処理メソッドの戻り値を受け取ることができるし、参照渡しで受け取ることもできる・・・。今回は、2つの値の足し算を非同期処理でさせて、結果を取得する・・・。今回のAsyncronousFuncDelegateは、引数にint型のa, bとint型の参照渡し…

BeginInvoke

C#

ThreadやThreadPoolを使わなくても、デリゲートで非同期処理が実行できる・・・。 (実際には内部でThreadPoolを使っているのだが・・・。)Calling Synchronous Methods Asynchronouslydelegate型を定義すると、C#コンパイラが自動でBeginInvoke、EndInvokeな…

ThreadPool.QueueUserWorkItem

ThreadPool.QueueUserWorkItemの2番目の引数には、実行するThreadFuncに渡すためのパラメータを指定できる・・・。ThreadPool.QueueUserWorkItem メソッド (WaitCallback, Object) (System.Threading)ワークアイテムに番号を振る・・・。こんな感じで、1~3…

ThreadPool

一定量のスレッドを準備しておき、キューに登録したワークアイテム(実行したい処理(タスク))にそれぞれ割り当てて、終わった後も再び使いまわせるような仕組みをスレッドプールという・・・。ThreadPoolは、そのスレッドプールを扱うクラス・・・。ThreadPoo…

Thread.Sleep

スレッドを一時的に止めるには、Thread.Sleepに休止する時間をミリ秒で指定する・・・。Thread.Sleep メソッド (Int32) (System.Threading)前回の"Main~"や"Thread~"を1つ出力するたびに1秒停止というのを繰り返す・・・。こんな感じで、MainもThreadFunc…

Thread

Threadはスレッドを扱うクラス・・・。Thread クラス (System.Threading)別スレッドを生成して、重たい処理などを任せるときに使う・・・。 といっても、現在は非同期処理が充実してるのでこれを使うことはほとんど無いだろう・・・。空で、Systemを追加・・…

Process

Processは、プロセスを扱うクラス・・・。Process クラス (System.Diagnostics)Process.Startで指定のアプリケーションを実行する・・・。空で、MainClass.csを追加したら、Systemを追加・・・。Systemに加えて、System.Diagnosticsのusingを追加・・・。 Pr…

ServiceBase

ServiceBaseは、サービスプログラムの基底となるクラス・・・。ServiceBase クラス (System.ServiceProcess)簡単なサービスを作成する・・・。空のプロジェクトで、MainClass.csを追加・・・。参照でSystem.ServiceProcessを追加・・・。イベントログを出力…

IpcServerChannel

IpcServerChannelは、IPCというプロセス間通信のサーバチャンネルを開くためのクラス・・・。IpcServerChannel クラス (System.Runtime.Remoting.Channels.Ipc)IPCサーバとIPCクライアント間でIPCプロセス間通信をしてみる・・・。今回はWindowsアプリケーシ…

EventLog

EventLogは、イベントログを出力するクラス・・・。EventLog クラス (System.Diagnostics)イベントログを出力してみる・・・。空のプロジェクトで、Systemを参照し、MainClass.csは、これだけ・・・。 "EventLog_"がイベントソースで、ログが"Log Message!"…

NetworkInterface

NetworkInterfaceは、ネットワークインターフェイスに関する情報を持つクラス・・・。NetworkInterface クラス (System.Net.NetworkInformation)ネットワークインターフェイスの名前一覧を出力する・・・。空の場合は、Systemを参照し、usingではSystem.Net.…

RasEntryDlg

RasEntryDlgは、VPNやダイアルアップ接続エントリーの作成・編集ダイアログを表示する・・・。RasEntryDlg 関数今回は、VPN接続のためにRasEntryDlgで電話帳エントリーの作成を行う・・・。今回はWin32プロジェクト・・・。RasEntryDlg.cppを追加したら、ras…

ServiceMain

今回はWindowsのシステムサービスを作る・・・。ServiceMainは、このサービスのメイン処理を担う部分・・・。ServiceMain 関数まず、コンソールアプリケーションで作成・・・。 (Win32プロジェクトでもできるが、コンソールアプリだと疑似サービスを作成して…

CreateNamedPipe

Windowsで名前付きパイプを作成するには、CreateNamedPipeを使う・・・。CreateNamedPipe 関数名前なしパイプと比べると、あそこまで大変ではない・・・。CreateNamedPipeプロジェクトにCreateNamedPipe.cppを追加し、CreateNamedPipeで"\\.\pipe\TEST"とい…

CreatePipe

Windowsで名前なしパイプを作成するには、CreatePipeを使う・・・。CreatePipe 関数WindowsAPIにはforkが無いし、パイプの扱い方もUNIXとは違うので、パイプによるプロセス間通信の実装は結構難しい・・・。C言語CreatePipeメモ(Hishidama's Windows C "Crea…

mkfifo

mkfifoは、名前付きパイプを作成する・・・。Man page of MKFIFO親プロセスと子プロセスの関係なら、forkでpipeを共有できるが、全く関係ない2つ以上のプロセス間で通信する場合は、名前付きパイプを使う・・・。 名前付きパイプはファイルのようなもので、l…

ReportEvent

ReportEventは、イベントログにメッセージを書き込む・・・。ReportEvent 関数イベントログの出力はちゃんとやろうとすると結構面倒なので、今回は割と単純にログ出力するだけ・・・。まず、TCHAR *型の文字列バッファポインタptszTextを宣言し、newでメモリ…

RegCreateKey

RegCreateKeyは、指定のレジストリキー(regedit.exeで見るとフォルダの部分)を作成する・・・。RegCreateKey 関数 RegCreateKey function (Windows)互換性のために残されているだけなので、RegCreateKeyExを推奨するが、とりあえずキーを作成してみる・・・。…

WlanEnumInterfaces

WiFi関連の操作をしたい場合は、Native WiFi APIを使う・・・。Native Wifi (Windows) Wireless LAN API - 目次 - 汁ごはん中でも、WlanEnumInterfacesは、無線LANインターフェース情報の一覧を列挙する・・・。 (Windows XP3からなので、場合によってはWind…

GetInterfaceInfo

ネットワークインターフェース情報を取得するには、IPヘルパーAPI(iphlpapi.lib)を使う・・・。 GetInterfaceInfoは、ネットワークインターフェースを取得する・・・。GetInterfaceInfo function (Windows)といっても、これはインタフェースの名前とインデッ…