1cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// Windows/Control/Dialog.cpp
2cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
3cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "StdAfx.h"
4cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
5cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _UNICODE
6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../Common/StringConvert.h"
7cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif
8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
9cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "Dialog.h"
10cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
11cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyextern HINSTANCE g_hInstance;
12cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _UNICODE
13cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyextern bool g_IsNT;
14cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif
15cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
16cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckynamespace NWindows {
17cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckynamespace NControl {
18cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
19cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystatic INT_PTR APIENTRY DialogProcedure(HWND dialogHWND, UINT message, WPARAM wParam, LPARAM lParam)
20cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
21cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CWindow tempDialog(dialogHWND);
22cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (message == WM_INITDIALOG)
23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    tempDialog.SetUserDataLongPtr(lParam);
24cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CDialog *dialog = (CDialog *)(tempDialog.GetUserDataLongPtr());
25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (dialog == NULL)
26cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return FALSE;
27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (message == WM_INITDIALOG)
28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    dialog->Attach(dialogHWND);
29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  try { return BoolToBOOL(dialog->OnMessage(message, wParam, lParam)); }
30cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  catch(...) { return TRUE; }
31cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
32cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CDialog::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  switch (message)
36cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_INITDIALOG: return OnInit();
38cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_COMMAND: return OnCommand(wParam, lParam);
39cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_NOTIFY: return OnNotify((UINT)wParam, (LPNMHDR) lParam);
40cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_TIMER: return OnTimer(wParam, lParam);
41cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_SIZE: return OnSize(wParam, LOWORD(lParam), HIWORD(lParam));
42cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_HELP: OnHelp(); return true;
43cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    /*
44cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        OnHelp(
45cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky          #ifdef UNDER_CE
46cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky          (void *)
47cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky          #else
48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky          (LPHELPINFO)
49cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky          #endif
50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky          lParam);
51cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        return true;
52cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    */
53cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    default: return false;
54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
55cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
56cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
57cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CDialog::OnCommand(WPARAM wParam, LPARAM lParam)
58cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
59cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return OnCommand(HIWORD(wParam), LOWORD(wParam), lParam);
60cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
61cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
62cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CDialog::OnCommand(int code, int itemID, LPARAM lParam)
63cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
64cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (code == BN_CLICKED)
65cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return OnButtonClicked(itemID, (HWND)lParam);
66cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return false;
67cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
68cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
69cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CDialog::OnButtonClicked(int buttonID, HWND /* buttonHWND */)
70cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
71cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  switch (buttonID)
72cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
73cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case IDOK: OnOK(); break;
74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case IDCANCEL: OnCancel(); break;
75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case IDHELP: OnHelp(); break;
76cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    default: return false;
77cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
78cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return true;
79cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
80cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
81cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystatic bool GetWorkAreaRect(RECT *rect)
82cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  // use another function for multi-monitor.
84cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return BOOLToBool(::SystemParametersInfo(SPI_GETWORKAREA, 0, rect, 0));
85cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
87cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool IsDialogSizeOK(int xSize, int ySize)
88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
89cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  // it returns for system font. Real font uses another values
90cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  LONG v = GetDialogBaseUnits();
91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  int x = LOWORD(v);
92cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  int y = HIWORD(v);
93cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
94cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  RECT rect;
95cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  GetWorkAreaRect(&rect);
96cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  int wx = RECT_SIZE_X(rect);
97cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  int wy = RECT_SIZE_Y(rect);
98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return
99cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    xSize / 4 * x <= wx &&
100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    ySize / 8 * y <= wy;
101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
102cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CDialog::GetMargins(int margin, int &x, int &y)
104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  x = margin;
106cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  y = margin;
107cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  RECT rect;
108cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  rect.left = 0;
109cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  rect.top = 0;
110cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  rect.right = margin;
111cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  rect.bottom = margin;
112cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (!MapRect(&rect))
113cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return false;
114cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  x = rect.right - rect.left;
115cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  y = rect.bottom - rect.top;
116cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return true;
117cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
118cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
119cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyint CDialog::Units_To_Pixels_X(int units)
120cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
121cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  RECT rect;
122cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  rect.left = 0;
123cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  rect.top = 0;
124cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  rect.right = units;
125cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  rect.bottom = units;
126cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (!MapRect(&rect))
127cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return units * 3 / 2;
128cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return rect.right - rect.left;
129cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
130cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
131cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CDialog::GetItemSizes(int id, int &x, int &y)
132cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
133cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  RECT rect;
134cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (!::GetWindowRect(GetItem(id), &rect))
135cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return false;
136cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  x = RECT_SIZE_X(rect);
137cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  y = RECT_SIZE_Y(rect);
138cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return true;
139cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
140cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
141cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyvoid CDialog::GetClientRectOfItem(int id, RECT &rect)
142cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
143cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  ::GetWindowRect(GetItem(id), &rect);
144cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  ScreenToClient(&rect);
145cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
146cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
147cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CDialog::MoveItem(int id, int x, int y, int width, int height, bool repaint)
148cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
149cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return BOOLToBool(::MoveWindow(GetItem(id), x, y, width, height, BoolToBOOL(repaint)));
150cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
151cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
152cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyvoid CDialog::NormalizeSize(bool fullNormalize)
153cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
154cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  RECT workRect;
155cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  GetWorkAreaRect(&workRect);
156cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  int xSize = RECT_SIZE_X(workRect);
157cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  int ySize = RECT_SIZE_Y(workRect);
158cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  RECT rect;
159cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  GetWindowRect(&rect);
160cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  int xSize2 = RECT_SIZE_X(rect);
161cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  int ySize2 = RECT_SIZE_Y(rect);
162cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool needMove = (xSize2 > xSize || ySize2 > ySize);
163cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (xSize2 > xSize || (needMove && fullNormalize))
164cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
165cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    rect.left = workRect.left;
166cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    rect.right = workRect.right;
167cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    xSize2 = xSize;
168cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
169cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (ySize2 > ySize || (needMove && fullNormalize))
170cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
171cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    rect.top = workRect.top;
172cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    rect.bottom = workRect.bottom;
173cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    ySize2 = ySize;
174cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
175cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (needMove)
176cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
177cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (fullNormalize)
178cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      Show(SW_SHOWMAXIMIZED);
179cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    else
180cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      Move(rect.left, rect.top, xSize2, ySize2, true);
181cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
182cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
183cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
184cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyvoid CDialog::NormalizePosition()
185cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
186cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  RECT workRect, rect;
187cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  GetWorkAreaRect(&workRect);
188cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  GetWindowRect(&rect);
189cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (rect.bottom > workRect.bottom && rect.top > workRect.top)
190cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    Move(rect.left, workRect.top, RECT_SIZE_X(rect), RECT_SIZE_Y(rect), true);
191cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
192cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
193cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CModelessDialog::Create(LPCTSTR templateName, HWND parentWindow)
194cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
195cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  HWND aHWND = CreateDialogParam(g_hInstance, templateName, parentWindow, DialogProcedure, (LPARAM)this);
196cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (aHWND == 0)
197cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return false;
198cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  Attach(aHWND);
199cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return true;
200cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
201cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
202cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckyINT_PTR CModalDialog::Create(LPCTSTR templateName, HWND parentWindow)
203cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
204cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return DialogBoxParam(g_hInstance, templateName, parentWindow, DialogProcedure, (LPARAM)this);
205cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
206cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
207cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _UNICODE
208cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
209cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CModelessDialog::Create(LPCWSTR templateName, HWND parentWindow)
210cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
211cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  HWND aHWND;
212cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (g_IsNT)
213cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    aHWND = CreateDialogParamW(g_hInstance, templateName, parentWindow, DialogProcedure, (LPARAM)this);
214cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  else
215cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
216cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    AString name;
217cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    LPCSTR templateNameA;
218cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (IS_INTRESOURCE(templateName))
219cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      templateNameA = (LPCSTR)templateName;
220cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    else
221cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    {
222cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      name = GetSystemString(templateName);
223cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      templateNameA = name;
224cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    }
225cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    aHWND = CreateDialogParamA(g_hInstance, templateNameA, parentWindow, DialogProcedure, (LPARAM)this);
226cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
227cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (aHWND == 0)
228cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return false;
229cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  Attach(aHWND);
230cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return true;
231cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
232cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
233cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckyINT_PTR CModalDialog::Create(LPCWSTR templateName, HWND parentWindow)
234cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
235cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (g_IsNT)
236cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return DialogBoxParamW(g_hInstance, templateName, parentWindow, DialogProcedure, (LPARAM)this);
237cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  AString name;
238cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  LPCSTR templateNameA;
239cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (IS_INTRESOURCE(templateName))
240cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    templateNameA = (LPCSTR)templateName;
241cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  else
242cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
243cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    name = GetSystemString(templateName);
244cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    templateNameA = name;
245cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
246cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return DialogBoxParamA(g_hInstance, templateNameA, parentWindow, DialogProcedure, (LPARAM)this);
247cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
248cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif
249cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
250cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}}
251