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