Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

125 lines
2.8 KiB

#include "precomp.hxx"
#include "dialog.h"
INT_PTR Dialog::DialogStaticDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
Dialog *pThis;
pThis = (Dialog*) GetWindowLongPtr(hDlg, DWLP_USER);
if (msg == WM_INITDIALOG) {
pThis = (Dialog *) lParam;
pThis->hDlg = hDlg;
SetWindowLongPtr(hDlg, DWLP_USER, (ULONG_PTR) pThis);
return pThis->OnInitDialog(hDlg);
}
if (pThis) {
return pThis->MainDlgProc(msg, wParam, lParam);
}
return FALSE;
}
INT_PTR Dialog::MainDlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_COMMAND:
HandleCommand((UINT) LOWORD(wParam), (HWND)lParam, (UINT)HIWORD(wParam));
return FALSE;
case WM_HELP:
return OnHelp((LPHELPINFO) lParam);
case WM_CONTEXTMENU:
return OnContextMenu(wParam, lParam);
case WM_NOTIFY:
return OnNotify((NMHDR *)lParam);
}
return DlgProc(msg, wParam, lParam);
}
void Dialog::HandleCommand(UINT ctrlId, HWND hwndCtrl, UINT cNotify)
{
switch (ctrlId) {
case IDOK:
OnOK();
break;
case IDCANCEL:
OnCancel();
break;
default:
OnCommand(ctrlId, hwndCtrl, cNotify);
break;
}
}
UINT Dialog::ShowModal(HWND hwndParent)
{
DialogBoxParam(hInstance,
MAKEINTRESOURCE(resID),
hwndParent,
DialogStaticDlgProc,
(DWORD_PTR) this);
return result;
}
HICON Dialog::SetIcon(UINT iconID, BOOL bLarge)
{
HICON hIcon;
int size;
size = bLarge ? 32 : 16;
hIcon = (HICON) LoadImage(hInstance,
MAKEINTRESOURCE(iconID),
IMAGE_ICON,
size,
size,
0);
return (HICON)
::SendMessage(hDlg,
WM_SETICON,
bLarge ? ICON_BIG : ICON_SMALL,
(LPARAM) hIcon);
}
void Dialog::CenterWindow(HWND hwnd)
{
RECT me;
RECT parent;
if (hwnd == NULL) {
hwnd = GetDesktopWindow();
}
GetWindowRect(hDlg, &me);
GetWindowRect(hwnd, &parent);
int meWidth = me.right - me.left,
meHeight = me.bottom - me.top;
int parentWidth = parent.right - parent.left,
parentHeight = parent.bottom - parent.top;
int widthOffset = (parentWidth - meWidth)/2,
heightOffset = (parentHeight - meHeight)/2;
me.left = parent.left + widthOffset;
me.top = parent.top + heightOffset;
SetWindowPos(hDlg,
NULL,
me.left,
me.top,
0,
0,
SWP_NOSIZE | SWP_NOZORDER);
}