WNDCLASS構造体のhbrBackgroundメンバに指定できるスタイルについては、次のページに説明がまとまっている。
主な内容をまとめると次のようになる。
値 | 内容 |
---|---|
COLOR_ACTIVECAPTION | アクティブウィンドウのタイトルバーの色 |
COLOR_APPWORKSPACE | マルチドキュメントインターフェースアプリケーションの背景色 |
COLOR_BTNTEXT | プッシュボタンテキストの色 |
COLOR_GRAYTEXT | 灰色テキストの色 |
COLOR_HIGHLIGHT | コントロール内で選択された項目の色。 |
COLOR_HIGHLIGHTTEXT | コントロール内で選択された項目のテキストの色。 |
COLOR_WINDOW | ウィンドウの背景の色。前景色はCOLOR_WINDOWTEXT。 |
COLOR_WINDOWTEXT | ウィンドウ内のテキストの色。背景色はCOLOR_WINDOW。 |
詳しい説明は次回に行うが、こんな感じで基盤となる動作を指定してウィンドウクラスを作成する。これが先程示した次の部分だ。短いようでいて結構な情報が書き込まれている。
ウィンドウクラスの作成部分
// ウィンドウクラス構造体を用意
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = CLASS_NAME;
WNDCLASS構造体のメンバを一つ一つ見ていくだけでも、Windowsにおけるウィンドウプログラミングがどのように整理されているのかを推測することができるようになってくる。最初にある程度把握しておきたい構造体だ。
ウィンドウクラスを登録
WNDCLASS構造体のメンバを埋めたら、次のようにRegisterClass()をコールしてWNDCLASS構造体を登録する。
ウィンドウクラスを登録
// ウィンドウクラス構造体を登録
RegisterClass(&wc);
まずはここがスタートラインだ。このあとにウィンドウの生成と表示、メッセージ処理ループの構築などを行っていくのだが、まずはその基盤としてWNDCLASS構造体を登録する必要があるのだ。
WNDCLASSには、ウィンドウプログラミングに必要となるかなり基本的な情報を登録することになる。ウィンドウプログラミングの中身を知るために大切な構造体なので、この構造体についてちゃんと理解していくことが大切になってくる。今後、複数回に分けてこの構造体とその動きについて説明を行っていく。
付録
掲載したサンプルソースコードをnmakeでビルドするためのMakefileのサンプルを掲載しておく。
nmake用のMakefile
CMD= winmain
CC= cl.exe
CFLAGS= /c /source-charset:utf-8
LINK= link.exe
LIBS= user32.lib
LFLAGS=
EXIST= cmd.exe /C if exist
all: build
build: $(CMD).exe
$(CMD).exe: $(CMD).obj
$(LINK) $(LFLAGS) $(LIBS) *.obj
dir
.c.o:
$(CC) $(CFLAGS) $*.c
run: build
$(CMD).exe
clean:
$(EXIST) $(CMD).obj del *.obj
$(EXIST) $(CMD).exe del $(CMD).exe
dir
参考
- Module 1. Your First Windows Program - Win32 apps | Microsoft Docs
- WNDCLASSA (winuser.h) - Win32 apps | Microsoft Docs
- Window Class Styles (Winuser.h) - Win32 apps | Microsoft Docs
- LoadCursorA function (winuser.h) - Win32 apps | Microsoft Docs
- GetSysColor function (winuser.h) - Win32 apps | Microsoft Docs