ウィンドウスタイル

ウィンドウスタイル1

ダイアログボックスにウィンドウスタイルを適用します。
ウィンドウスタイルとは、ウィンドウの外観を変えたり、機能を変えたりするものです。

今回は、ダイアログのウィンドウサイズをマウスにより変えられるようにします。

テキストの表示 - インコのWindowsSDK で作成したソースをもとに作成します。

C言語 ソースファイル

テキストの表示 - インコのWindowsSDK から、変更ありません。

リソースファイル

ウィンドウスタイル [STYLE]

ウィンドウスタイルを決定します。

STYLE  style1 [ | style2 ・・・・]
EXSTYLE style11 [ | style12 ・・・]

拡張ウィンドウスタイル(WS_EX_からはじまるスタイル)は、EXSTYLE に記載し、 拡張ウィンドウスタイル以外のウィンドウスタイルは、STYLE に記載します。

スタイルを複数設定する場合は、スタイルの間に、OR演算(論理和演算)である「|」を入れてください。

ResEditのプロパティで設定できる項目をあげます。

ResEditの項目名 機能内容 定数名
3DLook ダイアログボックスを立体的に表示 DS_3DLOOK
Absolute Align 絶対座標でダイアログを配置 DS_ABSALIGN
Border /
Resizing
ウィンドウサイズ変更可能 WS_THICKFRAME
Border /
Dialog Frame
境界を持つウィンドウ WS_DLGFRAME
Client Edge 縁が沈んで見える境界線を持つウィンドウ WS_EX_CLIENTEDGE
Clip Children ウィンドウ内部の子ウィンドウ領域を描画しません。
クライアントウィンドウを作成するときに使います。
WS_CLIPCHILDREN
Clip Sibling ウィンドウが子ウィンドウを持つ場合、子ウィンドウが占める領域を除外して描画 WS_CLIPSIBLINGS
Horizontal Scrollbar 水平スクロールバーを持つウィンドウ WS_HSCROLL
Maximize Box 最大化ボタンを表示 WS_MAXIMIZEBOX
Minimize Box コントロールグループの最初のコントロールを指定 WS_GROUP
Overlapped Window WS_EX_WINDOWEDGE と WS_EX_CLIENTEDGE の両方 WS_EX_OVERLAPPEDWINDOW
Palette Window 盛り上がった縁の境界線を持つウィンドウ WS_EX_WINDOWEDGE
Static Edge ユーザーの入力を受け付けない項目用の、立体的に見える境界スタイルを持つウィンドウ WS_EX_STATICEDGE
Style /
Popup
ポップアップウィンドウ
WS_CHILDとの併用不可
WS_POPUP
Style /
Child
子ウィンドウを作成
WS_POPUPとの併用不可
WS_CHILDWINDOW
System Menu タイトルバーにアイコンと閉じるボタンをつけます。 WS_SYSMENU
Tool Window ツールウィンドウ
タスクバーに表示されないウィンドウ
WS_EX_TOOLWINDOW
Top Most 最前面ウィンドウ WS_EX_TOPMOST
transparent 透過ウィンドウ WS_EX_TRANSPARENT
Vertical Scrollbar 垂直スクロールバーを持つウィンドウ WS_VSCROLL
Accept Files ドラッグアンドドロップで、ファイルを受け入れます。 WS_EX_ACCEPTFILES
Application Window ウィンドウが最小化されると、トップレベルウィンドウがタスクバー上に置かれます。 WS_EX_APPWINDOW
Disabled 初期状態で無効 (使用不能) なウィンドウを作成 WS_DISABLED
NoInheritLayout このスタイルで作成されたウィンドウは、そのウィンドウレイアウトを子ウィンドウに渡しません。 WS_EX_NOINHERITLAYOUT
Right To Left Reading Order <使用不可>
アラビア語などの右から左へ書く言語を対象
WS_EX_RTLREADING
Set Foreground ダイアログを常に前面に表示する DS_SETFOREGROUND
System Modal システムモーダルダイアログボックスにします。
一度開いたダイアログボックスを閉じなくても、元ウィンドウ側を操作できないダイアログボックス
DS_SYSMODAL
Visible 初期状態でウィンドウを表示 WS_VISIBLE
Center Mouse ダイアログの中央にカーソルの位置に持ってきます。 DS_CENTERMOUSE
Context Help ダイアログボックスのタイトルバーに[?]ボタンを追加 DS_CONTEXTHELP
Control [Tab]キーを使ってコントロール間を移動できるようにします。 DS_CONTROL
Control Parent [Tab]キーを使って子ウィンドウ間を移動できるようにします。 WS_EX_CONTROLPARENT
Local Edit ダイアログボックスにあるエディットボックスは、アプリケーションのデータセグメント内でメモリを使用します。 (ダイアログボックスにあるエディットボックスのスタイルを動的に変更できるようにします。) DS_LOCALEDIT
No Fail Create ダイアログ作成中にエラーが発生しても、ダイアログを作成します。 DS_NOFAILCREATE
No Idle Message ダイアログ表示中は WM_ENTERIDLE メッセージを送りません。 DS_NOIDLEMSG
No Parent Notify このスタイルで作成された子ウィンドウが作成されたり破棄されたりするときに、その親ウィンドウに WM_PARENTNOTIFY メッセージを送らないように指定します。 WS_EX_NOPARENTNOTIFY
Right Align Text <使用不可>
アラビア語などの右から左へ書く言語を対象
WS_EX_RIGHT
Center ダイアログボックスを中央に配置 DS_CENTER

ここでは、WS_THICKFRAME (ウィンドウサイズ変更可能)とWS_SYSMENU (タイトルバーにアイコンと閉じるボタンをつけます )を指定します。
ResEdit のプロパティで、Border の項目を Resizing にします。System Menu の項目は、デフォルトで true になっているので、確認します。

ソースコードの入力

ソースコードは下記のように入れてください。

test.cpp
#include <windows.h>

// このコード モジュールに含まれる関数の宣言を転送します:
BOOL CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
          PSTR lpCmdLine, int nCmdShow )
{
    DialogBox(hInstance, TEXT("DIALOG_BOX"), NULL, DialogProc);
    return 0;
}

BOOL CALLBACK DialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_CLOSE:
            EndDialog(hWnd, IDOK);
            return TRUE;
    }
    return FALSE;
}
resource.h

#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif

Reseditで作成した場合は、これとは異なるソースコードになります。

test.rc

#include <windows.h>
#include "resource.h"

/////////////////////////////////////////////////////////////////////////////
//
// ダイアログ
//

DIALOG_BOX DIALOG 0, 0, 170, 62
STYLE WS_THICKFRAME | WS_SYSMENU
CAPTION "ダイアログ"
BEGIN
END

Reseditで作成した場合は、これとは異なるソースコードになります。

test.rc で、 windows.h をインクルードできていない不具合を修正。(2012/11/23)