#ifndef __WINDOWS_CONTROL_DIALOG_H
#define __WINDOWS_CONTROL_DIALOG_H
#include "Windows/Window.h"
namespace
NWindows {
namespace
NControl {
class
CDialog:
public
CWindow
{
public
:
CDialog(
HWND
wndow = NULL): CWindow(wndow){};
virtual
~CDialog() {};
HWND
GetItem(
int
itemID)
const
{
return
GetDlgItem(_window, itemID); }
bool
EnableItem(
int
itemID,
bool
enable)
const
{
return
BOOLToBool(::EnableWindow(GetItem(itemID), BoolToBOOL(enable))); }
bool
ShowItem(
int
itemID,
int
cmdShow)
const
{
return
BOOLToBool(::ShowWindow(GetItem(itemID), cmdShow)); }
bool
HideItem(
int
itemID)
const
{
return
ShowItem(itemID, SW_HIDE); }
bool
SetItemText(
int
itemID,
LPCTSTR
s)
{
return
BOOLToBool(SetDlgItemText(_window, itemID, s)); }
#ifndef _UNICODE
bool
SetItemText(
int
itemID,
LPCWSTR
s)
{
CWindow window(GetItem(itemID));
return
window.SetText(s);
}
#endif
UINT
GetItemText(
int
itemID,
LPTSTR
string,
int
maxCount)
{
return
GetDlgItemText(_window, itemID, string, maxCount); }
#ifndef _UNICODE
#endif
bool
SetItemInt(
int
itemID,
UINT
value,
bool
isSigned)
{
return
BOOLToBool(SetDlgItemInt(_window, itemID, value, BoolToBOOL(isSigned))); }
bool
GetItemInt(
int
itemID,
bool
isSigned,
UINT
&value)
{
BOOL
result;
value = GetDlgItemInt(_window, itemID, &result, BoolToBOOL(isSigned));
return
BOOLToBool(result);
}
HWND
GetNextGroupItem(
HWND
control,
bool
previous)
{
return
GetNextDlgGroupItem(_window, control, BoolToBOOL(previous)); }
HWND
GetNextTabItem(
HWND
control,
bool
previous)
{
return
GetNextDlgTabItem(_window, control, BoolToBOOL(previous)); }
bool
MapRect(LPRECT rect)
{
return
BOOLToBool(MapDialogRect(_window, rect)); }
bool
IsMessage(LPMSG message)
{
return
BOOLToBool(IsDialogMessage(_window, message)); }
LRESULT
SendItemMessage(
int
itemID,
UINT
message,
WPARAM
wParam,
LPARAM
lParam)
{
return
SendDlgItemMessage(_window, itemID, message, wParam, lParam); }
bool
CheckButton(
int
buttonID,
UINT
checkState)
{
return
BOOLToBool(CheckDlgButton(_window, buttonID, checkState)); }
bool
CheckButton(
int
buttonID,
bool
checkState)
{
return
CheckButton(buttonID,
UINT
(checkState ? BST_CHECKED : BST_UNCHECKED)); }
UINT
IsButtonChecked(
int
buttonID)
const
{
return
IsDlgButtonChecked(_window, buttonID); }
bool
IsButtonCheckedBool(
int
buttonID)
const
{
return
(IsButtonChecked(buttonID) == BST_CHECKED); }
bool
CheckRadioButton(
int
firstButtonID,
int
lastButtonID,
int
checkButtonID)
{
return
BOOLToBool(::CheckRadioButton(_window, firstButtonID, lastButtonID, checkButtonID)); }
virtual
bool
OnMessage(
UINT
message,
WPARAM
wParam,
LPARAM
lParam);
virtual
bool
OnInit() {
return
true
; }
virtual
bool
OnCommand(
WPARAM
wParam,
LPARAM
lParam);
virtual
bool
OnCommand(
int
code,
int
itemID,
LPARAM
lParam);
virtual
bool
OnSize(
WPARAM
,
int
,
int
) {
return
false
; }
virtual
void
OnHelp() {};
virtual
bool
OnButtonClicked(
int
buttonID,
HWND
buttonHWND);
virtual
void
OnOK() {};
virtual
void
OnCancel() {};
virtual
bool
OnNotify(
UINT
, LPNMHDR
) {
return
false
; }
virtual
bool
OnTimer(
WPARAM
,
LPARAM
) {
return
false
; }
LONG_PTR
SetMsgResult(
LONG_PTR
newLongPtr )
{
return
SetLongPtr(DWLP_MSGRESULT, newLongPtr); }
LONG_PTR
GetMsgResult()
const
{
return
GetLongPtr(DWLP_MSGRESULT); }
bool
GetMargins(
int
margin,
int
&x,
int
&y)
{
RECT rect;
rect.left = 0;
rect.top = 0;
rect.right = margin;
rect.bottom = margin;
if
(!MapRect(&rect))
return
false
;
x = rect.right - rect.left;
y = rect.bottom - rect.top;
return
true
;
}
int
Units_To_Pixels_X(
int
units)
{
RECT rect;
rect.left = 0;
rect.top = 0;
rect.right = units;
rect.bottom = units;
if
(!MapRect(&rect))
return
units * 3 / 2;
return
rect.right - rect.left;
}
bool
GetItemSizes(
int
id,
int
&x,
int
&y)
{
RECT rect;
if
(!::GetWindowRect(GetItem(id), &rect))
return
false
;
x = rect.right - rect.left;
y = rect.bottom - rect.top;
return
true
;
}
void
GetClientRectOfItem(
int
id, RECT &rect)
{
::GetWindowRect(GetItem(id), &rect);
ScreenToClient(&rect);
}
bool
MoveItem(
int
id,
int
x,
int
y,
int
width,
int
height,
bool
repaint =
true
)
{
return
BOOLToBool(::MoveWindow(GetItem(id), x, y, width, height, BoolToBOOL(repaint))); }
void
NormalizeSize(
bool
fullNormalize =
false
);
void
NormalizePosition();
};
class
CModelessDialog:
public
CDialog
{
public
:
bool
Create(
LPCTSTR
templateName,
HWND
parentWindow);
bool
Create(
UINT
resID,
HWND
parentWindow) {
return
Create(MAKEINTRESOURCEW(resID), parentWindow); }
#ifndef _UNICODE
bool
Create(
LPCWSTR
templateName,
HWND
parentWindow);
#endif
virtual
void
OnOK() { Destroy(); }
virtual
void
OnCancel() { Destroy(); }
};
class
CModalDialog:
public
CDialog
{
public
:
INT_PTR
Create(
LPCTSTR
templateName,
HWND
parentWindow);
INT_PTR
Create(
UINT
resID,
HWND
parentWindow) {
return
Create(MAKEINTRESOURCEW(resID), parentWindow); }
#ifndef _UNICODE
INT_PTR
Create(
LPCWSTR
templateName,
HWND
parentWindow);
#endif
bool
End(
INT_PTR
result) {
return
BOOLToBool(::EndDialog(_window, result)); }
virtual
void
OnOK() { End(IDOK); }
virtual
void
OnCancel() { End(IDCANCEL); }
};
class
CDialogChildControl:
public
NWindows::CWindow
{
int
m_ID;
public
:
void
Init(
const
NWindows::NControl::CDialog &parentDialog,
int
id)
{
m_ID = id;
Attach(parentDialog.GetItem(id));
}
};
bool
IsDialogSizeOK(
int
xSize,
int
ySize);
}}
#endif