WideCharToMultiByte

WideCharToMultiByteは、Unicode(UTF-16)などのワイド文字列から、ShiftJISなどのマルチバイト文字列に変換する。

WideCharToMultiByte function (stringapiset.h) - Win32 apps | Microsoft Docs

WideCharToMultiByte.cppで、

Saveが選択された時、ID_EDIT1から文字列を取得し、WideCharToMultiByteで、マルチバイト文字列に変換して、"test.txt"に書き込む。

"test.txt"はない
"test.txt"はない

"test.txt"はない状態。

起動時この状態
起動時この状態

起動時この状態。

日本語で入力して
日本語で入力して

日本語で入力して、

Saveを選択
Saveを選択

Saveを選択。

"test.txt"が出来てる
"test.txt"が出来てる

"test.txt"が出来てる。

TeraPadで見るとShiftJISのCRLFで保存
TeraPadで見るとShiftJISのCRLFで保存

TeraPadで見るとShiftJISのCRLFで保存されてる。

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

MultiByteToWideChar

MultiByteToWideCharは、ShiftJISなどのマルチバイト文字列から、Unicode(UTF-16)などのワイド文字列に変換する。

MultiByteToWideChar function (stringapiset.h) - Win32 apps | Microsoft Docs

resource.hで、

ID_ITEM_OPEN、ID_ITEM_SAVEを追加。

MultiByteToWideChar.rcで、

ファイル周りのメニューアイテムを追加。

MultiByteToWideChar.cppで、

今回は、固定で"test.txt"を開いて、読み込んだバイト列をMultiByteToWideCharでTCHAR文字列に変換して、TCHAR用のSetWindowTextでID_EDIT1にセット。

test.txtを置いて
test.txtを置いて

test.txtを置いて、

日本語文字列
日本語文字列

日本語文字列。

ANSIで保存
ANSIで保存

ANSIで保存。(日本語ではShiftJIS。)

起動時
起動時

起動時。

メニューでOpenを押す
メニューでOpenを押す

メニューでOpenを押す。

TCHAR用の関数でエディットコントロールにセット
TCHAR用の関数でエディットコントロールにセット

TCHAR用の関数でエディットコントロールにセットされてる。

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

EmptyClipboard

EmptyClipboardで、クリップボードを空にする。

EmptyClipboard function (winuser.h) - Win32 apps | Microsoft Docs

クリップボードを開いたら、空にして、新たにデータを貼り付けるという流れで使う。

空にできたら、"EmptyClipboard Success!"を表示。

最初はこの状態
最初はこの状態

最初はこの状態。

"Edit1"を選択
"Edit1"を選択

"Edit1"を選択。

コピー
コピー

コピー。

貼り付け
貼り付け

貼り付け。

もう1つ貼り付く
もう1つ貼り付く

もう1つ貼り付く。

Copyを選択
Copyを選択

Copyを選択。

"EmptyClipboard Success!"
"EmptyClipboard Success!"

"EmptyClipboard Success!"と出る。

クリップボードが空になったので貼り付けができない
クリップボードが空になったので貼り付けができない

クリップボードが空になったので貼り付けができない。

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

OpenClipboard

OpenClipboardで、クリップボードを開く。

OpenClipboard function (winuser.h) - Win32 apps | Microsoft Docs

resource.hで、

メニューとエディットコントロール
OpenClipboard.rcは、

"Copy"と"Paste"のメニューアイテム。

"Copy"が選択されたら、OpenClipboardを呼び出し、成功したら"OpenClipboard Success!"と表示し、CloseClipboardで閉じる。

最初このように配置
最初このように配置

最初このように配置。

Copyを押す。
Copyを押す。

Copyを押す。

クリップボードを開けた。
クリップボードを開けた。

クリップボードを開けた。

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

GlobalSize

GlobalSizeで、ハンドルの指し示すグローバルメモリのサイズを取得できる。

GlobalSize function (winbase.h) - Win32 apps | Microsoft Docs

場合によっては、GlobalAllocで指定したサイズよりも多く確保されるらしい。

前回の固定メモリと移動可能メモリでどうなるか。

dwSize = 16
hGlobal = 0x00492508
lpszText = 0x00492508
hGlobal = ABCDE
lpszText = ABCDE
dwSize = 16
hGlobal = 0x002b0004
lpszText = 0x00492508
lpszText = ABCDE
続行するには何かキーを押してください . . .

とくに多く確保されるということはなかった。

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

GlobalLock

GlobalLockで、グローバルメモリをロックし、先頭ポインタを取得する。

GlobalLock function (winbase.h) - Win32 apps | Microsoft Docs

固定メモリの場合は、ハンドルの値がそのまま先頭ポインタになるので、ハンドルをキャストしてそこにデータをコピーしたりできる。
一方で移動可能なメモリの場合は、ハンドルと先頭ポインタが異なるので、ハンドルをキャストしてはいけない。

最初は固定メモリ、次に移動可能メモリ。

hGlobal = 0x005a2510
lpszText = 0x005a2510
hGlobal = ABCDE
lpszText = ABCDE
hGlobal = 0x00230004
lpszText = 0x005a2510
lpszText = ABCDE
続行するには何かキーを押してください . . .

固定メモリは、確かに値が同じで、hGlobalに文字列をコピーして、lpszTextにも反映してる。
移動可能メモリは、値が異なるので、それはできない。

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

WLAN_NOTIFICATION_CALLBACK

WlanRegisterNotificationで指定するコールバック関数は、関数ポインタWLAN_NOTIFICATION_CALLBACKで定義された形式に基づく。

WLAN_NOTIFICATION_CALLBACK (wlanapi.h) - Win32 apps | Microsoft Docs

コールバック関数にスキャン完了が来るまで、WlanGetAvailableNetworkListしないで待っているようにする。

完了待ちフラグをグローバル変数で用意しておいて、

スキャン完了や失敗ならFALSEにする。

フラグがTRUEの間は待っているという状況。

wlan_notification_acm_scan_completeが来てから一覧が出ている。
wlan_notification_acm_scan_completeが来てから一覧が出ている。

wlan_notification_acm_scan_completeが来てから一覧が出ている。
(その後の通知はなんだろう・・・。いずれ調べる・・・。)

Sample/winapi/WLAN_NOTIFICATION_CALLBACK/W_N_C/src/WLAN_NOTIFICATION_CALLBACK at master · bg1bgst333/Sample · GitHub