basic_istream::get(char型で1文字取得)

basic_istream::getでの1文字取得は、intの戻り値で返ってくるパターンはやったが、charの引数に参照渡しするパターンはまだだった。

basic_istream::get - cpprefjp C++日本語リファレンス

basic_istream.cppで、

独自のbasic_istream<char>オブジェクトiscで標準入力に対応するために、std::cin.rdbuf()で取得したストリームバッファをセットしてる。
これで、isc.get(c)で文字の入力が完了するまで待ってくれる。

こうなった。
こうなった。

こうなった。

Sample/cpp/basic_istream/get_2/src/basic_istream at master · bg1bgst333/Sample · GitHub

strspn

strspnは、指定の文字列の中で、指定の文字群のどれかの文字が先頭からどれくらい続くか長さを返す。

strspn

ちょっとややこしいけど、
例えば、"abcde"という文字群があるとする。
"baeyyyxxx"は、先頭から"bae"という感じで3文字続いてるから、3が返るということ。
strspn.cは、

こう書く。

いくつか試してみた。
いくつか試してみた。

いくつか試してみた。
先頭ではなく途中からの場合は、カウントされないので0。
先頭と、切れた先の2番手に文字列があり、2番手が最長でも、先頭の長さが返る。

Sample/c/strspn/strspn/src/strspn at master · bg1bgst333/Sample · GitHub

SystemParametersInfo

SystemParametersInfoで、システムパラメータを取得したり、設定できる。

SystemParametersInfoW 関数 (winuser.h) - Win32 apps | Microsoft Learn

タスクバーを除いたデスクトップ領域のサイズを取得する。
resource.hで、

ID_SYSTEM_INFOを追加。
SystemParametersInfo.rcで、

"Info(&I)..."を追加。
SystemParametersInfo.cppで、

ID_SYSTEM_INFOが来た場合、SystemParametersInfoで、SPI_GETWORKAREAを指定し、サイズを取得し、stasicなRECTのrcに格納。
InvalidateRectで画面更新。

WM_PAINTでrcの各要素も描画。

Infoを選択。
Infoを選択。

Infoを選択。

rc.rightとrc.bottomが変わった。サイズが格納されたということ。
rc.rightとrc.bottomが変わった。サイズが格納されたということ。

rc.rightとrc.bottomが変わった。サイズが格納されたということ。

Sample/winapi/SystemParametersInfo/SystemParametersInfo/src/SystemParametersInfo at master · bg1bgst333/Sample · GitHub

select句での加工

select句には、要素やそのプロパティだけでなく、それらを加工したものも指定できる。

クエリ式の基本 (C# での LINQ) | Microsoft Learn
LINQ:取得列を明示的に指定する - select句/SelectManyメソッド[C#] - Build Insider

MainClass.csで、

p.Nameを、

"Name = " + p.Name

という形で加工したものを列挙する。

こうなる。
こうなる。

こうなる。

Sample/cs/select/select_1/src/select at master · bg1bgst333/Sample · GitHub

SHFILEINFO

SHFILEINFOは、ファイル情報を持つ構造体。

SHFILEINFOW (shellapi.h) - Win32 apps | Microsoft Learn

アイコンハンドルを取得してみる。
SHFILEINFO.cppで、

SHGFI_ICONを追加。
WM_PAINTで、

今回はsfi.hIconの値を描画。
(アイコン自体の描画はいずれ・・・。)

sfi.hIconは終了時に破棄しないといけないらしいので、WM_CLOSE時にDestroyIcon。

Openを選択
Openを選択

Openを選択。

text1.txtを選択。
text1.txtを選択。

text1.txtを選択。

hIconの値も表示された。
hIconの値も表示された。

hIconの値も表示された。

Sample/winapi/SHFILEINFO/SHFILEINFO/src/SHFILEINFO at master · bg1bgst333/Sample · GitHub

複合from句

fromで取り出した要素が、またリストのようなシーケンスを持っている場合などでは、fromを複数繋げて内側の要素を取り出せる。

クエリ式の基本 (C# での LINQ) | Microsoft Learn
from 句 - C# リファレンス | Microsoft Learn

Country.csは、

メンバにList<City>を持っている。
City.csは、

Populationはその都市の人口。
MainClass.csは、

countriesからcountryを取り出し、country.Citiesからcityを取り出し、city.Populationが5000000以上に絞り、city.Nameを列挙。

こうなる。
こうなる。

こうなる。

Sample/cs/from/from_1/src/from at master · bg1bgst333/Sample · GitHub

SHGetFileInfo

SHGetFileInfoで、指定されたパスのファイル情報を取得する。

SHGetFileInfoW 関数 (shellapi.h) - Win32 apps | Microsoft Learn

GetFileTitleの項のソースコードをベースに、

SHFILEINFO型変数sfiをstaticで用意しておく。

Openが選択された時の最後に、SHGetFileInfoで表示名と種類を取得し、sfiに格納したら、InvalidateRectで更新。

WM_PAINT時にTextOutで表示名と種類を描画。

Openを選択
Openを選択

Openを選択。

text1.txtを選択。
text1.txtを選択。

text1.txtを選択。

表示名と種類が描画された。
表示名と種類が描画された。

表示名と種類が描画された。

Sample/winapi/SHGetFileInfo/SHGetFileInfo/src/SHGetFileInfo at master · bg1bgst333/Sample · GitHub