Windows NT 4.0 source code leak
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.

601 lines
15 KiB

4 years ago
  1. /************************************************************************
  2. * *
  3. * FORMWND.CPP *
  4. * *
  5. * Copyright (C) Microsoft Corporation 1995 *
  6. * All Rights reserved. *
  7. * *
  8. ************************************************************************/
  9. #include "stdafx.h"
  10. #include "resource.h"
  11. #pragma hdrstop
  12. #include "hpjdoc.h"
  13. #include "formwnd.h"
  14. #include "setwinpo.h"
  15. #include "setwinco.h"
  16. #include "btnsec.h"
  17. #include "addalias.h"
  18. #include <limits.h>
  19. #include <string.h>
  20. #ifdef _DEBUG
  21. #undef THIS_FILE
  22. static char THIS_FILE[] = __FILE__;
  23. #endif
  24. static const DWORD aHelpIds[] = {
  25. IDC_COMBO_WINDOWS, IDH_COMBO_WINDOWS,
  26. IDC_BUTTON_ADD_WINDOW, IDH_BUTTON_ADD_WINDOW,
  27. IDC_BUTTON_REMOVE_WINDOW, IDH_BUTTON_REMOVE_WINDOW,
  28. IDC_EDIT_WINDOW_TITLE, IDH_EDIT_WINDOW_TITLE,
  29. IDC_RADIO_AUTOSIZE, IDH_RADIO_AUTOSIZE,
  30. IDC_RADIO_MAXIMIZE, IDH_RADIO_MAXIMIZE,
  31. IDC_BUTTON_SET_POS, IDH_BUTTON_SET_POS,
  32. IDC_BUTTON_BUTTONS, IDH_BUTTON_BUTTONS,
  33. IDC_BUTTON_COLORS, IDH_BUTTON_COLORS,
  34. IDC_TXT_LEFT, IDH_TXT_POSITION,
  35. IDC_TXT_TOP, IDH_TXT_POSITION,
  36. IDC_TXT_WIDTH, IDH_TXT_POSITION,
  37. IDC_TXT_HEIGHT, IDH_TXT_POSITION,
  38. 0, 0
  39. };
  40. CFormWnd::CFormWnd(CHpjDoc* pHpjDoc, CWnd* pParent)
  41. : CDialog(CFormWnd::IDD, pParent)
  42. {
  43. pDoc = pHpjDoc;
  44. cxScreen = GetSystemMetrics(SM_CXSCREEN);
  45. cyScreen = GetSystemMetrics(SM_CYSCREEN);
  46. if (pDoc->cwsmags) {
  47. cwsmags = pDoc->cwsmags;
  48. /*
  49. * Allocate and copy the various window structures to our own
  50. * copy. We'll restore the document version when we're asked
  51. * to save our data.
  52. */
  53. pwsmagBase = (PSTR) lcCalloc(sizeof(WSMAG) * cwsmags);
  54. memcpy(pwsmagBase, pDoc->pwsmagBase, sizeof(WSMAG) * cwsmags);
  55. }
  56. else
  57. pwsmagBase = NULL;
  58. //{{AFX_DATA_INIT(CFormWnd)
  59. m_cszTitle = "";
  60. m_cszComment = "";
  61. //}}AFX_DATA_INIT
  62. pwsmag = NULL;
  63. fInitialized = FALSE;
  64. pcombo = NULL;
  65. }
  66. CFormWnd::~CFormWnd()
  67. {
  68. if (pwsmagBase)
  69. lcFree(pwsmagBase);
  70. }
  71. static const char txtDefault[] = "default";
  72. void CFormWnd::DoDataExchange(CDataExchange* pDX)
  73. {
  74. CDialog::DoDataExchange(pDX);
  75. //{{AFX_DATA_MAP(CFormWnd)
  76. DDX_Text(pDX, IDC_EDIT_WINDOW_TITLE, m_cszTitle);
  77. DDV_MaxChars(pDX, m_cszTitle, CBMAXTITLE - 1);
  78. DDX_Text(pDX, IDC_EDIT_COMMENT, m_cszComment);
  79. //}}AFX_DATA_MAP
  80. if (pDX->m_bSaveAndValidate) {
  81. if (cwsmags > UCHAR_MAX) {
  82. MsgBox(IDS_TOO_MANY_WINDOWS);
  83. pDX->Fail();
  84. }
  85. else if (pDoc->options.fVersion3 && cwsmags > 6) {
  86. if (AfxMessageBox(IDS_TOO_MANY_WNDS_FOR_VERSION, MB_YESNO, 0)
  87. == IDNO)
  88. pDX->Fail();
  89. }
  90. }
  91. if (!pcombo)
  92. pcombo = (CComboBox*) GetDlgItem(IDC_COMBO_WINDOWS);
  93. // REVIEW: no dice -- we must duplicate the document's pwsmagBase,
  94. // and only set the document's version if the user clicks OK.
  95. if (!pDX->m_bSaveAndValidate) { // initialization
  96. if (!fInitialized) {
  97. SetChicagoDialogStyles(m_hWnd);
  98. fInitialized = TRUE;
  99. /*
  100. * If we don't have a window, then we add one now.
  101. * Without a window, the dialog doesn't make sense.
  102. */
  103. if (!pwsmagBase) {
  104. if (!AddWindow())
  105. SendMessage(WM_COMMAND, IDCANCEL, 0);
  106. return;
  107. }
  108. /*
  109. * We call ourselves whenever the combo-box changes, but
  110. * we only want to execute this code once.
  111. */
  112. if (pwsmagBase) {
  113. for (int i = 0; i < cwsmags; i++) {
  114. pwsmag = (PWSMAG)
  115. (sizeof(WSMAG) * i + pwsmagBase);
  116. pcombo->AddString(pwsmag->rgchMember);
  117. }
  118. pwsmag = (PWSMAG) pwsmagBase;
  119. }
  120. if (pwsmag) {
  121. pcombo->SelectString(-1, pwsmag->rgchMember);
  122. ((CEdit*) GetDlgItem(IDC_EDIT_WINDOW_TITLE))->
  123. SetWindowText(pwsmag->rgchCaption);
  124. ((CEdit*) GetDlgItem(IDC_EDIT_COMMENT))->
  125. SetWindowText((pwsmag->pcszComment ?
  126. *pwsmag->pcszComment : ""));
  127. }
  128. InitializeControls();
  129. }
  130. else {
  131. InitializeControls();
  132. }
  133. }
  134. else { // save the data
  135. if (pwsmagBase) {
  136. ASSERT(pwsmag);
  137. SaveTitleComment();
  138. if (cwsmags != pDoc->cwsmags) {
  139. pDoc->cwsmags = cwsmags;
  140. if (!cwsmags) {
  141. lcFree(pDoc->pwsmagBase);
  142. pDoc->pwsmagBase = NULL;
  143. return; // nothing more to do if no window defs
  144. }
  145. else {
  146. if (pDoc->pwsmagBase)
  147. pDoc->pwsmagBase =
  148. (PSTR) lcReAlloc(pDoc->pwsmagBase,
  149. sizeof(WSMAG) * cwsmags);
  150. else
  151. pDoc->pwsmagBase =
  152. (PSTR) lcCalloc(sizeof(WSMAG) * cwsmags);
  153. if (!pDoc->pwsmagBase)
  154. OOM();
  155. }
  156. }
  157. memcpy(pDoc->pwsmagBase, pwsmagBase, sizeof(WSMAG) * cwsmags);
  158. }
  159. }
  160. }
  161. BEGIN_MESSAGE_MAP(CFormWnd, CDialog)
  162. //{{AFX_MSG_MAP(CFormWnd)
  163. ON_BN_CLICKED(IDC_BUTTON_SET_POS, OnButtonSetPos)
  164. ON_BN_CLICKED(IDC_BUTTON_BUTTONS, OnButtons)
  165. ON_CBN_SELCHANGE(IDC_COMBO_WINDOWS, OnSelchangeComboWindows)
  166. ON_BN_CLICKED(IDC_CHECK_ABSOLUTE, OnCheckAbsolute)
  167. ON_BN_CLICKED(IDC_ON_TOP, OnCheckOnTop)
  168. ON_BN_CLICKED(IDC_BUTTON_DEFAULT_POS, OnButtonDefaultPos)
  169. ON_BN_CLICKED(IDC_BUTTON_COLORS, OnButtonColors)
  170. ON_BN_CLICKED(IDC_BUTTON_ADD_WINDOW, OnButtonAddWindow)
  171. ON_BN_CLICKED(IDC_BUTTON_REMOVE_WINDOW, OnButtonRemoveWindow)
  172. ON_BN_CLICKED(IDC_RADIO_STANDARD, OnRadioStandard)
  173. ON_BN_CLICKED(IDC_RADIO_AUTOSIZE, OnRadioAutosize)
  174. ON_BN_CLICKED(IDC_RADIO_MAXIMIZE, OnRadioMaximize)
  175. ON_BN_CLICKED(IDHELP, OnHelp)
  176. //}}AFX_MSG_MAP
  177. ON_MESSAGE(WM_CONTEXTMENU, OnContextMenu)
  178. ON_MESSAGE(WM_HELP, OnHelp)
  179. END_MESSAGE_MAP()
  180. /////////////////////////////////////////////////////////////////////////////
  181. // CFormWnd message handlers
  182. void CFormWnd::OnButtonSetPos()
  183. {
  184. CSetWinPos cwinpos(pwsmag, this);
  185. cwinpos.DoModal();
  186. InitializeSize(pwsmag);
  187. }
  188. LRESULT CFormWnd::OnContextMenu(WPARAM wParam, LPARAM lParam)
  189. {
  190. ::WinHelp((HWND) wParam,
  191. AfxGetApp()->m_pszHelpFilePath,
  192. HELP_CONTEXTMENU, (DWORD) (LPVOID) aHelpIds);
  193. return 0;
  194. }
  195. LRESULT CFormWnd::OnHelp(WPARAM wParam, LPARAM lParam)
  196. {
  197. ::WinHelp((HWND) ((LPHELPINFO) lParam)->hItemHandle,
  198. AfxGetApp()->m_pszHelpFilePath,
  199. HELP_WM_HELP, (DWORD) (LPVOID) aHelpIds);
  200. return 0;
  201. }
  202. void CFormWnd::OnButtons()
  203. {
  204. CBtnSec btnsec(pwsmag, (cwsmags > 1));
  205. btnsec.DoModal();
  206. }
  207. void CFormWnd::OnSelchangeComboWindows()
  208. {
  209. if (pwsmagBase) {
  210. SaveTitleComment();
  211. char szBuf[50];
  212. pcombo->GetLBText(pcombo->GetCurSel(), szBuf);
  213. for (int i = 0; i < cwsmags; i++) {
  214. PWSMAG pwsmagNew = (PWSMAG)
  215. (sizeof(WSMAG) * i + pwsmagBase);
  216. if (lstrcmpi(pwsmagNew->rgchMember, szBuf) == 0) {
  217. if (pwsmagNew == pwsmag)
  218. return; // nothing has changed
  219. else {
  220. pwsmag = pwsmagNew;
  221. ((CEdit*) GetDlgItem(IDC_EDIT_WINDOW_TITLE))->
  222. SetWindowText(pwsmag->rgchCaption);
  223. ((CEdit*) GetDlgItem(IDC_EDIT_COMMENT))->
  224. SetWindowText((pwsmag->pcszComment ?
  225. *pwsmag->pcszComment : ""));
  226. InitializeControls();
  227. return;
  228. }
  229. }
  230. }
  231. }
  232. }
  233. static const char txtMain[] = "main";
  234. void STDCALL CFormWnd::InitializeControls(void)
  235. {
  236. ((CButton*) GetDlgItem(IDC_BUTTON_SET_POS))->
  237. EnableWindow(pwsmag ? TRUE : FALSE);
  238. ((CButton*) GetDlgItem(IDC_BUTTON_BUTTONS))->
  239. EnableWindow(pwsmag ? TRUE : FALSE);
  240. ((CButton*) GetDlgItem(IDC_BUTTON_REMOVE_WINDOW))->
  241. EnableWindow(pwsmag ? TRUE : FALSE);
  242. ((CButton*) GetDlgItem(IDC_EDIT_WINDOW_TITLE))->
  243. EnableWindow(pwsmag ? TRUE : FALSE);
  244. ((CButton*) GetDlgItem(IDC_RADIO_STANDARD))->
  245. EnableWindow(pwsmag ? TRUE : FALSE);
  246. ((CButton*) GetDlgItem(IDC_RADIO_AUTOSIZE))->
  247. EnableWindow(pwsmag ? TRUE : FALSE);
  248. ((CButton*) GetDlgItem(IDC_RADIO_MAXIMIZE))->
  249. EnableWindow(pwsmag ? TRUE : FALSE);
  250. ((CButton*) GetDlgItem(IDC_BUTTON_COLORS))->
  251. EnableWindow(pwsmag ? TRUE : FALSE);
  252. ((CButton*) GetDlgItem(IDC_BUTTON_DEFAULT_POS))->
  253. EnableWindow(pwsmag ? TRUE : FALSE);
  254. ((CButton*) GetDlgItem(IDC_CHECK_ABSOLUTE))->
  255. EnableWindow(pwsmag ? TRUE : FALSE);
  256. ((CButton*) GetDlgItem(IDC_ON_TOP))->
  257. EnableWindow(pwsmag ? TRUE : FALSE);
  258. ((CEdit*) GetDlgItem(IDC_EDIT_COMMENT))->
  259. EnableWindow(pwsmag ? TRUE : FALSE);
  260. ((CEdit*) GetDlgItem(IDC_EDIT_WINDOW_TITLE))->
  261. EnableWindow(pwsmag ? TRUE : FALSE);
  262. if (pwsmag) {
  263. ((CButton*) GetDlgItem(IDC_CHECK_ABSOLUTE))->
  264. SetCheck(pwsmag->grf & FWSMAG_ABSOLUTE);
  265. ((CButton*) GetDlgItem(IDC_ON_TOP))->
  266. SetCheck(pwsmag->grf & FWSMAG_ON_TOP);
  267. InitializeSize(pwsmag);
  268. int idBtn;
  269. if (pwsmag->grf & FWSMAG_AUTO_SIZE)
  270. idBtn = IDC_RADIO_AUTOSIZE;
  271. else if (pwsmag->wMax & 1)
  272. idBtn = IDC_RADIO_MAXIMIZE;
  273. else
  274. idBtn = IDC_RADIO_STANDARD;
  275. CheckRadioButton(IDC_RADIO_MAXIMIZE, IDC_RADIO_STANDARD,
  276. idBtn);
  277. // Maximized windows can't be auto-sized.
  278. if (lstrcmpi(pwsmag->rgchMember, txtMain) == 0)
  279. ((CButton*) GetDlgItem(IDC_RADIO_AUTOSIZE))->
  280. EnableWindow(FALSE);
  281. else
  282. ((CButton*) GetDlgItem(IDC_RADIO_AUTOSIZE))->
  283. EnableWindow(TRUE);
  284. }
  285. }
  286. void STDCALL CFormWnd::InitializeSize(PWSMAG pSetWsmag)
  287. {
  288. char szBuf[20];
  289. if (pSetWsmag->grf & FWSMAG_X) {
  290. _itoa(pSetWsmag->x, szBuf, 10);
  291. ((CStatic*) GetDlgItem(IDC_TXT_LEFT))->
  292. SetWindowText(szBuf);
  293. }
  294. else
  295. ((CStatic*) GetDlgItem(IDC_TXT_LEFT))->
  296. SetWindowText(txtDefault);
  297. if (pSetWsmag->grf & FWSMAG_Y) {
  298. _itoa(pSetWsmag->y, szBuf, 10);
  299. ((CStatic*) GetDlgItem(IDC_TXT_TOP))->
  300. SetWindowText(szBuf);
  301. }
  302. else
  303. ((CStatic*) GetDlgItem(IDC_TXT_TOP))->
  304. SetWindowText(txtDefault);
  305. if (pSetWsmag->grf & FWSMAG_DX) {
  306. _itoa(pSetWsmag->dx, szBuf, 10);
  307. ((CStatic*) GetDlgItem(IDC_TXT_WIDTH))->
  308. SetWindowText(szBuf);
  309. }
  310. else
  311. ((CStatic*) GetDlgItem(IDC_TXT_WIDTH))->
  312. SetWindowText(txtDefault);
  313. if (pSetWsmag->grf & FWSMAG_DY) {
  314. _itoa(pSetWsmag->dy, szBuf, 10);
  315. ((CStatic*) GetDlgItem(IDC_TXT_HEIGHT))->
  316. SetWindowText(szBuf);
  317. }
  318. else
  319. ((CStatic*) GetDlgItem(IDC_TXT_HEIGHT))->
  320. SetWindowText(txtDefault);
  321. }
  322. void CFormWnd::OnCheckAbsolute()
  323. {
  324. CButton* pbtn = (CButton*) GetDlgItem(IDC_CHECK_ABSOLUTE);
  325. if (pbtn->GetCheck()) {
  326. if (pDoc->options.fVersion3) { // not allowed with a version 3 help file
  327. if (AfxMessageBox(IDS_NO_ABS_WITH_VER3, MB_YESNO, 0) == IDNO) {
  328. pbtn->SetCheck(FALSE);
  329. return;
  330. }
  331. else
  332. pDoc->options.fVersion3 = FALSE;
  333. }
  334. if (!(pwsmag->grf & FWSMAG_ABSOLUTE)) {
  335. if (pwsmag->grf & FWSMAG_X)
  336. pwsmag->x = MulDiv(pwsmag->x, cxScreen, dxVirtScreen);
  337. if (pwsmag->grf & FWSMAG_Y)
  338. pwsmag->y = MulDiv(pwsmag->y, cyScreen, dyVirtScreen);
  339. if (pwsmag->grf & FWSMAG_DX)
  340. pwsmag->dx = MulDiv(pwsmag->dx, cxScreen, dxVirtScreen);
  341. if (pwsmag->grf & FWSMAG_DY)
  342. pwsmag->dy = MulDiv(pwsmag->dy, cyScreen, dyVirtScreen);
  343. pwsmag->grf |= FWSMAG_ABSOLUTE;
  344. InitializeSize(pwsmag);
  345. }
  346. }
  347. else {
  348. if (pwsmag->grf & FWSMAG_ABSOLUTE) {
  349. if (pwsmag->grf & FWSMAG_X)
  350. pwsmag->x = MulDiv(pwsmag->x, dxVirtScreen, cxScreen);
  351. if (pwsmag->grf & FWSMAG_Y)
  352. pwsmag->y = MulDiv(pwsmag->y, dyVirtScreen, cyScreen);
  353. if (pwsmag->grf & FWSMAG_DX)
  354. pwsmag->dx = MulDiv(pwsmag->dx, dxVirtScreen, cxScreen);
  355. if (pwsmag->grf & FWSMAG_DY)
  356. pwsmag->dy = MulDiv(pwsmag->dy, dyVirtScreen, cyScreen);
  357. pwsmag->grf &= ~FWSMAG_ABSOLUTE;
  358. InitializeSize(pwsmag);
  359. }
  360. }
  361. }
  362. void CFormWnd::OnCheckOnTop()
  363. {
  364. if (((CButton*) GetDlgItem(IDC_ON_TOP))->GetCheck())
  365. pwsmag->grf |= FWSMAG_ON_TOP;
  366. else
  367. pwsmag->grf &= ~FWSMAG_ON_TOP;
  368. }
  369. void CFormWnd::OnButtonDefaultPos()
  370. {
  371. pwsmag->grf &= ~(FWSMAG_X | FWSMAG_Y | FWSMAG_DX | FWSMAG_DY);
  372. InitializeSize(pwsmag);
  373. }
  374. void CFormWnd::OnButtonColors()
  375. {
  376. CSetWinColor cwincolor(pwsmag, this);
  377. cwincolor.DoModal();
  378. }
  379. void CFormWnd::OnButtonAddWindow()
  380. {
  381. AddWindow();
  382. }
  383. void CFormWnd::OnButtonRemoveWindow()
  384. {
  385. if (pwsmagBase) {
  386. char szBuf[50];
  387. int cursel = pcombo->GetCurSel();
  388. pcombo->GetLBText(pcombo->GetCurSel(), szBuf);
  389. for (int i = 0; i < cwsmags; i++) {
  390. pwsmag = (PWSMAG)
  391. (sizeof(WSMAG) * i + pwsmagBase);
  392. if (lstrcmpi(pwsmag->rgchMember, szBuf) == 0) {
  393. if (i < cwsmags - 1) // fill in the hole
  394. memcpy(&pwsmag[0], &pwsmag[1],
  395. sizeof(WSMAG) * (cwsmags - i - 1));
  396. cwsmags--;
  397. if (cwsmags)
  398. pwsmagBase = (PSTR) lcReAlloc(pwsmagBase,
  399. sizeof(WSMAG) * cwsmags);
  400. else {
  401. lcClearFree(&pwsmagBase);
  402. pwsmag = NULL;
  403. }
  404. pcombo->DeleteString(cursel);
  405. if (cwsmags) {
  406. pwsmag = (PWSMAG)
  407. (sizeof(WSMAG) * (cwsmags - 1) + pwsmagBase);
  408. ((CEdit*) GetDlgItem(IDC_EDIT_WINDOW_TITLE))->
  409. SetWindowText(pwsmag->rgchCaption);
  410. ((CEdit*) GetDlgItem(IDC_EDIT_COMMENT))->
  411. SetWindowText((pwsmag->pcszComment ?
  412. *pwsmag->pcszComment : ""));
  413. }
  414. InitializeControls();
  415. if (pwsmag)
  416. pcombo->SelectString(-1, pwsmag->rgchMember);
  417. else
  418. pcombo->ResetContent();
  419. return;
  420. }
  421. }
  422. ASSERT(i < cwsmags); // if we assert, we didn't find the window
  423. }
  424. }
  425. BOOL STDCALL CFormWnd::AddWindow(void)
  426. {
  427. CAddAlias addwindow(this);
  428. addwindow.idDlgCaption = IDS_ADD_WINDOW_CAPTION;
  429. addwindow.idStr1Prompt = IDS_ADD_WINDOW;
  430. addwindow.idStr2Prompt = CAddAlias::HIDE_CONTROL;
  431. addwindow.cbMaxStr1 = 8; // window names can only have 8 characters
  432. addwindow.idEmptyStr1 = IDS_EMPTY_WINDOW;
  433. DisplayDialog:
  434. if (addwindow.DoModal() == IDOK) {
  435. if (!pwsmagBase) {
  436. pwsmagBase =(PSTR) lcCalloc(sizeof(WSMAG));
  437. if (!pwsmagBase)
  438. OOM(); // should we save first?
  439. cwsmags = 1;
  440. }
  441. else {
  442. for (int i = 0; i < cwsmags; i++) {
  443. pwsmag = (PWSMAG)
  444. (sizeof(WSMAG) * i + pwsmagBase);
  445. if (_stricmp(addwindow.m_cszContext,
  446. pwsmag->rgchMember) == 0) {
  447. CString cstr;
  448. AfxFormatString1(cstr, IDS_WINDOW_ALREADY_ADDED,
  449. addwindow.m_cszContext);
  450. AfxMessageBox(cstr);
  451. goto DisplayDialog;
  452. }
  453. }
  454. cwsmags++;
  455. pwsmagBase = (PSTR) lcReAlloc(pwsmagBase,
  456. sizeof(WSMAG) * cwsmags);
  457. if (!pwsmagBase)
  458. OOM(); // should we save first?
  459. }
  460. pwsmag = (PWSMAG)
  461. (sizeof(WSMAG) * (cwsmags - 1) + pwsmagBase);
  462. strcpy(pwsmag->rgchMember, addwindow.m_cszContext);
  463. if (!addwindow.m_str3.IsEmpty()) {
  464. m_cszComment = addwindow.m_str3;
  465. ((CEdit*) GetDlgItem(IDC_EDIT_COMMENT))->
  466. SetWindowText(m_cszComment);
  467. }
  468. ((CEdit*) GetDlgItem(IDC_EDIT_WINDOW_TITLE))->
  469. SetWindowText(pwsmag->rgchCaption);
  470. pcombo->AddString(pwsmag->rgchMember);
  471. pcombo->SelectString(-1, pwsmag->rgchMember);
  472. InitializeControls();
  473. return TRUE;
  474. }
  475. return FALSE;
  476. }
  477. void CFormWnd::OnRadioStandard()
  478. {
  479. ASSERT(pwsmag);
  480. pwsmag->grf &= ~(FWSMAG_AUTO_SIZE | FWSMAG_MAXIMIZE);
  481. pwsmag->wMax &= ~(FWSMAG_WMAX_MAXIMIZE);
  482. }
  483. void CFormWnd::OnRadioAutosize()
  484. {
  485. ASSERT(pwsmag);
  486. pwsmag->grf &= ~(FWSMAG_MAXIMIZE);
  487. pwsmag->grf |= FWSMAG_AUTO_SIZE;
  488. pwsmag->wMax &= ~(FWSMAG_WMAX_MAXIMIZE);
  489. }
  490. void CFormWnd::OnRadioMaximize()
  491. {
  492. ASSERT(pwsmag);
  493. pwsmag->grf &= ~(FWSMAG_AUTO_SIZE);
  494. pwsmag->grf |= FWSMAG_MAXIMIZE;
  495. pwsmag->wMax |= FWSMAG_WMAX_MAXIMIZE;
  496. }
  497. void CFormWnd::SaveTitleComment(void)
  498. {
  499. ((CEdit*) GetDlgItem(IDC_EDIT_WINDOW_TITLE))->
  500. GetWindowText(m_cszTitle);
  501. ((CEdit*) GetDlgItem(IDC_EDIT_COMMENT))->
  502. GetWindowText(m_cszComment);
  503. if (!m_cszTitle.IsEmpty()) {
  504. pwsmag->grf |= FWSMAG_CAPTION;
  505. lstrcpyn(pwsmag->rgchCaption, m_cszTitle, CBMAXTITLE);
  506. }
  507. else {
  508. pwsmag->grf &= ~FWSMAG_CAPTION;
  509. *pwsmag->rgchCaption = '\0';
  510. }
  511. if (!m_cszComment.IsEmpty()) {
  512. if (pwsmag->pcszComment)
  513. *pwsmag->pcszComment = m_cszComment;
  514. else
  515. pwsmag->pcszComment = new CString(m_cszComment);
  516. }
  517. else if (pwsmag->pcszComment) {
  518. delete pwsmag->pcszComment;
  519. pwsmag->pcszComment = NULL;
  520. }
  521. }
  522. void CFormWnd::OnHelp()
  523. {
  524. HelpOverview(m_hWnd, IDH_HCW_FORM_WINDOW);
  525. }