2022-08-24 読書メモ
- ウィンドウを作る
- TCHARとかLPCTSTR、LPTSTRって何???(UsefullCode.net)
- マルチバイト文字(多バイト文字 / MBCS)とは - 意味をわかりやすく - IT用語辞典 e-Words
- マルチバイト文字 | Programming Place Plus C言語編 第46章
- printf() > size_t型の書式指定子 > %zu - Qiita
- C strlen() - C Standard Library
- Unicode 対応 - Windows API 入門
- ワイド文字(C言語) - 超初心者向けプログラミング入門
ウィンドウを作る
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
- UTF8 エンコードのため 3 * 9 = 27 bytes となっている
printf() > size_t型の書式指定子 > %zu - Qiita
https://qiita.com/7of9/items/ca5ebf9b7861acbcf656
%zu
のz
はsize_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>
をインクルードすることで使用できる