CWindowImpl

ATLで、ウィンドウを作成し、表示するには、CWindowImplが必要。

CWindowImpl クラス | Microsoft Docs
ATL/WTLプログラミング 1:ATL/WTLの概要と基本 (1/2):CodeZine(コードジン)

ちょっと使い方が独特。

まず、

コンソール
コンソール

コンソールでプロジェクト作成。

コンソールの空のプロジェクト
コンソールの空のプロジェクト

コンソールの空のプロジェクト。

空のプロジェクト
空のプロジェクト

空の状態。

新しい項目
新しい項目

新しい項目を追加。

stdafx.h
stdafx.h

stdafx.hを追加。

必要なインクルードや、CComModule。

プロパティ
プロパティ

プロパティで、

静的にリンク
静的にリンク

[ATLに静的にリンク]に変更。

新しい項目
新しい項目

今度は、

CustomWindow.h
CustomWindow.h

CustomWindow.hを追加。

CWindowImplのテンプレート引数をCCustomWindowとしたクラスの派生クラスとしてCCustomWindowを定義する。
DECLARE_WND_CLASSマクロでウィンドウクラス名を登録できる。
メッセーマップもわかりやすい。
ここではOnDestroyでメッセージループ終了処理だけ実装。

新しい項目
新しい項目

また追加。

WinMain.cpp
WinMain.cpp

WinMain.cppだ。

CCustomWindowオブジェクトを作成して、customWnd.Createでウィンドウ作成、customWnd.ShowWindowでウィンドウ表示。
そのあと、メッセージループ処理。

で、これでビルドすると、

ビルドエラー
ビルドエラー

コンソールじゃダメなのでは・・・。

Visual Studioアプリケーションの種類を変更する方法

やっぱり・・・。

サブシステム
サブシステム

[サブシステム]を[コンソール]から[Windows]へ。

プリプロセッサ
プリプロセッサ

[プリプロセッサ]も[_CONSOLE]を、

_WINDOWS
_WINDOWS

[_WINDOWS]に。

ビルド成功
ビルド成功

これでビルドできたので、実行すると、

ウィンドウ表示
ウィンドウ表示

ウィンドウが表示される。

やっぱり、"コンソールアプリケーション"の空のプロジェクトではなく、"Win32プロジェクト"の空のプロジェクトで、"プロジェクト完成後"に、"ATLに静的にリンク"の状態にする。
このプロジェクトの作成の部分が、前回間違ってたので、今回が正しい・・・。

Sample/atl/CWindowImpl/CWindowImpl/src/CWindowImpl at master · bg1bgst333/Sample · GitHub