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.

1313 lines
39 KiB

  1. /*************************************************
  2. * convdlg.c *
  3. * *
  4. * Copyright (C) 1995-1999 Microsoft Inc. *
  5. * *
  6. *************************************************/
  7. #include <string.h>
  8. #include "prop.h"
  9. #include "upimeres.h"
  10. #include <regstr.h>
  11. #include <htmlhelp.h>
  12. #ifdef UNICODE
  13. extern TCHAR Title[];
  14. extern TCHAR szVer[];
  15. #else
  16. extern BYTE Title[];
  17. extern BYTE szVer[];
  18. #endif
  19. /*****************************************************************************
  20. FUNCTION: ConvDialogProc(HWND, UINT, WPARAM, LPARAM)
  21. PURPOSE: Processes messages for "conv" property sheet.
  22. PARAMETERS:
  23. hdlg - window handle of the property sheet
  24. wMessage - type of message
  25. wparam - message-specific information
  26. lparam - message-specific information
  27. RETURN VALUE:
  28. TRUE - message handled
  29. FALSE - message not handled
  30. HISTORY:
  31. 04-18-95 Yehfew Tie Created.
  32. ****************************************************************************/
  33. INT_PTR CALLBACK ConvDialogProc(HWND hdlg,
  34. UINT uMessage,
  35. WPARAM wparam,
  36. LPARAM lparam)
  37. {
  38. LPNMHDR lpnmhdr;
  39. static DWORD dwDesOffset,dwDesLen;
  40. static DWORD dwRuleOffset,dwRuleLen;
  41. static TCHAR szMbName[MAX_PATH];
  42. static TCHAR szSrcName[MAX_PATH];
  43. static TCHAR _szStr[MAX_PATH];
  44. static BOOL bModify;
  45. LPRULE lpRule;
  46. int i;
  47. static DESCRIPTION Descript;
  48. switch (uMessage)
  49. {
  50. case WM_INITDIALOG:
  51. {
  52. //install conv sub class
  53. lpConvProc = (FARPROC)SetWindowLongPtr(GetDlgItem(hdlg,IDC_LIST),
  54. GWLP_WNDPROC,(LONG_PTR)ConvEditProc);
  55. SendDlgItemMessage(hdlg,IDC_IMENAME,EM_LIMITTEXT,24,0L);
  56. SendDlgItemMessage(hdlg,IDC_USEDCODE,EM_LIMITTEXT,MAXUSEDCODES,0L);
  57. SetConvDisable(hdlg);
  58. PropSheet_CancelToClose(GetParent(hdlg));
  59. break;
  60. }
  61. case WM_DESTROY:
  62. if(hRule)
  63. GlobalFree(hRule);
  64. if(hEncode)
  65. GlobalFree(hEncode);
  66. break;
  67. case WM_NOTIFY:
  68. lpnmhdr = (NMHDR FAR *)lparam;
  69. switch (lpnmhdr->code)
  70. {
  71. case PSN_SETACTIVE:
  72. hRule = GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,
  73. sizeof(RULE)*MAXCODELEN);
  74. hEncode = GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,
  75. NUMENCODEAREA*sizeof(ENCODEAREA));
  76. if(!hRule || !hEncode)
  77. ProcessError(ERR_OUTOFMEMORY,hdlg,ERR);
  78. if ( hEncode )
  79. ConvInitEncode(hEncode);
  80. break;
  81. case PSN_APPLY:
  82. if(bModify) {
  83. LoadString(NULL, IDS_FILEMODIFY, _szStr, sizeof(_szStr)/sizeof(TCHAR));
  84. #ifdef UNICODE
  85. {
  86. TCHAR UniTmp[] = {0x521B, 0x5EFA, 0x8F93, 0x5165, 0x6CD5, 0x9875, 0x9762, 0x4E2D, 0x005C, 0x006E, 0x005C, 0x0027, 0x0025, 0x0077, 0x0073, 0x005C, 0x0027, 0x005C, 0x006E, 0x0025, 0x0077, 0x0073, 0x0000};
  87. wsprintf(szMbName,UniTmp,szSrcName,_szStr);
  88. }
  89. #else
  90. wsprintf(szMbName,"�������뷨ҳ����\n\'%s\'\n%s",szSrcName,_szStr);
  91. #endif
  92. if(ErrMessage(hdlg,szMbName)) {
  93. SendMessage(hdlg,WM_COMMAND,IDC_SAVE,0L);
  94. }
  95. }
  96. break;
  97. case PSN_RESET:
  98. break;
  99. case PSN_QUERYCANCEL:
  100. break;
  101. case PSN_HELP:
  102. break;
  103. case PSN_KILLACTIVE:
  104. break;
  105. default:
  106. break;
  107. }
  108. break;
  109. case WM_COMMAND:
  110. switch (LOWORD(wparam))
  111. {
  112. case IDC_BROWSE:
  113. if(bModify) {
  114. TCHAR errString[MAX_PATH];
  115. LoadString(NULL, IDS_FILEMODIFY, _szStr, sizeof(_szStr)/sizeof(TCHAR));
  116. wsprintf(errString,TEXT("\'%s\'%s"),szSrcName,_szStr);
  117. if(ErrMessage(hdlg,errString))
  118. SendMessage(hdlg,WM_COMMAND,IDC_SAVE,0L);
  119. }
  120. SetDlgItemText(hdlg,IDC_MBNAME,szMbName);
  121. {
  122. #ifdef UNICODE
  123. static TCHAR szTitle[] = {0x6253, 0x5F00, 0x0000};
  124. #else
  125. TCHAR szTitle[MAX_PATH];
  126. strcpy(szTitle,"����");
  127. #endif
  128. if(!TxtFileOpenDlg(hdlg,_szStr,szTitle))
  129. break;
  130. }
  131. lstrcpy(szSrcName,_szStr);
  132. bModify = FALSE;
  133. memset(_szStr, 0, MAX_PATH);
  134. SetDlgItemText(hdlg,IDC_EDITBOX,_szStr);
  135. SendDlgItemMessage(hdlg,IDC_LIST,LB_RESETCONTENT,0,0L);
  136. {
  137. LPTSTR lpString;
  138. if((lpString = _tcsrchr(szSrcName,TEXT('\\')))!=NULL)
  139. SetDlgItemText(hdlg,IDC_SRCNAME, lpString+1);
  140. lstrcpy(szMbName, szSrcName);
  141. lstrcpy(_szStr, szSrcName);
  142. if((lpString = _tcsrchr(szMbName,TEXT('.')))!=NULL)
  143. *lpString = 0;
  144. lstrcat(szMbName,TEXT(MbExt));
  145. }
  146. SetDlgItemText(hdlg,IDC_MBNAME,szMbName);
  147. {
  148. int nRetValue;
  149. nRetValue = ConvGetDescript(hdlg, szSrcName,
  150. &dwDesOffset, &dwDesLen, &Descript, FALSE);
  151. if(nRetValue ==(-ERR_FILENOTOPEN)) {
  152. szSrcName[0]=0;
  153. lstrcpy(szMbName, szSrcName);
  154. SetDlgItemText(hdlg,IDC_SRCNAME,szSrcName);
  155. SetDlgItemText(hdlg,IDC_MBNAME,szMbName);
  156. MessageBeep((UINT)-1);
  157. break;
  158. }
  159. }
  160. if(!(lpRule = GlobalLock(hRule)) ) {
  161. ProcessError(ERR_GLOBALLOCK,hdlg,ERR);
  162. break;
  163. }
  164. if(ConvGetRule(hdlg, szSrcName, &dwRuleOffset, &dwRuleLen,
  165. lpRule, &Descript)==(-ERR_FILENOTOPEN))
  166. {
  167. szSrcName[0]=0;
  168. lstrcpy(szMbName,szSrcName);
  169. SetDlgItemText(hdlg,IDC_SRCNAME,szSrcName);
  170. SetDlgItemText(hdlg,IDC_MBNAME,szMbName);
  171. GlobalUnlock(hRule);
  172. MessageBeep((UINT)-1);
  173. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),FALSE);
  174. break;
  175. }
  176. SetDlgDescript(hdlg,&Descript);
  177. SetDlgRuleStr(hdlg,Descript.wNumRules,lpRule);
  178. SetDlgItemText(hdlg,IDC_MBNAME,szMbName);
  179. GlobalUnlock(hRule);
  180. SetConvEnable(hdlg);
  181. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),FALSE);
  182. SendMessage(GetDlgItem(hdlg,ID_FILEOPEN),BM_SETSTYLE,BS_PUSHBUTTON,0L);
  183. SendMessage(GetDlgItem(hdlg,IDC_CONV),BM_SETSTYLE,BS_DEFPUSHBUTTON,TRUE);
  184. SetFocus(GetDlgItem(hdlg,IDC_CONV));
  185. break;
  186. case IDC_MBNAME:
  187. GetDlgItemText(hdlg,IDC_MBNAME,szMbName,256);
  188. if(lstrlen(szMbName) == 0) {
  189. EnableWindow(GetDlgItem(hdlg,IDC_CONV),FALSE);
  190. break;
  191. }
  192. else {
  193. GetDlgItemText(hdlg,IDC_IMENAME,_szStr,32);
  194. if(lstrlen(_szStr) != 0 && Descript.wMaxCodes != 0)
  195. EnableWindow(GetDlgItem(hdlg,IDC_CONV),TRUE);
  196. else
  197. EnableWindow(GetDlgItem(hdlg,IDC_CONV),FALSE);
  198. }
  199. break;
  200. case IDC_IMENAME:
  201. GetDlgItemText(hdlg,IDC_IMENAME,_szStr,128);
  202. _szStr[128]=0;
  203. if(lstrlen(_szStr) == 0) {
  204. EnableWindow(GetDlgItem(hdlg,IDC_CONV),FALSE);
  205. break;
  206. }
  207. else {
  208. GetDlgItemText(hdlg,IDC_MBNAME,szMbName,256);
  209. if(lstrlen(szMbName) != 0 && Descript.wMaxCodes != 0)
  210. EnableWindow(GetDlgItem(hdlg,IDC_CONV),TRUE);
  211. else
  212. EnableWindow(GetDlgItem(hdlg,IDC_CONV),FALSE);
  213. }
  214. if(lstrcmpi(Descript.szName,_szStr)==0)
  215. break;
  216. bModify = TRUE;
  217. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),TRUE);
  218. break;
  219. case IDC_MAXCODES:
  220. {
  221. int nMaxCodes;
  222. nMaxCodes = GetDlgItemInt (hdlg,IDC_MAXCODES,NULL,FALSE);
  223. if(nMaxCodes > MAXCODELEN) {
  224. MessageBeep((UINT)-1);
  225. SetDlgItemInt (hdlg,IDC_MAXCODES,MAXCODELEN,FALSE);
  226. Descript.wMaxCodes = MAXCODELEN;
  227. }
  228. if(Descript.wMaxCodes != nMaxCodes) {
  229. bModify = TRUE;
  230. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),TRUE);
  231. }
  232. break;
  233. }
  234. case IDC_USEDCODE:
  235. GetDlgItemText(hdlg,IDC_USEDCODE,_szStr,sizeof(_szStr)/sizeof(TCHAR));
  236. if(lstrlen(_szStr) == 0)
  237. EnableWindow(GetDlgItem(hdlg,IDC_CONV),FALSE);
  238. if(lstrcmpi(Descript.szUsedCode,_szStr)==0)
  239. break;
  240. bModify = TRUE;
  241. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),TRUE);
  242. break;
  243. case IDC_WILDCHAR:
  244. GetDlgItemText(hdlg,IDC_WILDCHAR,_szStr,sizeof(_szStr)/sizeof(TCHAR));
  245. if(lstrlen(_szStr)==0 ) {
  246. if( Descript.cWildChar!=0) {
  247. bModify = TRUE;
  248. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),TRUE);
  249. }
  250. break;
  251. }
  252. if(lstrlen(_szStr)>1) {
  253. MessageBeep((UINT)-1);
  254. _szStr[0]=0;
  255. SetDlgItemText(hdlg,IDC_WILDCHAR,_szStr);
  256. break;
  257. }
  258. {
  259. TCHAR WildChar;
  260. WildChar=_szStr[0];
  261. if(WildChar != Descript.cWildChar) {
  262. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),TRUE);
  263. bModify = TRUE;
  264. }
  265. GetDlgItemText(hdlg,IDC_USEDCODE,_szStr,sizeof(_szStr)/sizeof(TCHAR));
  266. if(_tcschr(_szStr,WildChar) != NULL) {
  267. _szStr[0]=0;
  268. SetDlgItemText(hdlg,IDC_WILDCHAR,_szStr);
  269. MessageBeep((UINT)-1);
  270. break;
  271. }
  272. }
  273. break;
  274. case IDC_SINGLEELEMENT:
  275. case IDC_MULTIELEMENT:
  276. if(Descript.byMaxElement == (BYTE)(IsDlgButtonChecked(hdlg,IDC_MULTIELEMENT)?2:1))
  277. break;
  278. Descript.byMaxElement = 1 + Descript.byMaxElement%2;
  279. bModify = TRUE;
  280. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),TRUE);
  281. break;
  282. case IDC_ADD:
  283. {
  284. FARPROC lpProcInfo;
  285. szRuleStr[0] = 0;
  286. if(Descript.wNumRules >= MAXCODELEN) {
  287. ProcessError(ERR_RULENUM,hdlg,WARNING);
  288. break;
  289. }
  290. lpProcInfo = MakeProcInstance((FARPROC)AddRuleDlg, hInst);
  291. DialogBox(hInst,
  292. MAKEINTRESOURCE(IDD_ADDRULE),
  293. hdlg,
  294. (DLGPROC)AddRuleDlg);
  295. FreeProcInstance(lpProcInfo);
  296. bModify = TRUE;
  297. break;
  298. }
  299. case IDC_MODIFY:
  300. {
  301. FARPROC lpProcInfo;
  302. int nSelect;
  303. nSelect = (INT)SendDlgItemMessage(hdlg,
  304. IDC_LIST,
  305. LB_GETCURSEL,
  306. (WPARAM)0,
  307. (LPARAM)0);
  308. if(nSelect == LB_ERR) {
  309. MessageBeep((UINT)-1);
  310. break;
  311. }
  312. SendDlgItemMessage(hdlg,IDC_LIST,LB_GETTEXT,nSelect,(LPARAM)szRuleStr);
  313. lpProcInfo = MakeProcInstance((FARPROC)ModiRuleDlg, hInst);
  314. DialogBox(hInst,
  315. MAKEINTRESOURCE(IDD_EDITRULE),
  316. hdlg,
  317. (DLGPROC)ModiRuleDlg);
  318. FreeProcInstance(lpProcInfo);
  319. break;
  320. }
  321. case IDC_DEL:
  322. {
  323. int nSelect;
  324. nSelect = (INT)SendDlgItemMessage(hdlg,
  325. IDC_LIST,
  326. LB_GETCURSEL,
  327. (WPARAM)0,
  328. (LPARAM)0);
  329. if(nSelect != LB_ERR) {
  330. SendDlgItemMessage(hdlg,IDC_LIST,LB_DELETESTRING,
  331. nSelect,(LPARAM)0);
  332. if(!(lpRule = GlobalLock(hRule)) ) {
  333. ProcessError(ERR_GLOBALLOCK,hdlg,ERR);
  334. break;
  335. }
  336. DelSelRule(Descript.wNumRules,(WORD)nSelect,lpRule);
  337. Descript.wNumRules--;
  338. GlobalUnlock(hRule);
  339. bModify = TRUE;
  340. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),TRUE);
  341. SetFocus(GetDlgItem(hdlg,IDC_LIST));
  342. SendDlgItemMessage(hdlg,IDC_LIST,LB_SETCURSEL,nSelect,0L);
  343. if((nSelect=(INT)SendDlgItemMessage(hdlg,IDC_LIST,
  344. LB_GETCURSEL,0,0L))==LB_ERR) {
  345. nSelect=(INT)SendDlgItemMessage(hdlg,
  346. IDC_LIST,
  347. LB_GETCOUNT,
  348. (WPARAM)0,
  349. (LPARAM)0);
  350. SendDlgItemMessage(hdlg,
  351. IDC_LIST,
  352. LB_SETCURSEL,
  353. (WPARAM)(nSelect-1),
  354. (LPARAM)0);
  355. }
  356. }
  357. else
  358. MessageBeep((UINT)-1);
  359. break;
  360. }
  361. case IDC_ADDRULE:
  362. if(!(lpRule = GlobalLock(hRule)) ) {
  363. ProcessError(ERR_GLOBALLOCK,hdlg,ERR);
  364. szRuleStr[0] = 0;
  365. break;
  366. }
  367. if(RuleParse(hdlg,szRuleStr,0,lpRule,Descript.wMaxCodes)) {
  368. int nCnt;
  369. nCnt =(WORD)SendDlgItemMessage(hdlg,IDC_LIST,LB_GETCOUNT,0,0L);
  370. if(nCnt != 0)
  371. {
  372. for(i=0; i<nCnt; i++) {
  373. SendDlgItemMessage(hdlg,IDC_LIST,LB_GETTEXT,i,(LPARAM)_szStr);
  374. #ifdef UNICODE
  375. if(wcsncmp(szRuleStr,_szStr,3) == 0)
  376. #else
  377. if(strncmp(szRuleStr,_szStr,3) == 0)
  378. #endif //UNICODE
  379. {
  380. GlobalUnlock(hRule);
  381. ProcessError(ERR_DUPRULE,hdlg,ERR);
  382. MessageBeep((UINT)-1);
  383. MessageBeep((UINT)-1);
  384. _szStr[0] = 0;
  385. lstrcpy((LPTSTR)lparam,(LPTSTR)_szStr);
  386. return FALSE;
  387. }
  388. }
  389. }
  390. SendDlgItemMessage(hdlg,IDC_LIST,LB_ADDSTRING,0,(LPARAM)szRuleStr);
  391. bModify = TRUE;
  392. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),TRUE);
  393. Descript.wNumRules++;
  394. }
  395. else
  396. {
  397. MessageBeep((UINT)-1);
  398. _szStr[0] = 0;
  399. lstrcpy((LPTSTR)lparam,(LPTSTR)_szStr);
  400. }
  401. GlobalUnlock(hRule);
  402. break;
  403. case IDC_CHGDATA:
  404. if(!(lpRule = GlobalLock(hRule)) ) {
  405. ProcessError(ERR_GLOBALLOCK,hdlg,ERR);
  406. _szStr[0] = 0;
  407. lstrcpy((LPTSTR)lparam,(LPTSTR)_szStr);
  408. break;
  409. }
  410. {
  411. int nSelect;
  412. nSelect = (INT)SendDlgItemMessage(hdlg,IDC_LIST,LB_GETCURSEL,0,0L);
  413. if(RuleParse(hdlg,szRuleStr,nSelect,lpRule,Descript.wMaxCodes)) {
  414. // Descript.wNumRules++;
  415. int nCnt;
  416. nCnt =(WORD)SendDlgItemMessage(hdlg,IDC_LIST,LB_GETCOUNT,0,0L);
  417. if(nCnt != 0)
  418. {
  419. for(i=0; i<nCnt; i++) {
  420. if(i == nSelect)
  421. continue;
  422. SendDlgItemMessage(hdlg,IDC_LIST,LB_GETTEXT,i,(LPARAM)_szStr);
  423. #ifdef UNICODE
  424. if(wcsncmp(szRuleStr,_szStr,3) == 0)
  425. #else
  426. if(strncmp(szRuleStr,_szStr,3) == 0)
  427. #endif
  428. {
  429. GlobalUnlock(hRule);
  430. MessageBeep((UINT)-1);
  431. _szStr[0] = 0;
  432. lstrcpy((LPTSTR)lparam,_szStr);
  433. return FALSE;
  434. }
  435. }
  436. }
  437. SendDlgItemMessage(hdlg,IDC_LIST,LB_DELETESTRING,nSelect,0L);
  438. SendDlgItemMessage(hdlg,IDC_LIST,LB_ADDSTRING,0,(LPARAM)szRuleStr);
  439. bModify = TRUE;
  440. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),TRUE);
  441. }
  442. else
  443. {
  444. _szStr[0] = 0;
  445. lstrcpy((LPTSTR)lparam,_szStr);
  446. MessageBeep((UINT)-1);
  447. }
  448. GlobalUnlock(hRule);
  449. break;
  450. }
  451. case IDC_GETMBFILE:
  452. GetDlgItemText(hdlg,IDC_MBNAME,_szStr,sizeof(_szStr)/sizeof(TCHAR));
  453. lstrcpy((LPTSTR)lparam,_szStr);
  454. break;
  455. case IDC_GETSRCFILE:
  456. lstrcpy((LPTSTR)lparam,szSrcName);
  457. break;
  458. case IDC_CONV:
  459. {
  460. FARPROC lpProcInfo;
  461. if(bModify)
  462. SendMessage(hdlg,WM_COMMAND,IDC_SAVE,0L);
  463. lpProcInfo = MakeProcInstance((FARPROC)InfoDlg, hInst);
  464. pfnmsg=(PFNMSG)ConvProc;
  465. bEndProp=FALSE;
  466. DialogBox(hInst,
  467. MAKEINTRESOURCE(IDD_INFO),
  468. hdlg,
  469. (DLGPROC)lpProcInfo);
  470. FreeProcInstance(lpProcInfo);
  471. break;
  472. }
  473. case IDC_CRTIME:
  474. {
  475. FARPROC lpProcInfo;
  476. int nRetValue;
  477. GetDlgItemText(hdlg, IDC_MBNAME, _szStr, sizeof(_szStr)/sizeof(TCHAR));
  478. nRetValue = ReadDescript(_szStr,&Descript,FILE_SHARE_READ);
  479. if(nRetValue == -1){
  480. TCHAR errString[MAX_PATH];
  481. LoadString(NULL, IDS_FILEOPEN, errString, sizeof(errString)/sizeof(TCHAR));
  482. lstrcat(_szStr, errString);
  483. FatalMessage(hdlg,_szStr);
  484. break;
  485. }
  486. else if(!nRetValue)
  487. {
  488. ProcessError(ERR_READMAININDEX,hdlg,WARNING);
  489. break;
  490. }
  491. lpProcInfo = MakeProcInstance((FARPROC)CrtImeDlg, hInst);
  492. DialogBox(hInst,
  493. MAKEINTRESOURCE(IDD_CRTIME),
  494. hdlg,
  495. (DLGPROC)lpProcInfo);
  496. FreeProcInstance(lpProcInfo);
  497. break;
  498. }
  499. case IDC_SAVE:
  500. if(!(lpRule = GlobalLock(hRule)) ) {
  501. ProcessError(ERR_GLOBALLOCK,hdlg,ERR);
  502. _szStr[0] = 0;
  503. lstrcpy((LPTSTR)lparam,_szStr);
  504. break;
  505. }
  506. GetDlgDescript(hdlg,&Descript);
  507. if(!CheckCodeCollection(hdlg,Descript.szUsedCode))
  508. break;
  509. GetDlgRule(hdlg,lpRule,&(Descript.wNumRules),Descript.wMaxCodes);
  510. if(!ConvSaveDescript(szSrcName,&Descript, dwDesOffset,dwDesLen))
  511. break;
  512. //**** modify 95.10.11
  513. ConvGetDescript(hdlg,szSrcName,&dwDesOffset,&dwDesLen,&Descript,TRUE);
  514. //**** end modify
  515. if(!(lpRule = GlobalLock(hRule)) ) {
  516. ProcessError(ERR_GLOBALLOCK,hdlg,ERR);
  517. break;
  518. }
  519. if(!ConvSaveRule(hdlg,szSrcName, dwDesLen,dwRuleLen,
  520. lpRule, Descript.wNumRules))
  521. break;
  522. ConvGetRule(hdlg, szSrcName, &dwRuleOffset, &dwRuleLen,
  523. lpRule, &Descript);
  524. GlobalUnlock(hRule);
  525. bModify = FALSE;
  526. EnableWindow(GetDlgItem(hdlg,IDC_CONV),TRUE);
  527. EnableWindow(GetDlgItem(hdlg,IDC_SAVE),FALSE);
  528. SendMessage(GetDlgItem(hdlg,IDC_SAVE),BM_SETSTYLE,BS_PUSHBUTTON,0L);
  529. SendMessage(GetDlgItem(hdlg,IDC_CONV),BM_SETSTYLE,BS_DEFPUSHBUTTON,TRUE);
  530. SetFocus(GetDlgItem(hdlg,IDC_CONV));
  531. break;
  532. case IDC_HLP:
  533. {
  534. TCHAR szHlpName[MAX_PATH];
  535. szHlpName[0] = 0;
  536. GetWindowsDirectory((LPTSTR)szHlpName, MAX_PATH);
  537. lstrcat(szHlpName, TEXT("\\HELP\\IMEGEN.CHM"));
  538. HtmlHelp(hdlg,szHlpName,HH_DISPLAY_TOPIC,0L);
  539. }
  540. break;
  541. default:
  542. break;
  543. }
  544. break;
  545. default:
  546. break;
  547. }
  548. return FALSE;
  549. }
  550. VOID ConvProc(LPVOID hWnd)
  551. {
  552. static TCHAR file1[MAX_PATH]=TEXT("");
  553. static TCHAR file2[MAX_PATH]=TEXT("");
  554. SendMessage(GetParent(hDlgless),WM_COMMAND,IDC_GETSRCFILE,(LPARAM)file1);
  555. SendMessage(GetParent(hDlgless),WM_COMMAND,IDC_GETMBFILE,(LPARAM)file2);
  556. if(ConvConv(hDlgless,file1,file2))
  557. bEndProp=TRUE;
  558. SendMessage(hDlgless,WM_CLOSE,0,0L);
  559. }
  560. void SetDlgDescript(HWND hDlg,LPDESCRIPTION lpDescript)
  561. {
  562. short nElement;
  563. TCHAR _szStr[20];
  564. nElement =(lpDescript->byMaxElement==1)?IDC_SINGLEELEMENT:IDC_MULTIELEMENT;
  565. SetDlgItemText(hDlg,IDC_IMENAME,lpDescript->szName);
  566. SetDlgItemText(hDlg,IDC_USEDCODE,lpDescript->szUsedCode);
  567. _szStr[0]=lpDescript->cWildChar;
  568. _szStr[1]=0;
  569. SetDlgItemText(hDlg,IDC_WILDCHAR,_szStr);
  570. SetDlgItemInt (hDlg,IDC_MAXCODES,lpDescript->wMaxCodes,FALSE);
  571. CheckRadioButton(hDlg,IDC_SINGLEELEMENT,IDC_MULTIELEMENT,nElement);
  572. }
  573. void GetDlgDescript(HWND hDlg,LPDESCRIPTION lpDescript)
  574. {
  575. BOOL bTrans;
  576. TCHAR _szStr[20];
  577. GetDlgItemText(hDlg,IDC_IMENAME,lpDescript->szName,NAMESIZE);
  578. GetDlgItemText(hDlg,IDC_USEDCODE,lpDescript->szUsedCode,MAXUSEDCODES);
  579. GetDlgItemText(hDlg,IDC_WILDCHAR,_szStr,sizeof(_szStr)/sizeof(TCHAR));
  580. DelSpace(_szStr);
  581. if(_szStr[0]==0) _szStr[0]=TEXT('?');
  582. lpDescript->cWildChar=_szStr[0];
  583. lpDescript->wMaxCodes=(WORD)GetDlgItemInt (hDlg,IDC_MAXCODES,&bTrans,FALSE);
  584. lpDescript->wNumCodes=(WORD)lstrlen(lpDescript->szUsedCode);
  585. lpDescript->byMaxElement=(BYTE)(IsDlgButtonChecked(hDlg,IDC_MULTIELEMENT)?2:1);
  586. lpDescript->wNumRules=(WORD)SendDlgItemMessage(hDlg,IDC_LIST,LB_GETCOUNT,0,0L);
  587. }
  588. void SetDlgRuleStr(HWND hDlg,WORD NumRules,LPRULE lpRule)
  589. {
  590. WORD i;
  591. TCHAR _szStr[MAX_PATH];
  592. SendDlgItemMessage(hDlg,IDC_LIST,LB_RESETCONTENT,0,0L);
  593. if(NumRules==0) return;
  594. for(i=0; i<NumRules; i++) {
  595. RuleToText(&lpRule[i], _szStr);
  596. _szStr[lstrlen(_szStr)-2]=0;
  597. SendDlgItemMessage(hDlg,IDC_LIST,LB_ADDSTRING,0,(LPARAM)_szStr);
  598. }
  599. }
  600. void GetDlgRule(HWND hdlg,LPRULE lpRule,LPWORD fwNumRules,WORD MaxCodes)
  601. {
  602. int i;
  603. TCHAR _szStr[128];
  604. WORD NumRules = 0;
  605. lpRule = GlobalLock(hRule);
  606. *fwNumRules =(WORD)SendDlgItemMessage(hdlg,IDC_LIST,LB_GETCOUNT,0,0L);
  607. if((*fwNumRules) == 0)
  608. {
  609. GlobalUnlock(hRule);
  610. return;
  611. }
  612. for(i=0;i<(int)*fwNumRules;i++) {
  613. SendDlgItemMessage(hdlg,IDC_LIST,LB_GETTEXT,i,(LPARAM)_szStr);
  614. if(RuleParse(hdlg,_szStr,i,lpRule,MaxCodes))
  615. NumRules++;
  616. }
  617. GlobalUnlock(hRule);
  618. *fwNumRules = NumRules;
  619. }
  620. void DelSelRule(WORD wNumRules,WORD wSelect,LPRULE lpRule)
  621. {
  622. int i;
  623. if(wSelect>=MAXCODELEN) return;
  624. for(i=wSelect;i<wNumRules;i++)
  625. lpRule[i]=lpRule[i+1];
  626. }
  627. void SetConvDisable(HWND hDlg)
  628. {
  629. WORD wID;
  630. for(wID = IDC_MBNAME ;wID <= IDC_CONV ;wID++)
  631. EnableWindow(GetDlgItem(hDlg,wID),FALSE);
  632. EnableWindow(GetDlgItem(hDlg,IDC_CRTIME),FALSE);
  633. for(wID = IDC_STATIC1 ;wID <= IDC_STATIC5 ;wID++)
  634. EnableWindow(GetDlgItem(hDlg,wID),FALSE);
  635. }
  636. void SetConvEnable(HWND hDlg)
  637. {
  638. WORD wID;
  639. for(wID = IDC_MBNAME ;wID <= IDC_CONV ;wID++)
  640. EnableWindow(GetDlgItem(hDlg,wID),TRUE);
  641. EnableWindow(GetDlgItem(hDlg,IDC_CRTIME),TRUE);
  642. for(wID = IDC_STATIC1 ;wID <= IDC_STATIC5 ;wID++)
  643. EnableWindow(GetDlgItem(hDlg,wID),TRUE);
  644. }
  645. INT_PTR CALLBACK ConvEditProc(HWND hWnd,
  646. UINT wMsgID,
  647. WPARAM wParam,
  648. LPARAM lParam)
  649. {
  650. switch(wMsgID) {
  651. case WM_LBUTTONDBLCLK:
  652. SendMessage(GetParent(hWnd),WM_COMMAND,IDC_MODIFY,0L);
  653. break;
  654. case WM_KEYDOWN:
  655. switch(wParam) {
  656. case VK_DELETE:
  657. SendMessage(GetParent(hWnd),WM_COMMAND,IDC_DEL,0L);
  658. break;
  659. }
  660. default:
  661. return CallWindowProc((WNDPROC)lpConvProc,hWnd,wMsgID,wParam,lParam);
  662. }
  663. return FALSE;
  664. }
  665. void InstallConvSubClass(HWND hWnd)
  666. {
  667. lpConvProc = (FARPROC)SetWindowLongPtr(hWnd,GWLP_WNDPROC,(LONG_PTR)ConvEditProc);
  668. }
  669. INT_PTR CALLBACK AddRuleDlg(
  670. HWND hDlg,
  671. UINT message,
  672. WPARAM wParam,
  673. LPARAM lParam)
  674. {
  675. LPRULE lpRule;
  676. switch (message) {
  677. case WM_INITDIALOG:
  678. lpRule=GlobalLock(hRule);
  679. szRuleStr[0] = 0;
  680. SetDlgItemText(hDlg,IDC_EDITRULE,szRuleStr);
  681. return (TRUE);
  682. case WM_COMMAND:
  683. switch(LOWORD(wParam)) {
  684. case IDOK:
  685. GetDlgItemText(hDlg,IDC_EDITRULE,szRuleStr,sizeof(szRuleStr)/sizeof(TCHAR));
  686. SendMessage(GetParent(hDlg),WM_COMMAND,IDC_ADDRULE,(LPARAM)szRuleStr);
  687. if(*szRuleStr == 0)
  688. {
  689. SetFocus(GetDlgItem(hDlg,IDC_EDITRULE));
  690. return (TRUE);
  691. }
  692. GlobalUnlock(hRule);
  693. EndDialog(hDlg, TRUE);
  694. return (TRUE);
  695. case IDCANCEL:
  696. case WM_CLOSE:
  697. GlobalUnlock(hRule);
  698. EndDialog(hDlg, TRUE);
  699. break;
  700. default:
  701. break;
  702. }
  703. break;
  704. }
  705. return (FALSE);
  706. UNREFERENCED_PARAMETER(lParam);
  707. }
  708. INT_PTR CALLBACK ModiRuleDlg(
  709. HWND hDlg,
  710. UINT message,
  711. WPARAM wParam,
  712. LPARAM lParam)
  713. {
  714. LPRULE lpRule;
  715. switch (message) {
  716. case WM_INITDIALOG:
  717. lpRule=GlobalLock(hRule);
  718. SetDlgItemText(hDlg,IDC_EDITRULE,szRuleStr);
  719. return (TRUE);
  720. case WM_COMMAND:
  721. switch(LOWORD(wParam)) {
  722. case IDOK:
  723. GetDlgItemText(hDlg,IDC_EDITRULE,szRuleStr,sizeof(szRuleStr)/sizeof(TCHAR));
  724. SendMessage(GetParent(hDlg),WM_COMMAND,IDC_CHGDATA,(LPARAM)szRuleStr);
  725. if(*szRuleStr == 0)
  726. {
  727. SetFocus(GetDlgItem(hDlg,IDC_EDITRULE));
  728. return (TRUE);
  729. }
  730. GlobalUnlock(hRule);
  731. EndDialog(hDlg, TRUE);
  732. return (TRUE);
  733. case IDCANCEL:
  734. case WM_CLOSE:
  735. GlobalUnlock(hRule);
  736. EndDialog(hDlg, TRUE);
  737. break;
  738. default:
  739. break;
  740. }
  741. break;
  742. }
  743. return (FALSE);
  744. UNREFERENCED_PARAMETER(lParam);
  745. }
  746. //**********************************************************
  747. //SetupIme(ImeFileName, ImeLayoutName);
  748. //**********************************************************
  749. /*
  750. BOOL SetupIme(
  751. LPTSTR ImeFileName, //ime file name with full path
  752. LPTSTR MBFileName,
  753. LPTSTR ImeLayoutName)//ime layout name(in chinese)
  754. {
  755. HKEY hKeyCurrVersion, hKey, hNewKey;
  756. long retCode,i;
  757. UCHAR Buf[256], lpszName[256],LayoutHandleName[10];
  758. DWORD dwDisposition;
  759. memset(Buf,0,256);
  760. memset(lpszName,0,256);
  761. memset(LayoutHandleName, 0, 10);
  762. //create registry in keyboard layout
  763. retCode = RegOpenKeyEx (HKEY_LOCAL_MACHINE,
  764. REGSTR_PATH_CURRENT_CONTROL_SET,
  765. (DWORD)0,
  766. KEY_ENUMERATE_SUB_KEYS |
  767. KEY_EXECUTE |
  768. KEY_QUERY_VALUE,
  769. &hKeyCurrVersion);
  770. if (retCode) {
  771. wsprintf (Buf, "����: RegOpenKeyEx = %d", retCode);
  772. MessageBox (NULL, Buf, "����", MB_OK | MB_ICONINFORMATION);
  773. return FALSE;
  774. }
  775. retCode = RegOpenKeyEx (hKeyCurrVersion,
  776. "Keyboard Layouts",
  777. 0,
  778. KEY_ENUMERATE_SUB_KEYS |
  779. KEY_EXECUTE |
  780. KEY_QUERY_VALUE,
  781. &hKey);
  782. if (retCode) {
  783. wsprintf (Buf, "����: RegOpenKeyEx = %d", retCode);
  784. MessageBox (NULL, Buf, "����", MB_OK | MB_ICONINFORMATION);
  785. return FALSE;
  786. }
  787. for(i=0;;i++){
  788. retCode = RegEnumKey(hKey, // handle of key to query
  789. i, // index of subkey to query
  790. lpszName, // address of buffer for subkey name
  791. 256); // size of subkey buffer
  792. if(retCode)
  793. break;
  794. else{
  795. if(strcmp(Buf, lpszName)<0)
  796. strcpy(Buf, lpszName);
  797. }
  798. }
  799. if(Buf[0]=='\0')
  800. return FALSE;
  801. if(Buf[3]=='f' || Buf[3]=='F'){
  802. Buf[3]== '0';
  803. Buf[2]++;
  804. }else if(Buf[3]=='9')
  805. Buf[3]='A';
  806. else
  807. Buf[3]++;
  808. strcpy(LayoutHandleName,Buf);
  809. retCode = RegCreateKeyEx (hKey,
  810. LayoutHandleName,
  811. 0,
  812. 0,
  813. REG_OPTION_NON_VOLATILE,
  814. KEY_ALL_ACCESS,
  815. NULL,
  816. &hNewKey,
  817. &dwDisposition);
  818. if (retCode) {
  819. wsprintf (Buf, "����: RegOpenKeyEx = %d", retCode);
  820. MessageBox (NULL, Buf, "����", MB_OK | MB_ICONINFORMATION);
  821. return FALSE;
  822. }
  823. GetFileTitle(ImeFileName, Buf, MAX_PATH);
  824. retCode = RegSetValueEx (hNewKey,
  825. "IME file",
  826. (DWORD)NULL,
  827. REG_SZ,
  828. (LPBYTE)Buf,
  829. strlen(Buf));
  830. if (retCode) {
  831. wsprintf (Buf, "����: RegSetValueEx = %d", retCode);
  832. MessageBox (NULL, Buf, "����", MB_OK | MB_ICONINFORMATION);
  833. return FALSE;
  834. }
  835. strcpy(Buf, "kbdus.kbd");
  836. retCode = RegSetValueEx (hNewKey,
  837. "layout file",
  838. (DWORD)NULL,
  839. REG_SZ,
  840. (LPBYTE)Buf,
  841. strlen(Buf));
  842. if (retCode) {
  843. wsprintf (Buf, "����: RegSetValueEx = %d", retCode);
  844. MessageBox (NULL, Buf, "����", MB_OK | MB_ICONINFORMATION);
  845. return FALSE;
  846. }
  847. strcpy(Buf, ImeLayoutName);
  848. retCode = RegSetValueEx (hNewKey,
  849. "layout text",
  850. (DWORD)NULL,
  851. REG_SZ,
  852. (LPBYTE)Buf,
  853. strlen(Buf));
  854. if (retCode) {
  855. wsprintf (Buf, "����: RegSetValueEx = %d", retCode);
  856. MessageBox (NULL, Buf, "����", MB_OK | MB_ICONINFORMATION);
  857. return FALSE;
  858. }
  859. RegCloseKey(hNewKey);
  860. RegCloseKey(hKey);
  861. RegCloseKey(hKeyCurrVersion);
  862. //create registry in preload
  863. retCode = RegOpenKeyEx (HKEY_CURRENT_USER,
  864. "Keyboard Layout\\Preload",
  865. 0,
  866. KEY_ENUMERATE_SUB_KEYS |
  867. KEY_EXECUTE |
  868. KEY_QUERY_VALUE,
  869. &hKeyCurrVersion);
  870. if (retCode) {
  871. wsprintf (Buf, "����: RegOpenKeyEx = %d", retCode);
  872. MessageBox (NULL, Buf, "����", MB_OK | MB_ICONINFORMATION);
  873. return FALSE;
  874. }
  875. memset(Buf,0,256);
  876. memset(lpszName,0,256);
  877. for(i=0;;i++){
  878. retCode = RegEnumKey(hKeyCurrVersion, // handle of key to query
  879. i, // index of subkey to query
  880. lpszName, // address of buffer for subkey name
  881. 256); // size of subkey buffer
  882. if(retCode)
  883. break;
  884. else{
  885. if(strcmp(Buf, lpszName)<0)
  886. strcpy(Buf, lpszName);
  887. }
  888. }
  889. if(Buf[0]=='\0')
  890. return FALSE;
  891. i=_ttoi(Buf);
  892. i++;
  893. _itoa(i,Buf,10);
  894. retCode = RegCreateKeyEx (hKeyCurrVersion,
  895. Buf,
  896. 0,
  897. 0,
  898. REG_OPTION_NON_VOLATILE,
  899. KEY_ALL_ACCESS,
  900. NULL,
  901. &hNewKey,
  902. &dwDisposition);
  903. if (retCode) {
  904. wsprintf (Buf, "����: RegOpenKeyEx = %d", retCode);
  905. MessageBox (NULL, Buf, "����", MB_OK | MB_ICONINFORMATION);
  906. return FALSE;
  907. }
  908. retCode = RegSetValueEx (hNewKey,
  909. NULL,
  910. (DWORD)NULL,
  911. REG_SZ,
  912. (LPBYTE)LayoutHandleName,
  913. strlen(LayoutHandleName));
  914. if (retCode) {
  915. wsprintf (Buf, "����: RegSetValueEx = %d", retCode);
  916. MessageBox (NULL, Buf, "����", MB_OK | MB_ICONINFORMATION);
  917. return FALSE;
  918. }
  919. RegCloseKey(hNewKey);
  920. RegCloseKey(hKey);
  921. RegCloseKey(hKeyCurrVersion);
  922. //copy files
  923. {
  924. UCHAR DesFilePath[MAX_PATH];
  925. GetSystemDirectory(DesFilePath,MAX_PATH);
  926. strcat(DesFilePath,"\\");
  927. GetFileTitle(ImeFileName, Buf, MAX_PATH);
  928. strcat(DesFilePath,Buf);
  929. CopyFile(ImeFileName, DesFilePath, FALSE);
  930. GetSystemDirectory(DesFilePath,MAX_PATH);
  931. strcat(DesFilePath,"\\");
  932. GetFileTitle(MBFileName, Buf, MAX_PATH);
  933. strcat(DesFilePath,Buf);
  934. CopyFile(MBFileName, DesFilePath, FALSE);
  935. }
  936. return TRUE;
  937. }
  938. */
  939. //Hack for #62554 10/29/96
  940. HWND HwndCrtImeDlg = NULL;
  941. INT_PTR CALLBACK CrtImeDlg(
  942. HWND hDlg,
  943. UINT message,
  944. WPARAM wParam,
  945. LPARAM lParam)
  946. {
  947. static TCHAR _szStr[MAX_PATH];
  948. static TCHAR ImeTplName[MAX_PATH];
  949. static TCHAR mbName[MAX_PATH];
  950. static IMERES ImeRes;
  951. LPTSTR lpString;
  952. HwndCrtImeDlg = hDlg;
  953. switch (message) {
  954. case WM_INITDIALOG:
  955. SendMessage(GetParent(hDlg),WM_COMMAND,IDC_GETMBFILE,(LPARAM)mbName);
  956. SendDlgItemMessage(hDlg,IDC_VERSION,EM_LIMITTEXT,8,0L);
  957. SendDlgItemMessage(hDlg,IDC_GROUP,EM_LIMITTEXT,32,0L);
  958. SetDlgItemText(hDlg, IDC_VERSION,TEXT(DefVer));
  959. SetDlgItemText(hDlg, IDC_GROUP, TEXT(DefOrgName));
  960. ImeRes.Value = 0x00af;
  961. SetValue(hDlg,ImeRes.Value);
  962. SendMessage(hDlg,WM_COMMAND, IDC_DEF, 0L);
  963. CheckRadioButton(hDlg,IDC_DEF,IDC_USERDEF,IDC_DEF);
  964. break;
  965. case WM_COMMAND:
  966. switch(LOWORD(wParam)) {
  967. case IDOK:
  968. {
  969. DESCRIPTION Descript;
  970. TCHAR tmpBuf[MAX_PATH];
  971. if(!GetImeRes(hDlg,&ImeRes))
  972. return TRUE;
  973. ReadDescript(mbName,&Descript,FILE_SHARE_READ);
  974. lstrcpy(_szStr, Descript.szName);
  975. lstrcat(_szStr, szVer);
  976. lstrcat(_szStr, ImeRes.Version);
  977. lstrcpy(ImeRes.Version, _szStr);
  978. GetSystemDirectory(ImeTplName,sizeof(ImeTplName)/sizeof(TCHAR));
  979. lstrcpy(_szStr, ImeTplName);
  980. lstrcat(ImeTplName, TEXT(TplName));
  981. lstrcat(_szStr, TEXT("\\"));
  982. GetFileTitle(mbName, tmpBuf, MAX_PATH);
  983. lstrcat(_szStr, tmpBuf);
  984. if((lpString=_tcsrchr(_szStr,TEXT('.')))!=NULL)
  985. *lpString=0;
  986. lstrcat(_szStr,TEXT(ImeExt));
  987. DispInfo(GetWindow(hDlg, GW_OWNER),IDS_UPRES);
  988. CopyFile(ImeTplName, _szStr, FALSE);
  989. if(ImeUpdateRes(_szStr, ImeRes.BmpName, ImeRes.IcoName,ImeRes.Version,
  990. ImeRes.Depart, ImeRes.Value)==TRUE){
  991. TCHAR szDBCS[256];
  992. LoadString(NULL,IDS_SETUPIME,szDBCS, sizeof(szDBCS)/sizeof(TCHAR));
  993. if(ErrMessage(hDlg, szDBCS))
  994. {
  995. HKL hKL;
  996. TCHAR DesFilePath[MAX_PATH],Buf[MAX_PATH];
  997. hKL = ImmInstallIME(_szStr,Descript.szName);
  998. //copy .MB & .HLP to system directory.
  999. if(hKL){
  1000. GetSystemDirectory(DesFilePath,MAX_PATH);
  1001. lstrcat(DesFilePath,TEXT("\\"));
  1002. GetFileTitle(mbName, Buf, MAX_PATH);
  1003. lstrcat(DesFilePath,Buf);
  1004. CopyFile(mbName, DesFilePath, FALSE);
  1005. if(ImeRes.HlpFile[0]){
  1006. lstrcpy(_szStr,DesFilePath);
  1007. if((lpString=_tcsrchr(_szStr,TEXT('.')))!=NULL)
  1008. *lpString=0;
  1009. lstrcat(_szStr,TEXT(HlpExt));
  1010. CopyFile( ImeRes.HlpFile, _szStr, FALSE);
  1011. if((lpString=_tcsrchr(ImeRes.HlpFile,TEXT('.')))!=NULL)
  1012. *lpString=0;
  1013. lstrcat(ImeRes.HlpFile,TEXT(".CNT"));
  1014. lstrcpy(_szStr,DesFilePath);
  1015. if((lpString=_tcsrchr(_szStr,TEXT('\\')))!=NULL)
  1016. *(lpString+1)=0;
  1017. GetFileTitle(ImeRes.HlpFile, Buf, MAX_PATH);
  1018. lstrcat(_szStr,Buf);
  1019. CopyFile( ImeRes.HlpFile, _szStr, FALSE);
  1020. if((lpString=_tcsrchr(ImeRes.HlpFile,TEXT('.')))!=NULL)
  1021. *(lpString+1)=0;
  1022. lstrcat(ImeRes.HlpFile,TEXT(".GID"));
  1023. lstrcpy(_szStr,DesFilePath);
  1024. if((lpString=_tcsrchr(_szStr,TEXT('\\')))!=NULL)
  1025. *lpString=0;
  1026. GetFileTitle(ImeRes.HlpFile, Buf, MAX_PATH);
  1027. lstrcat(_szStr,Buf);
  1028. CopyFile( ImeRes.HlpFile, _szStr, FALSE);
  1029. }
  1030. }else{
  1031. LoadString(NULL,IDS_ERR_INSTALLIME,_szStr, sizeof(_szStr)/sizeof(TCHAR));
  1032. WarnMessage(hDlg,_szStr);
  1033. }
  1034. }
  1035. }
  1036. EndDialog(hDlg, TRUE);
  1037. return (TRUE);
  1038. }
  1039. case IDC_BROWSE:
  1040. if(!RcFileOpenDlg(hDlg, _szStr,Title))
  1041. break;
  1042. if(_tcsstr(_tcsupr(_szStr),TEXT(BmpExt)) != NULL)
  1043. SetDlgItemText(hDlg, IDC_BMP, _szStr);
  1044. #ifdef UNICODE
  1045. else if(_tcsstr(_wcsupr(_szStr),TEXT(IconExt)) != NULL)
  1046. #else
  1047. else if(_tcsstr(_strupr(_szStr),TEXT(IconExt)) != NULL)
  1048. #endif
  1049. SetDlgItemText(hDlg, IDC_ICO, _szStr);
  1050. #ifdef UNICODE
  1051. else if(_tcsstr(_wcsupr(_szStr),TEXT(HlpExt)) != NULL)
  1052. #else
  1053. else if(_tcsstr(_strupr(_szStr),TEXT(HlpExt)) != NULL)
  1054. #endif
  1055. SetDlgItemText(hDlg, IDC_HLPFILE, _szStr);
  1056. break;
  1057. case IDC_DEF:
  1058. EnableWindow(GetDlgItem(hDlg,IDC_BMP), FALSE);
  1059. EnableWindow(GetDlgItem(hDlg,IDC_ICO), FALSE);
  1060. EnableWindow(GetDlgItem(hDlg,IDC_HLPFILE), FALSE);
  1061. EnableWindow(GetDlgItem(hDlg,IDC_BROWSE), FALSE);
  1062. GetDlgItemText(hDlg, IDC_ICO, ImeRes.IcoName,sizeof(ImeRes.IcoName)/sizeof(TCHAR));
  1063. GetDlgItemText(hDlg, IDC_BMP, ImeRes.BmpName,sizeof(ImeRes.BmpName)/sizeof(TCHAR) );
  1064. GetDlgItemText(hDlg, IDC_BMP, ImeRes.HlpFile,sizeof(ImeRes.HlpFile)/sizeof(TCHAR));
  1065. _szStr[0] = 0;
  1066. SetDlgItemText(hDlg, IDC_ICO, _szStr);
  1067. SetDlgItemText(hDlg, IDC_BMP, _szStr);
  1068. SetDlgItemText(hDlg, IDC_HLPFILE, _szStr);
  1069. break;
  1070. case IDC_USERDEF:
  1071. EnableWindow(GetDlgItem(hDlg,IDC_BMP), TRUE);
  1072. EnableWindow(GetDlgItem(hDlg,IDC_ICO), TRUE);
  1073. EnableWindow(GetDlgItem(hDlg,IDC_HLPFILE), TRUE);
  1074. EnableWindow(GetDlgItem(hDlg,IDC_BROWSE), TRUE);
  1075. SetDlgItemText(hDlg, IDC_ICO, ImeRes.IcoName);
  1076. SetDlgItemText(hDlg, IDC_BMP, ImeRes.BmpName);
  1077. SetDlgItemText(hDlg, IDC_HLPFILE, ImeRes.HlpFile);
  1078. break;
  1079. case IDC_ZJTS:
  1080. if(IsDlgButtonChecked(hDlg,IDC_ZJTS))
  1081. EnableWindow(GetDlgItem(hDlg,IDC_WMTS),TRUE);
  1082. else {
  1083. CheckDlgButton(hDlg,IDC_WMTS,0);
  1084. EnableWindow(GetDlgItem(hDlg,IDC_WMTS),FALSE);
  1085. }
  1086. break;
  1087. case IDCANCEL:
  1088. case WM_CLOSE:
  1089. EndDialog(hDlg, TRUE);
  1090. return (TRUE);
  1091. default:
  1092. break;
  1093. }
  1094. break;
  1095. }
  1096. return (FALSE);
  1097. UNREFERENCED_PARAMETER(lParam);
  1098. }
  1099. void SetValue(HWND hDlg, WORD Value)
  1100. {
  1101. CheckDlgButton(hDlg,IDC_CYLX,Value&0x0001);
  1102. CheckDlgButton(hDlg,IDC_CYSR,Value&0x0002);
  1103. CheckDlgButton(hDlg,IDC_ZJTS,Value&0x0004);
  1104. if((Value&0x0004)==0) {
  1105. EnableWindow(GetDlgItem(hDlg,IDC_WMTS),FALSE);
  1106. Value &= ~ 0x0008;
  1107. }
  1108. CheckDlgButton(hDlg,IDC_WMTS,Value&0x0008);
  1109. CheckDlgButton(hDlg,IDC_GBGS,Value&0x0020);
  1110. CheckDlgButton(hDlg,IDC_SPACE,Value&0x0040);
  1111. CheckDlgButton(hDlg,IDC_ENTER,Value&0x0080);
  1112. }
  1113. void GetValue(HWND hDlg,LPWORD Value)
  1114. {
  1115. *Value = 0;
  1116. *Value |= IsDlgButtonChecked(hDlg,IDC_CYLX);
  1117. *Value |= IsDlgButtonChecked(hDlg,IDC_CYSR) << 1;
  1118. *Value |= IsDlgButtonChecked(hDlg,IDC_ZJTS) << 2;
  1119. *Value |= IsDlgButtonChecked(hDlg,IDC_WMTS) << 3;
  1120. *Value |= IsDlgButtonChecked(hDlg,IDC_GBGS) << 5;
  1121. *Value |= IsDlgButtonChecked(hDlg,IDC_SPACE) << 6;
  1122. *Value |= IsDlgButtonChecked(hDlg,IDC_ENTER) << 7;
  1123. }
  1124. int GetImeRes(HWND hDlg,LPIMERES lpImeRes)
  1125. {
  1126. GetDlgItemText(hDlg, IDC_VERSION, lpImeRes->Version, sizeof(lpImeRes->Version)/sizeof(TCHAR));
  1127. if(lstrlen(lpImeRes->Version) == 0)
  1128. {
  1129. ProcessError(ERR_VERSION, hDlg, WARNING);
  1130. return FALSE;
  1131. }
  1132. GetDlgItemText(hDlg, IDC_GROUP, lpImeRes->Depart, sizeof(lpImeRes->Depart)/sizeof(TCHAR));
  1133. if(lstrlen(lpImeRes->Depart) == 0)
  1134. {
  1135. ProcessError(ERR_GROUP, hDlg, WARNING);
  1136. return FALSE;
  1137. }
  1138. GetDlgItemText(hDlg, IDC_BMP, lpImeRes->BmpName, sizeof(lpImeRes->BmpName)/sizeof(TCHAR));
  1139. GetDlgItemText(hDlg, IDC_ICO, lpImeRes->IcoName, sizeof(lpImeRes->IcoName)/sizeof(TCHAR));
  1140. GetValue(hDlg, &(lpImeRes->Value));
  1141. return TRUE;
  1142. }