2022-08-24 読書メモ

ウィンドウを作る

http://wisdom.sakura.ne.jp/system/winapi/win32/win7.html

  • ウィンドウの生成はウィンドウクラスの登録ウィンドウの生成の二つの作業に分かれる
  • CreateWindow() 関数は HWND 型 - ウィンドウハンドルを返却する
  • ウィンドウハンドルはウィンドウオブジェクトへの参照
  • Windows の全てのウィンドウにはハンドルが存在する
  • CreateWindow() 関数の第一引数 LPCTSTR lpClassName にはウィンドウクラス名を指定する
  • ウィンドウクラスは既定で用意されたものの他自身で定義することもできる
  • CreateWindow() 関数の第二引数 LPCTSTR lpWindowName にはウィンドウ名を指定する
  • CreateWindow() 関数の第三引数 DWORD dwStyle にはウィンドウのスタイルを指定する

TCHARとかLPCTSTR、LPTSTRって何???(UsefullCode.net)

https://www.usefullcode.net/2006/11/tcharlpctstrlptstr.html

  • TCHAR は以前の復習.UNICODE ビルドの有無に応じて WCHAR / char のいずれかになる

マルチバイト文字(多バイト文字 / MBCS)とは - 意味をわかりやすく - IT用語辞典 e-Words

https://e-words.jp/w/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%90%E3%82%A4%E3%83%88%E6%96%87%E5%AD%97.html

  • マルチバイト文字: 文字コードや文字セットのうち、一文字を2バイト以上のデータ量で表すもの
  • この定義だと ASCII はマルチバイト文字に含まれない?

マルチバイト文字 | Programming Place Plus C言語編 第46章

https://programming-place.net/ppp/contents/c/046.html

  • マルチバイト文字: Shift-JIS や UTF8 等で表された、1文字を表現するためのデータ領域が一定でない文字
  • ASCII 領域文字なら1バイトで済むが,漢字やひらがなは2バイト以上を要する
  • char 型を使って表現する文字はマルチバイト文字.具体的にどんな文字を表すかは処理系定義
  • 上記はエンコード・デコードの仕様によるということ,と解釈しておく
#include <stdio.h>
#include <string.h>

int main(void)
{
    const char str[] = "日本語を使うテスト";
    printf( "%zu\n", strlen(str) );
}

// 18
  • 上記例では日本語文字列リテラルShift-JIS で表現されている様子だが,コンパイラはどうやってエンコードを決めるのだろうか
  • strlen 関数はバイト数を返却する
  • C11 (C言語の規格.C99 の後継) の文字列リテラルには u8 プレフィクスを付加することで UTF-8 を使うことを指示できる
#include <stdio.h>
#include <string.h>

int main(void)
{
    const char str[] = u8"日本語を使うテスト";
    printf( "%zu\n", strlen(str) );
}

// 27

printf() > size_t型の書式指定子 > %zu - Qiita

https://qiita.com/7of9/items/ca5ebf9b7861acbcf656

  • %zuzsize_t 型に対応する長さ修飾子.C99 で導入

C strlen() - C Standard Library

https://www.programiz.com/c-programming/library-function/string.h/strlen

  • strlen() 関数の戻り値は size_t 型 (unsigned integer)
  • strlen() は <string.h> に定義されている

Unicode 対応 - Windows API 入門

http://kaitei.net/winapi/unicode/

  • char 型 で漢字等のマルチバイト文字を表現するには複数文字分の領域が必要となる
  • wchar_t 型ならマルチバイト文字を1字分の領域で表現できる
  • char 型は標準規格で8ビットと決まっている
  • wchar_t 型は処理系によって16ビットもしくは32ビット
  • Windows ではワイド文字

ワイド文字(C言語) - 超初心者向けプログラミング入門

https://programming.pc-note.net/c/widecharacter.html

  • マルチバイト文字は文字種によって必要なバイト数が異なることが煩雑になる原因
  • ならばそれを固定すれば楽になるのでは? => ワイド文字 の導入
  • ワイド文字は wchar_t 型で扱う
  • <wchar.t> または <stdlib.h> をインクルードすることで使用できる