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

MD5_Final

MD5_Finalで、結果のハッシュ値を受け取れる。

/docs/man1.0.2/crypto/MD5_Final.html

MD5_Final.cで、

MD5_Finalに長さMD5_DIGEST_LENGTHのunsigned char型配列md5を渡して、ハッシュ値を格納。
md5の要素を1つずつfor文で出力。

$ vi MD5_Final.c 
$ gcc -o MD5_Final MD5_Final.c -lcrypto
$ ./MD5_Final 
MD5_Init success!
MD5_Update success!
MD5_Final success!
md5 = 2ecdde3959051d913f61b14579ea136d
$

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

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

MD5_Update

MD5_Updateでデータソース(変換元の文字列)を渡す。

/docs/man1.0.2/crypto/MD5_Update.html

MD5_Update.cで、

MD5_Updateに文字列"ABCDE"を格納したchar型配列strを渡す.

$ vi MD5_Update.c
$ gcc -o MD5_Update MD5_Update.c -lcrypto
$ ./MD5_Update 
MD5_Init success!
MD5_Update success!
$

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

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