VizCommand #36 viewコマンドで画像(ビットマップファイル)の表示

画像を表示するviewコマンドを実装する。

まず、WindowListItem.cppで、

OnCreateで、赤のペン、ブラシを、黒のペン、ブラシに変更。

Console.cppで、

"view"と入力されたら、SendMessageでUM_STREAMCOMMAND。

StreamConsole.hは、

OnViewを追加。

StreamConsole.cppは、

"view"でOnViewを呼ぶ。

OnViewで渡されたファイル名のビットマップファイルを、CPictureBoxを使ってLoadしてSetImage。

f:id:BG1:20170606153404p:plain

viewでtest1.bmpを表示。

f:id:BG1:20170606153542p:plain

表示できた。

f:id:BG1:20170606153623p:plain

マウスを右に持っていくと、隠れていたスクロールバーが姿を現す。

f:id:BG1:20170606153724p:plain

スクロールバーで下の方まで表示できる。

・viewコマンドで画像(ビットマップファイル)の表示 · bg1bgst333/VizCommand@7ee9bd7 · GitHub

VizCommand #35 walkコマンドでフォルダの移動

linuxコマンドのcdに相当するフォルダ移動コマンドwalkを実装する。

Console.hで、

Consoleオブジェクトが生成された時のデフォルトカレントパスとしてm_tstrDefaultCurrentPathを用意。
コンストラクタもtstrDefaultCurrentPathを引数に取るものを追加。
そしてOnWalkハンドラを追加。

Console.cppは、

コンストラクタでm_tstrDefaultCurrentPathにtstrDefaultCurrentPathを入れる。

OnCreateでは、pConsoleCore->SetCurrentPathでm_tstrDefaultCurrentPathをセットする。

OnConsoleCoreCommandで"walk"と入力されたらOnWalkを呼ぶようにする。

OnWalkでは、パラメータのtstrPathがなければ、pConsoleCore->GetMyDocumentPathでマイドキュメントのパスを取得してtstrPathに入れる。
tstrPathがある場合は、絶対パスに変換。
pConsoleCore->SetCurrentPathでtstrPathをカレントパスにセット。
pConsoleCore->GetOutputFormStringでフォーム文字列を更新して、UM_FINISHRESPONSEでレスポンス処理終了。

ConsoleCore.cppでは、

カレントパスが無い場合はマイドキュメントをカレントパスとするようにする。
つまり、カレントパスが指定されていたら、そのままにする。

StreamConsole.cppでは、

listの前のpConsoleCore->GetCurrentPathでカレントパスをtstrCurrentPathに保持しておき、listの後に挿入するCConsoleのコンストラクタにtstrCurrentPathを渡す。
これで新しいConsoleでもカレントパスが保持される。

f:id:BG1:20170606125558p:plain

walkにパラメータが無い場合は、

f:id:BG1:20170606125646p:plain

変わらない。

f:id:BG1:20170606125736p:plain

".."で、

f:id:BG1:20170606125800p:plain

上のフォルダに移動。

f:id:BG1:20170606125859p:plain

ここでパラメータ無しのwalkで、

f:id:BG1:20170606125930p:plain

マイドキュメントに戻ってきた。

f:id:BG1:20170606130006p:plain

testフォルダに移動。

f:id:BG1:20170606130031p:plain

testにきた。

f:id:BG1:20170606130314p:plain

ここでlistコマンドを打つと、

f:id:BG1:20170606130337p:plain

testフォルダの一覧を表示し、次のConsoleのカレントパスもtestになっている。

f:id:BG1:20170606130439p:plain

walkで上に移動。

f:id:BG1:20170606130510p:plain

listでマイドキュメント表示。

・walkコマンドでフォルダの移動 · bg1bgst333/VizCommand@9429b94 · GitHub

VizCommand #34 アイテムズパネルが大きくなるたびに自動的に下にスクロール

これまで、アイテムズパネルが大きくなってスクロールバーが出てきて、どんどんウィンドウリストアイテムが追加されていっても、下に自動でスクロールされることはなく、自分で下までスクロールしないといけなかったが、今回は自動スクロールに対応する。

resource.hに、

新しい独自メッセージUM_REQUESTSCROLLBOTTOMを追加。

StreamConsoleItemsPanel.hを追加し、

CWindowListItemsPanelの派生クラスとしてCStreamConsoleItemsPanelを定義し、OnSizeChildだけオーバーライド。

StreamConsoleItemsPanel.cppで、

特定のアイテムのリサイズや、ウィンドウサイズの変更を経て、UM_REQUESTSCROLLBOTTOMをSendMessageする。投げ先にiTotalHeightを渡すようにする。

StreamConsole.hに、

OnRequestScrollBottomを追加。

StreamConsole.cppで、

