『Windowsプログラミング』読書ノートスタート


最近は仕事の関係でWindowsでデスクトップアプリケーションの開発を始めます.いくつかのUIプログラムにすぎませんが、windowsの様々なAPIを深く理解していないと、アプリケーションの開発過程で多くの障害に直面します.
そこでWindows APIを拾うことにした.MFCフレームワークが古いからだ.古いコードのメンテナンスを行う以外はあまり使われていません.そこで,しばらくはMFCではなく,純win 32 APIを用いて開発を行う.UIの開発はMFCより効率が低いかもしれませんが、win 32 apiの応用を明らかにすることに重点を置いています.Windowsで開発されたプログラマーにとって、古典的なwindowsプログラミングを学ぶことは非常に重要です.C#、QT、Java言語を使ってwindowsプログラムを開発しても.これらのAPIを学ぶことは、コードを書くだけでなく、windowsオペレーティングシステムのメカニズムを理解することができます.
win 32 apiの多くはc言語で記述されているため、apiインタフェース部分では標準的なC構文が使用されます.アプリケーションフレームワークはC++オブジェクト向けに作成されます.使用環境はVisual Studio Community 2015+visual assistX
1.1 Windows環境
1.2 Windowsプログラミングオプション
本では10年以上前のVC++6.0を使用しています.バージョンが古いため、最新のVisual Studio Community 2015を使用してコンパイルされています.
1.3あなたの最初のWindowsプログラム
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	PSTR szCmdLine, int iCmdShow)
{
	MessageBox(NULL, TEXT("Hello, Windows 7 x64 Service Pack 1"), TEXT("HelloMsg"), 0);
	return 0;
}

1.3.3ヘッダファイル
windows.hには他のいくつかの非常に重要なヘッダファイルが含まれている
windef.h基本データ型定義
winnt.h unicodeのタイプ定義をサポート
winbase.hカーネル関数
winuser.hユーザインタフェース関数
wingdi.hグラフィックデバイスインタフェース関数
WinMain()はすべてのwindowsプログラムのエントリでwindbase.h
正体は次のwindows
int
WINAPI
WinMain (
    _In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPSTR lpCmdLine,
    _In_ int nShowCmd
    );

windefでhにWINAPIの定義がある
#define WINAPI __stdcall
生成されたスタックに関数呼び出しパラメータのマシンコードを配置する方法を示す関数呼び出し規則が規定されている.ほとんどのwindows api呼び出しはWINAPIとして定義されています32ビットwindowsではhPrevInstanceは常にNULLとして定義されています
3番目のパラメータは、プログラムのコマンドラインパラメータを示します.
4番目のパラメータは、プログラムが最初にどのように表示されるか、正常、最大化、またはタスクバーなどに最小化されるかを示します.
1.3.5 MessageBox関数
1番目の暫定、2番目のパラメータは表示されるメッセージ、3番目のパラメータはメッセージボックスのタイトルバーです.TEXTマクロはunicodeアプリケーションに対応するためです
4番目のパラメータは一連のMB_ですヘッダのパラメータは、メッセージボックスに表示されるボタンを表すために使用され、winuserで定義されます.h中
#define MB_OK                       0x00000000L
#define MB_OKCANCEL                 0x00000001L
#define MB_ABORTRETRYIGNORE         0x00000002L
#define MB_YESNOCANCEL              0x00000003L
#define MB_YESNO                    0x00000004L
#define MB_RETRYCANCEL              0x00000005L
このケースではMessageBoxがIDを返します.OK 1は他の値を返すこともあります