読書メモ/「APIで学ぶWindows徹底理解」/Part1-Part5
読書メモ / 「APIで学ぶWindows徹底理解」 / Part1-Part5
id: 653 所有者: msakamoto-sf
作成日: 2010-05-19 23:24:53
カテゴリ: C言語 Windows 読書
"APIで学ぶWindows徹底理解"のPart1 - Part5までの読書メモです。
この読書メモのスタンス、およびサンプルコードの入手については以下を参照して下さい。
読書メモ/「APIで学ぶWindows徹底理解」
【Part 01】Windowsアプリケーションの構造を理解する
- Windowsプログラミング入門に位置するMSDN
- "MSDN Library" > "Windows Development" > "Getting Started"
- Windowを使ったWindowsプログラミングの基本を知りたい
- ... > "Learn to Program for Windows in C++"
- 良く使うデータ型
- ... > "Learn to Program for Windows in C++" > "Introduction to Windows Programming in C++" > "Windows Coding Conventions"
- "Window"という概念について
- ... > "Learn to Program for Windows in C++" > "Introduction to Windows Programming in C++" > "What Is a Window?"
- "WinMain"エントリポイントについて
- ... > "Learn to Program for Windows in C++" > "Introduction to Windows Programming in C++" > "WinMain: The Application Entry Point"
- Windowを表示するプログラミングのイロハ
- ... > "Learn to Program for Windows in C++" > "Module 1. Your First Windows Program"
- ヘッダーファイルで定義されているデータ型を調べたい
- ... > "Using the Windows Headers" > "Windows Data Types"
- ウインドウプロシージャで、WPARAMやLPARAMの値を取り出すマクロ("HIWORD", "LOWORD", "GET_X_LPARAM", "GET_Y_LPARAM")について調べたい
- "MSDN Library" > "Windows Development" > "Windows Application UI Development" > "Windows User Interface" > "Windows and Messages" > "Windows" > "Windows Reference" > "Macros"
- C Runtime Library (CRT) 提供の文字列関数(string.h)の代わりに、Win32APIの提供する文字列関数を使ってみたい
- "MSDN Library" > "Windows Development" > "Windows Application UI Development" > "Windows User Interface" > "Resources" > "Strings"
サンプル解説("Part01_Window_A\"フォルダ内)
- 01_01.cpp
-
本書42p, リスト3のVC++移植版。44p, リスト6の機能を組み込んでいる。
コンパイル方法:
cl 01_01.cpp user32.lib
実行すると簡単なウインドウが表示(リスト3)される。ウインドウのクライアント領域内で左クリックするとメッセージボックスが表示(リスト6)される。
【Part 02】ウインドウについて詳しく学ぼう
- "Window"の詳細
- "MSDN Library" > "Windows Development" > "Windows Application UI Development" > "Windows User Interface" > "Windows and Messages" > "Windows"
- "Window Class"の詳細
- "MSDN Library" > "Windows Development" > "Windows Application UI Development" > "Windows User Interface" > "Windows and Messages" > "Window Classes"
サンプル解説("Part02_Window_B\"フォルダ)
- 02_01.cpp
-
本書51p, リスト2のVC++移植版。
コンパイル方法:
cl 02_01.cpp user32.lib
実行すると「メイン・ウインドウ」「子ウインドウ」「被所有(Owned)ウインドウ」の3種類のウインドウが表示される。
【Part 03】ウインドウ・メッセージをとことん理解する
- ウインドウ・メッセージについて詳しく知りたい
- "MSDN Library" > "Windows Development" > "Windows Application UI Development" > "Windows User Interface" > "Windows and Messages" > "Messages and Message Queues"
サンプル解説("Part03_Window_Message\"フォルダ)
- 03_01.cpp
-
本書55p, リスト2のVC++移植版。
コンパイル方法:
cl 03_01.cpp user32.lib
実行するとウインドウが一つ表示される。ウインドウ内で左ボタンをクリックすると、1分間Sleep()する。その間はウインドウ・メッセージを処理しない為、ウインドウの移動などが反映されない。Sleep()後に、キューに溜まったメッセージが順次処理されていく。
- 03_02.cpp
-
本書56p, リスト4のVC++移植版+簡略化版。
コンパイル方法:
cl 03_02.cpp user32.lib
実行するとウインドウが一つ表示され、カウントアップを行う。SetTimer()とWM_TIMERメッセージを使い、時間のかかる処理(今回は100までのカウントアップ)を小刻みに実行するコードの雛形となっている。
- 03_03.cpp
-
本書59p, リスト6のVC++移植版+簡略化版。
コンパイル方法:
cl 03_03.cpp user32.lib
実行するとウインドウが一つ表示され、カウントアップを行う。GetMessage()ではなくPeekMessage()を使うため、メッセージの到着を待たずに高速に処理を回す事ができる。アイドル時間を使うので、CPU負荷は高くなる。
- 03_04.cpp
-
本書61p, リスト9のVC++移植版+簡略化版。
コンパイル方法:
cl 03_04.cpp user32.lib
実行するとウインドウが一つ表示され、カウントアップを行う。PeekMessage()を使い、アイドル時の処理としてユーザー定義のメッセージを送り、ウインドウプロシージャ内で実際のカウントアップを行う。冗長で不自然ではあるが、サンプルコードのため仕方ない。SendMessage()/PostMessage()はソースコード内でどちらかをコメントアウトして試せるようにしてある。
【Part 04】Windowsのコンソールを使いこなす
- コンソールアプリケーションについて詳しく知りたい
- "MSDN Library" > "Windows Development" > "System Services" > "DLLs, Processes, and Threads" > "Character-Mode Applications"
サンプル解説("Part04_Console\"フォルダ)
- 04_01.cpp
-
本書65p, リスト2のVC++移植版。
コンパイル方法:
cl 04_01.cpp user32.lib
実行するとウインドウとコンソールが表示される。ウインドウ内で左ボタンをクリックすると、その座標位置がコンソール側に表示される。
【Part 05】ファイル・アクセスを細かく制御する
- ファイル管理について詳しく知りたい
- "MSDN Library" > "Windows Development" > "System Services" > "File Services" > "Local File Systems" > "File Management"
サンプル解説("Part05_File_Access\"フォルダ)
- 05_01.cpp
-
本書72p, リスト1のVC++移植版。
コンパイル方法:
cl 05_01.cpp
C Runtime Library (CRT) のfopen()やfwrite()を使って、バイナリモードとテキストモードのそれぞれでファイルに書き込んでみる。テキストモードだと"\n"が"CR + LF"に変換されて書き込まれるため、メモ帳でも改行されるようになる。バイナリモードだと"\n"がそのまま"LF"として書き込まれる為、メモ帳では改行されない。
- 05_02.cpp, 05_03.cpp
-
本書74p, リスト3・リスト4のVC++移植版。
コンパイル方法:
cl 05_02.cpp
cl 05_03.cpp
まず05_02.cppで次のようにCreateFile()の第3引数を0にしてコンパイルする。
HANDLE hf = CreateFile("test.dat", GENERIC_WRITE,
0, /* オブジェクト共有無し→排他制御有効 */
NULL, OPEN_ALWAYS, 0, NULL);
コンソールを二つ立ち上げ、片方でまず05_02.exeを実行する。"ENTER"キー待ちになるので、もう片方で05_03.exeを実行する。
すると、05_02.exeの方で排他制御有りでオープンしている為、05_03.exeがファイルオープンに失敗する。
その後05_02.exeの方でENTERキーを押して終了させる。
続いて05_02.cppで次のようにCreateFile()の第3引数をFILE_SHARE_READにしてコンパイルする。
HANDLE hf = CreateFile("test.dat", GENERIC_WRITE,
FILE_SHARE_READ, /* 読み取りアクセスのみオブジェクト共有 */
NULL, OPEN_ALWAYS, 0, NULL);
片方でまず05_02.exeを実行する。"ENTER"キー待ちになるので、もう片方で05_03.exeを実行する。
今度は共有できるようになっているため、05_03.exeの方でもファイルオープンに成功し、内容を表示して終了する。
その後05_02.exeの方でENTERキーを押して終了させる。
- 05_04.cpp
-
本書77p, リスト7のVC++移植版。
コンパイル方法:
cl 05_04.cpp
SetFilePointer()の使用例。ファイルに書いて、先頭に戻して読み直し。
プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-05-26 11:19:31
md5:ffa2b9e35f57d4988413316a2f4c2a7c
sha1:943c8526efc1411558491f395a950c0fb0d10ac3