_tWinMain

WTLウィザードでスケルトンを作成するとSDI、モードレスダイアログは次の_tWinMainになる。(モーダルは異なる。)

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow)
{
	HRESULT hRes = ::CoInitialize(NULL);
// If you are running on NT 4.0 or higher you can use the following call instead to 
// make the EXE free threaded. This means that calls come in on a random RPC thread.
//	HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
	ATLASSERT(SUCCEEDED(hRes));

	// this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used
	::DefWindowProc(NULL, 0, 0, 0L);

	AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES);	// add flags to support other controls

	hRes = _Module.Init(NULL, hInstance);
	ATLASSERT(SUCCEEDED(hRes));

	int nRet = Run(lpstrCmdLine, nCmdShow);

	_Module.Term();
	::CoUninitialize();

	return nRet;
}

CoInitialize

まずは、お決まりのCoInitializeが登場する。でも、COMを使わないなら必要ない(はず、実際、削除しても問題ないようです)。

DefWindowProc

thunking problemを解決するためにと書いてありますね。本質的な問題ではないようです。後で調べましょう。

AtlInitCommonControls

コモンコントールを初期化する。しかし、たいていの場合コモンコントロールはすでに初期化されているため、削除しても問題はあまりおきないが、削除しないほうがいいでしょう。試すときは、UnRegisterClassをどうぞ。

_Module.Init

おなじみです。いろいろ初期化しています。

Run

メッセージループなどを含むRun関数を呼び出します。

_Module.Term

これもお決まりです。

CoUninitialize

CoInitializeと対ですね。


Valid XHTML 1.0!