ダイアログボックスにウィンドウスタイルを適用します。
ウィンドウスタイルとは、ウィンドウの外観を変えたり、機能を変えたりするものです。
今回は、ダイアログのウィンドウサイズをマウスにより変えられるようにします。
テキストの表示 - インコの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 になっているので、確認します。
ソースコードの入力
ソースコードは下記のように入れてください。
#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; }
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif
Reseditで作成した場合は、これとは異なるソースコードになります。
#include <windows.h> #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // // ダイアログ // DIALOG_BOX DIALOG 0, 0, 170, 62 STYLE WS_THICKFRAME | WS_SYSMENU CAPTION "ダイアログ" BEGIN END
Reseditで作成した場合は、これとは異なるソースコードになります。