OnUserMessageでUM_REQUESTSCROLLBOTTOMならOnRequestScrollBottomを呼ぶようにし、

スクロール可能になった時、渡されたiTotalHeightをm_ScrollInfo.nMax、
一番下に移動するようにm_ScrollInfo.nMax - m_ScrollInfo.nPageをm_ScrollInfo.nPosにセットして、SetScrollInfoを呼ぶ。
そしてm_pWindowListItemsPanel->MoveWindowでm_ScrollInfo.nPosの分だけ上にパネルを移動させる。

m_pWindowListItemsPanelには、CWindowListItemsPanelのインスタンスに代わって、CStreamConsoleItemsPanelのインスタンスを入れる。

f:id:BG1:20170606114730p:plain

ここでギリギリ・・・。ここでリターンを押すと、

f:id:BG1:20170606114837p:plain

スクロールバーが発生するが、ちゃんと下にスクロールしてる。

f:id:BG1:20170606114909p:plain

もちろん上にスクロールバーで移動しても切れたりはしていない。

f:id:BG1:20170606114939p:plain

listコマンドを打ってみると、

f:id:BG1:20170606115028p:plain

さらに下にスクロールしていく。

・アイテムズパネルが大きくなるたびに自動的に下にスクロール · bg1bgst333/VizCommand@e5dd654 · GitHub

VizCommand #33 listコマンドの相対パス対応

これまではlistコマンドに渡すパスは絶対パスであったが、そろそろ相対パスにも対応したい。

ConsoleCore.hで、

SetCurrentPath、GetCurrentPath、そしてGetFullPathを用意。

ConsoleCore.cppで、

SetCurrentPathでは、Win32APIのSetCurrentDirectoryでカレントパスをセット。
GetCurrentPathでは、Win32APIのGetCurrentDirectoryでカレントパスを取得。
GetFullPathは、指定されたパスのフルパスを返す。

OnCreateにてSetCurrentPathでカレントパスにマイドキュメントパスm_tstrMyDocumentPathをセット。

StreamConsole.cppで、

OnListで、m_pWindowListItemsPanelからいろいろ辿りpConsoleCore->m_tstrCurrentPathを取得。
listのパラメータtstrPathが空文字列なら、pConsoleCore->m_tstrCurrentPathをtstrPathに入れて、そうでないなら、pConsoleCore->GetFullPathでtstrPathをフルパスに変換する。

f:id:BG1:20170606110951p:plain

これはフルパス。

f:id:BG1:20170606111008p:plain

こうなる。

f:id:BG1:20170606111024p:plain

パラメータを指定しないと、カレントパスの一覧を表示するし、サブフォルダtestだけを指定すると、test内の一覧を表示する。

f:id:BG1:20170606111251p:plain

いったん上にあがったところの下のuptestフォルダも表示できる。

・listコマンドの相対パス対応 · bg1bgst333/VizCommand@9cb7b4d · GitHub

SHA1_Final

SHA1_Finalで結果を得る。

/docs/man1.0.2/crypto/SHA1_Final.html

SHA1_Final.cで、

SHA1_Finalに渡したsha1SHA1ハッシュ値が格納される。

$ vi SHA1_Final.c 
$ gcc -o SHA1_Final SHA1_Final.c -lcrypto
$ ./SHA1_Final 
SHA1_Init success!
SHA1_Update success!
SHA1_Final success!
sha1 = 7be07aaf460d593a323d0db33da05b64bfdcb3a5
$

SHA1ハッシュを求めることができた。

Sample/openssl/SHA1_Final/SHA1_Final/src/SHA1_Final at master · bg1bgst333/Sample · GitHub

SHA1_Update

SHA1_Updateでデータソースを追加する。

/docs/man1.0.2/crypto/SHA1_Update.html

SHA1_Update.cで、

SHA1_Updateにstrを渡す。

$ vi SHA1_Update.c 
$ gcc -o SHA1_Update SHA1_Update.c -lcrypto
$ ./SHA1_Update 
SHA1_Init success!
SHA1_Update success!
$

これでデータソースを追加できた。

Sample/openssl/SHA1_Update/SHA1_Update/src/SHA1_Update at master · bg1bgst333/Sample · GitHub

SHA1_Init

SHA1ハッシュの計算もできる。
SHA1_Initで初期化。

/docs/man1.1.0/crypto/SHA1_Init.html

SHA1_Init.cで、

SHA1_InitにSHA_CTX型sha_ctxのアドレスを渡す。

$ vi SHA1_Init.c
$ gcc -o SHA1_Init SHA1_Init.c -lcrypto
$ ./SHA1_Init 
SHA1_Init success!
$

これで初期化できた。

Sample/openssl/SHA1_Init/SHA1_Init/src/SHA1_Init at master · bg1bgst333/Sample · GitHub