home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

読書メモ/「APIで学ぶWindows徹底理解」/Part1-Part5

読書メモ/「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
コメント
コメントを投稿するにはログインして下さい。