00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
#include "ICMUI.H"
00019
00020
00021
00022
00023
00024 CDialog::CDialog(HINSTANCE hiWhere,
int id, HWND hwndParent) {
00025
m_idMain =
id;
00026
m_hwndParent = hwndParent;
00027
m_hiWhere = hiWhere;
00028
m_bIsModal =
FALSE;
00029
m_hwnd =
NULL;
00030
m_dpHook =
NULL;
00031
m_lpHook = 0;
00032 }
00033
00034 CDialog::CDialog(
CDialog &cdOwner,
int id) {
00035
m_idMain =
id;
00036
m_hwndParent = cdOwner.
m_hwnd;
00037
m_hiWhere = cdOwner.
m_hiWhere;
00038
m_bIsModal =
FALSE;
00039
m_hwnd =
NULL;
00040
m_dpHook =
NULL;
00041
m_lpHook = 0;
00042 }
00043
00044
00045
00046 CDialog::~CDialog() {
00047
Destroy();
00048 }
00049
00050
00051
00052 LONG
CDialog::DoModal() {
00053
m_bIsModal =
TRUE;
00054
return (LONG)DialogBoxParam(
m_hiWhere, MAKEINTRESOURCE(
m_idMain),
m_hwndParent,
00055
CDialog::DialogProc, (LPARAM)
this);
00056 }
00057
00058
00059
00060 void CDialog::Create() {
00061
if (!
m_bIsModal &&
m_hwnd)
00062
return;
00063
00064
m_bIsModal =
FALSE;
00065 CreateDialogParam(
m_hiWhere, MAKEINTRESOURCE(
m_idMain),
00066
m_hwndParent,
CDialog::DialogProc, (LPARAM)
this);
00067 }
00068
00069
00070
00071 void CDialog::Destroy() {
00072
if (!
m_bIsModal &&
m_hwnd) {
00073
DestroyWindow(
m_hwnd);
00074
m_hwnd =
NULL;
00075 }
00076 }
00077
00078
00079
00080
00081
00082
00083 INT_PTR CALLBACK
CDialog::DialogProc(HWND hwndMe,
UINT uMsg, WPARAM wp,
00084 LPARAM lp) {
00085
00086
CDialog *pcdMe = (
CDialog *)
GetWindowLongPtr(hwndMe, DWLP_USER);
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
if (uMsg != WM_INITDIALOG && pcdMe && pcdMe ->
m_dpHook &&
00097 (*pcdMe ->
m_dpHook)(hwndMe, uMsg, wp, lp))
00098
return TRUE;
00099
00100
switch (uMsg) {
00101
00102
case WM_INITDIALOG:
00103
00104
00105
00106 pcdMe = (
CDialog *) lp;
00107
00108
SetWindowLongPtr(hwndMe, DWLP_USER, (LONG_PTR)pcdMe);
00109 pcdMe ->
m_hwnd = hwndMe;
00110
00111
00112
00113
if (!pcdMe ->
m_dpHook)
00114
return pcdMe ->
OnInit();
00115
else {
00116
00117
00118
BOOL bReturn = pcdMe ->
OnInit();
00119
return (*pcdMe ->
m_dpHook)(hwndMe, uMsg, wp,
00120 pcdMe ->
m_lpHook) && bReturn;
00121 }
00122
00123
case WM_COMMAND:
00124
00125
return pcdMe ->
OnCommand(HIWORD(wp), LOWORD(wp), (HWND) lp);
00126
00127
case WM_NOTIFY:
00128
00129
return pcdMe ->
OnNotify((
int) wp, (LPNMHDR) lp);
00130
00131
case WM_HELP:
00132
00133
return pcdMe ->
OnHelp((LPHELPINFO) lp);
00134
00135
case WM_CONTEXTMENU:
00136
00137
return pcdMe ->
OnContextMenu((HWND) wp);
00138
00139 }
00140
00141
return FALSE;
00142 }
00143
00144
00145
00146
00147 void CDialog::Adjust(RECT& rc) {
00148
SetWindowPos(
m_hwnd, HWND_TOP, rc.left, rc.top, 0, 0,
00149 SWP_NOACTIVATE | SWP_NOSIZE | SWP_SHOWWINDOW);
00150 }