JY_CL.C
上传用户:bjghjy
上传日期:2007-01-07
资源大小:379k
文件大小:71k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <malloc.h>
  5. #include <ctype.h>
  6. #include <stdlib.h>
  7. #include <io.h>
  8. #include "resource.h"
  9. #include "hq.h"
  10. #include "hq_cl.h"
  11. #include "jy_cl.h"
  12. #include "jy_tcp.h"
  13. #include "msg.h"
  14. #include "pctcp.h"
  15. #include "des.h"
  16. JY_ANS_CHKUSR curChkUsrRes;
  17. JY_ASK_CHKUSR curChkUsrData;
  18. ZQSXX Qsxx;
  19. char Addr[MAX_ZQS_COUNT][15];
  20. extern BOOL gfTest;
  21. extern int STATUS_HEIGHT;
  22. int JyFunc=0,JyOffLineTime=250,JyQs=0;
  23. #define NULL_FUNC 0           
  24. #define BUY_FUNC 1
  25. #define SELL_FUNC 2
  26. #define CANCEL_FUNC 3          
  27. #define CJCX_FUNC 4
  28. #define WTCX_FUNC 5
  29. #define YECX_FUNC 6
  30. #define CHGPWD_FUNC 7
  31. #define EXIT_FUNC 8
  32. #define MAX_IDEL_TIME 120
  33. void CenterWindow(HWND hDlg);
  34. int gnTimers =0;
  35. extern BOOL udpread_stop;
  36. extern HINSTANCE ghInstance;
  37. extern HWND ghWndMain, ghWndHq, ghWndStatus, hWndInput;
  38. extern BOOL IsZsRec(int jys, int recNum);
  39. extern BOOL ErrMsg(HWND, LPSTR);
  40. void FAR PASCAL JyDlgDrawEntireItem(LPDRAWITEMSTRUCT lpdis, int inflate);
  41. int ShowBitmap(HDC hDC, int left, int top, HBITMAP hBmp);
  42. void DrawFrame(HDC hDC, HWND hWnd);
  43. extern void DrawTime(int ret);
  44. extern char szDataPath[128];
  45. extern int ConnectToJyHost(char *HostName);
  46. HBITMAP hBmpBrush =NULL;
  47. HBRUSH hBrushBkGround =NULL;
  48. HWND ghDlgJy =NULL;
  49. extern HWND ghWndXlt, ghWndJlt, ghWndCj, ghWndMmp, ghWndLitHq;
  50. extern int sdHq;
  51. #define JY_BTN_COUNT 14
  52. HBITMAP hBmpSel =NULL, hBmpFoc =NULL;
  53. void FAR PASCAL BtnDrawEntireItem(LPDRAWITEMSTRUCT lpdis);
  54. void FAR PASCAL BtnFocusState(LPDRAWITEMSTRUCT lpdis);
  55. void FAR PASCAL BtnSelectionState(LPDRAWITEMSTRUCT lpdis);
  56. void DrawBtnNormal(LPDRAWITEMSTRUCT lpdis, BOOL fDrawFrame);
  57. void DrawBtnFocus(LPDRAWITEMSTRUCT lpdis);
  58. void DrawBtnUnFocus(LPDRAWITEMSTRUCT lpdis);
  59. void DrawBtnSelected(LPDRAWITEMSTRUCT lpdis);
  60. HBRUSH DrawChild(HDC hDC, HWND hWnd);
  61. BOOL isWndClass(HWND hWnd,LPSTR ClassName);
  62. extern int WinVer;
  63. extern char  *JyReadBuf;
  64. extern unsigned char DesKey[9];
  65. BOOL JyInit(void)
  66. {   
  67. JyReadBuf  =(char *)_fmalloc(MAX_READ_BUF_SIZE+1);
  68. memset(&curChkUsrRes, 0, sizeof(curChkUsrRes));
  69. curChkUsrRes.flag =-1;
  70. memset(&curChkUsrData, 0, sizeof(curChkUsrData));
  71. memset(&Qsxx,0,sizeof(ZQSXX));
  72. hBmpBrush =LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_BACKGROUND));
  73. if(hBmpBrush ==NULL)
  74. {
  75. ErrMsg(NULL, "load background bitmap failed");
  76. return FALSE;
  77. }
  78. hBrushBkGround =CreatePatternBrush(hBmpBrush);
  79. if(hBrushBkGround ==NULL)
  80. {
  81. ErrMsg(NULL, "Create background brush failed");
  82. return FALSE;
  83. }
  84. if(access("DES3W16.DLL",0)==0)
  85. hDesDll = LoadLibrary("DES3W16.DLL");
  86. //if(hDesDll==NULL)
  87. //{
  88. // ErrMsg(ghWndMain, "can not load DES dll"); 
  89. // return FALSE;
  90. //}
  91. //else
  92. if(hDesDll>32)
  93. {
  94. desinit= (lpfnDES_INIT)GetProcAddress(hDesDll,"desinit");
  95. ecbencode =(lpfnDES_ECB)GetProcAddress(hDesDll,"ecbencode");
  96. if(!desinit||!ecbencode)
  97. {
  98. ErrMsg(ghWndMain, "can not load DES FUNC"); 
  99. FreeLibrary(hDesDll);
  100. hDesDll=NULL;
  101. //return FALSE;
  102. }
  103.     }
  104.     else
  105.      hDesDll =NULL;
  106.     
  107. strcpy(DesKey,"98124325");
  108. hBmpSel =LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_SEL));
  109. hBmpFoc =LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_FOC));
  110. return TRUE;
  111. }
  112. int InitQsInfo(void)
  113. int i;
  114. char buf[256];
  115. char item[40],file[80];
  116. sprintf(file,"%s\sysinfo.dat",szDataPath);
  117. for(i=0;i<MAX_ZQS_COUNT;i++)
  118. {
  119. sprintf(item,"QS%d",i+1);
  120. GetPrivateProfileString("ZQS_NAME", item, "", buf, 256, file);
  121. if(*buf==0)
  122. break;
  123. strcpy(Qsxx.zqsjc[i],buf);
  124. Qsxx.zqsid[i] =i+1;
  125. GetPrivateProfileString("ZQS_ADDR", item, "", buf, 256, file);
  126. if(*buf!=0)
  127. strcpy(Addr[i],buf);
  128. }
  129. if(i==0&&*buf==0) return -1;
  130. return 0;
  131. }
  132. void JyExit(void)
  133. {
  134. if(hBrushBkGround) DeleteObject(hBrushBkGround);
  135. if(hBmpBrush) DeleteObject(hBmpBrush);
  136. if(hBmpSel) DeleteObject(hBmpSel);
  137. if(hBmpFoc) DeleteObject(hBmpFoc);
  138. _ffree(JyReadBuf);   
  139. if(hDesDll!=NULL) FreeLibrary(hDesDll);
  140. }
  141. extern void SendJyExit(char *);
  142. extern void SendJyQsxx(void);
  143. int jy(void)
  144. {       
  145. if(HqTime[0].fRunning ==FALSE && HqTime[1].fRunning ==FALSE)
  146. {
  147. ErrMsg(ghWndMain, "深圳和上海交易所已经收市!");
  148. return 0;
  149. }
  150. if(JyQs ==0 && !gfTest)
  151. {
  152. ErrMsg(ghWndMain, "请您按F11键选择券商!");
  153. return 0;
  154. }
  155. if(curChkUsrRes.userId==0 && !gfTest)
  156. {
  157. if(DlgSelectJys()<0) 
  158. return 0;
  159. // 检查用户的股东代码和交易密码
  160. if(DlgChkUsr() <0) 
  161. return 0;
  162. if(curChkUsrRes.userId==0)
  163. return 0;
  164. }
  165. JyOffLineTime=250;
  166. while(1)
  167. {
  168. DlgJy();
  169. switch(JyFunc)
  170. {
  171. case NULL_FUNC:
  172. return 0;
  173. case BUY_FUNC:
  174. DlgBuySell('B');
  175. break;
  176. case SELL_FUNC:
  177. DlgBuySell('S');
  178. break;
  179. case CANCEL_FUNC:
  180. DlgCancel();
  181. break;
  182. case CJCX_FUNC:
  183. DlgCjcx();
  184. break;
  185. case WTCX_FUNC:
  186. DlgWtcx();
  187. break;
  188. case YECX_FUNC:
  189. DlgYecx();
  190. break;
  191. case CHGPWD_FUNC:
  192. DlgChgPwd();
  193. break;
  194. case EXIT_FUNC:
  195. SendJyExit(curChkUsrData.gddm);
  196. curChkUsrRes.flag =-1;
  197. curChkUsrRes.userId=0;
  198. return 0;
  199. break;
  200. default:
  201. break;
  202. }
  203. }
  204. return 0;
  205. }
  206. FARPROC lpDlgProc =NULL;
  207. int DlgSelectJys(void)
  208. {
  209. int jys =0;
  210. lpDlgProc =MakeProcInstance((FARPROC)SelJysDlgProc, ghInstance);
  211. jys =DialogBox(ghInstance, MAKEINTRESOURCE(IDD_JY_SZSH), ghWndMain,
  212. lpDlgProc);
  213. FreeProcInstance(lpDlgProc);
  214. jys -=1;
  215. if(jys >=0)
  216. {
  217. if(HqTime[jys].fRunning ==FALSE)
  218. {
  219. curChkUsrRes.flag =-1;
  220. ErrMsg(ghWndMain, "请您注意,已经收市!");
  221. return -1;
  222. }
  223. curChkUsrRes.jys =jys;
  224. if(jys !=HqPaintData.jys)
  225. {
  226. HqPaintData.curSelRec =0;
  227. HqPaintData.curRecNum =0;
  228. if(HqPaintData.jys =0) SendMessage(ghWndHq, WM_COMMAND, IDM_HQ_SZ, 0L);
  229. else SendMessage(ghWndHq, WM_COMMAND, IDM_HQ_SH, 0L);
  230. }
  231. }
  232. return jys;
  233. }
  234. int DlgSelectZqs(void)
  235. {
  236. int zqs =0;
  237. lpDlgProc =MakeProcInstance((FARPROC)SelZqsDlgProc, ghInstance);
  238. zqs =DialogBox(ghInstance, MAKEINTRESOURCE(IDD_JY_ZQSXX), ghWndMain,
  239. lpDlgProc);
  240. FreeProcInstance(lpDlgProc);
  241.     return(zqs);
  242. }
  243. int DlgChkUsr(void)
  244. {
  245. curChkUsrRes.flag =-1;
  246. lpDlgProc =MakeProcInstance((FARPROC)ChkUsrDlgProc, ghInstance);
  247. DialogBox(ghInstance, MAKEINTRESOURCE(IDD_JY_CHKUSR), ghWndMain,
  248. lpDlgProc);
  249. FreeProcInstance(lpDlgProc);
  250. return curChkUsrRes.flag;
  251. }
  252. BOOL IsCanPwdChg =FALSE;
  253. int DlgChgPwd(void)
  254. {
  255. lpDlgProc =MakeProcInstance((FARPROC)AskPwdDlgProc, ghInstance);
  256. DialogBox(ghInstance, MAKEINTRESOURCE(IDD_JY_ASKPWD), ghDlgJy,
  257. lpDlgProc);
  258. FreeProcInstance(lpDlgProc);
  259.     
  260.     if(IsCanPwdChg)
  261.     {
  262. lpDlgProc =MakeProcInstance((FARPROC)ChgPwdDlgProc, ghInstance);
  263. DialogBox(ghInstance, MAKEINTRESOURCE(IDD_JY_CHGPWD), ghDlgJy,
  264. lpDlgProc);
  265. FreeProcInstance(lpDlgProc);
  266. }
  267. return 0;
  268. }
  269. int DlgJy(void)
  270. {
  271. lpDlgProc =MakeProcInstance((FARPROC)JyDlgProc, ghInstance);
  272. DialogBox(ghInstance, MAKEINTRESOURCE(IDD_JY_DLG), ghWndMain,
  273. lpDlgProc);
  274. FreeProcInstance(lpDlgProc);
  275. return 0;
  276. }
  277. int DlgBuySell(int bs)
  278. {
  279. lpDlgProc =MakeProcInstance((FARPROC)BuySellDlgProc, ghInstance);
  280. DialogBoxParam(ghInstance, MAKEINTRESOURCE(IDD_JY_BUYSELL), ghDlgJy,
  281. lpDlgProc, bs);
  282. FreeProcInstance(lpDlgProc);
  283. return 0;
  284. }
  285. int DlgCancel(void)
  286. {
  287. lpDlgProc =MakeProcInstance((FARPROC)CancelDlgProc, ghInstance);
  288. DialogBox(ghInstance, MAKEINTRESOURCE(IDD_JY_CANCEL), ghDlgJy,
  289. lpDlgProc);
  290. FreeProcInstance(lpDlgProc);
  291. return 0;
  292. }
  293. int DlgYecx(void)
  294. {
  295. lpDlgProc =MakeProcInstance((FARPROC)YecxDlgProc, ghInstance);
  296. DialogBox(ghInstance, MAKEINTRESOURCE(IDD_JY_YECX), ghDlgJy,
  297. lpDlgProc);
  298. FreeProcInstance(lpDlgProc);
  299. return 0;
  300. }
  301. int DlgCjcx(void)
  302. {
  303. lpDlgProc =MakeProcInstance((FARPROC)CjcxDlgProc, ghInstance);
  304. DialogBox(ghInstance, MAKEINTRESOURCE(IDD_JY_CJCX), ghDlgJy,
  305. lpDlgProc);
  306. FreeProcInstance(lpDlgProc);
  307. return 0;
  308. }
  309. int DlgWtcx(void)
  310. {
  311. lpDlgProc =MakeProcInstance((FARPROC)WtcxDlgProc, ghInstance);
  312. DialogBox(ghInstance, MAKEINTRESOURCE(IDD_JY_WTCX), ghDlgJy,
  313. lpDlgProc);
  314. FreeProcInstance(lpDlgProc);
  315. return 0;
  316. }
  317. LRESULT CALLBACK SelJysDlgProc(HWND hDlg, UINT msg,
  318. WPARAM wParam, LPARAM lParam)
  319. {
  320. PAINTSTRUCT ps;
  321. LPDRAWITEMSTRUCT lpdis;
  322. HWND hctl;
  323.     HFONT hFont;
  324.     LOGFONT lf;
  325. RECT rc;
  326. switch(msg)
  327. {
  328. case WM_INITDIALOG:
  329. ghDlgJy =hDlg;
  330. //if(Qsxx.zqsid[0]==0)
  331. //{
  332. // if(InitQsInfo()!=0)
  333. // SendJyQsxx();
  334. //}
  335. CenterWindow(hDlg);
  336. return TRUE;
  337. case WM_CTLCOLOR:
  338. SetBkMode((HDC)wParam, TRANSPARENT);
  339. switch(HIWORD(lParam))
  340. {
  341. case CTLCOLOR_DLG:
  342. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  343. case CTLCOLOR_MSGBOX:
  344. case CTLCOLOR_STATIC:
  345. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  346. }
  347. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  348.         
  349. case WM_DRAWITEM:
  350. lpdis = (LPDRAWITEMSTRUCT)lParam;
  351. if (lpdis->itemID == -1)
  352. BtnFocusState(lpdis);
  353. else
  354. {
  355. switch (lpdis->itemAction)
  356. {
  357. case ODA_DRAWENTIRE: 
  358. BtnDrawEntireItem(lpdis);
  359. break;
  360. case ODA_SELECT:
  361. BtnSelectionState(lpdis);
  362. break;
  363. case ODA_FOCUS:
  364. BtnFocusState(lpdis);
  365. break;
  366. }
  367. }
  368. break;
  369. case WM_PAINT:
  370. BeginPaint(hDlg, &ps);
  371. DrawFrame(ps.hdc, hDlg);
  372. GetClientRect(hDlg, &rc);
  373. memset(&lf,0,sizeof(lf));
  374. lf.lfEscapement =0;
  375. lf.lfOrientation =0;
  376. lf.lfStrikeOut =0;
  377. lf.lfUnderline =0;
  378. lf.lfItalic =0;
  379. lf.lfCharSet = ANSI_CHARSET;
  380. lf.lfPitchAndFamily = FF_SCRIPT;
  381. lf.lfWeight =FW_NORMAL;            
  382. strcpy(lf.lfFaceName, "Termianl");
  383.         lf.lfHeight=18;       
  384.         hFont =CreateFontIndirect(&lf);
  385.         SelectObject(ps.hdc,hFont);
  386. SetBkMode(ps.hdc,TRANSPARENT);       
  387.         SetTextColor(ps.hdc,RGB(0,0,0));
  388. TextOut(ps.hdc,rc.left +10,rc.top+10,"请您选择交易所",14);
  389.         SetTextColor(ps.hdc,RGB(255,255,255));
  390. TextOut(ps.hdc,rc.left +10-1,rc.top+10-1,"请您选择交易所",14);
  391. DeleteObject(hFont);
  392. EndPaint(hDlg, &ps);
  393. break;
  394. case WM_COMMAND:
  395. switch(wParam)
  396. {
  397. case IDOK:
  398. hctl =GetFocus();
  399. SendMessage(hDlg, WM_COMMAND, GetWindowWord(hctl, GWW_ID), 0L);
  400. break;
  401. case IDC_SH:
  402. EndDialog(hDlg, 2);
  403. break;
  404. case IDC_SZ:
  405. EndDialog(hDlg, 1);
  406. break;
  407. case IDCANCEL:
  408. EndDialog(hDlg, 0);
  409. ghDlgJy =NULL;
  410. break;
  411. }
  412. break;
  413. }
  414. return FALSE;
  415. }
  416. LRESULT CALLBACK SelZqsDlgProc(HWND hDlg, UINT msg,
  417. WPARAM wParam, LPARAM lParam)
  418. {
  419. PAINTSTRUCT ps;
  420. LPDRAWITEMSTRUCT lpdis;
  421.     char temp[20];
  422.     int i;
  423. static HBRUSH  hBrush;
  424. HWND hctl; 
  425. DWORD dw;
  426. switch(msg)
  427. {
  428. case WM_INITDIALOG:
  429. ghDlgJy =hDlg;
  430. CenterWindow(hDlg);
  431. hBrush=CreateSolidBrush(RGB(0,255,255));
  432. for(i=0;i<MAX_ZQS_COUNT;i++)
  433. {
  434. if(Qsxx.zqsid[i]!=0)
  435. SendDlgItemMessage(hDlg, IDC_LIST1, LB_ADDSTRING, 0,
  436. (LPARAM)(LPSTR)Qsxx.zqsjc[i]);
  437. else
  438. break;
  439. }
  440. if(i>0)
  441. SendDlgItemMessage(hDlg, IDC_LIST1, LB_SETCURSEL,(WPARAM)0L,
  442. (LPARAM)(LPSTR)0L);  
  443.  
  444. //hctl =GetDlgItem(hDlg, IDC_LIST1);
  445. //SetFocus(hctl);
  446. return TRUE;
  447. case WM_CTLCOLOR:
  448. SetBkMode((HDC)wParam, TRANSPARENT);
  449. switch(HIWORD(lParam))
  450. {
  451. case CTLCOLOR_DLG:
  452. case CTLCOLOR_MSGBOX:
  453. case CTLCOLOR_STATIC:
  454. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  455. case CTLCOLOR_LISTBOX:
  456. return (LRESULT)hBrush;
  457. }
  458. return (LRESULT)NULL;
  459.         
  460. case WM_DRAWITEM:
  461. lpdis = (LPDRAWITEMSTRUCT)lParam;
  462. if (lpdis->itemID == -1)
  463. BtnFocusState(lpdis);
  464. else
  465. {
  466. switch (lpdis->itemAction)
  467. {
  468. case ODA_DRAWENTIRE: 
  469. BtnDrawEntireItem(lpdis);
  470. break;
  471. case ODA_SELECT:
  472. BtnSelectionState(lpdis);
  473. break;
  474. case ODA_FOCUS:
  475. BtnFocusState(lpdis);
  476. break;
  477. }
  478. }
  479. break;
  480. case WM_PAINT:
  481. BeginPaint(hDlg, &ps);
  482. DrawFrame(ps.hdc, hDlg);
  483. hctl =GetDlgItem(hDlg, IDC_LIST1);
  484. SetFocus(hctl);
  485. EndPaint(hDlg, &ps);
  486. break;
  487. case WM_COMMAND:
  488. switch(wParam)
  489. {
  490. case IDOK:
  491. dw =SendDlgItemMessage(hDlg,IDC_LIST1,LB_GETCURSEL, 0 , 0);
  492. if(dw!=LB_ERR)
  493. {
  494. SendDlgItemMessage(hDlg,IDC_LIST1,LB_GETTEXT,(WPARAM)dw,(LPARAM)(LPSTR)temp);
  495. curChkUsrData.zqsid=(int)dw +1;
  496. DeleteObject(hBrush);
  497. ghDlgJy =NULL;
  498. EndDialog(hDlg,(int)dw+1);
  499. }
  500. else 
  501. {
  502.     ErrMsg(ghWndMain,"选择券商出错");     
  503. DeleteObject(hBrush);
  504. ghDlgJy =NULL;
  505. EndDialog(hDlg, 0);
  506. }
  507. break;
  508. case IDCANCEL:    
  509. DeleteObject(hBrush);
  510. ghDlgJy =NULL;
  511. EndDialog(hDlg, 0);
  512. break;
  513. }
  514. break;
  515. }
  516. return FALSE;
  517. }
  518. ////////将交易密码和股东代码存在本地,以后不再由server检验密码
  519. LRESULT CALLBACK ChkUsrDlgProc(HWND hDlg, UINT msg,
  520. WPARAM wParam, LPARAM lParam)
  521. {
  522. PAINTSTRUCT ps;
  523. int ret;
  524. char tmp[60];
  525. HWND hctl;
  526. int idFocus;
  527. LPDRAWITEMSTRUCT lpdis;
  528. HFONT hFont;
  529. LOGFONT lf;
  530. static HBRUSH hBrush;     
  531. RECT rc;
  532. HDC hDC;
  533. DWORD dw;
  534.     
  535. switch(msg)
  536. {
  537. case WM_INITDIALOG:
  538. ghDlgJy =hDlg;
  539. curChkUsrData.gddm[0] =0;
  540. curChkUsrData.jymm[0] =0;
  541. curChkUsrData.jys =curChkUsrRes.jys;
  542. curChkUsrData.sdHq =sdHq;
  543. SendDlgItemMessage(hDlg, IDC_INPUT, EM_LIMITTEXT, MAX_GDDM_SIZE, 0L);
  544. SendDlgItemMessage(hDlg, IDC_INPUT1, EM_LIMITTEXT, MAX_JYMM_SIZE, 0L);
  545. CenterWindow(hDlg);
  546. gnTimers =0;
  547. hBrush=CreateSolidBrush(RGB(0,255,255));
  548. return TRUE;
  549. case WM_CTLCOLOR:
  550. SetBkMode((HDC)wParam, TRANSPARENT);
  551. switch(HIWORD(lParam))
  552. {
  553. case CTLCOLOR_DLG:
  554. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  555. case CTLCOLOR_MSGBOX:
  556. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  557. case CTLCOLOR_LISTBOX:
  558. case CTLCOLOR_EDIT:
  559. return (LRESULT)(HBRUSH)hBrush;
  560. }
  561. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  562. case WM_DRAWITEM:
  563. lpdis = (LPDRAWITEMSTRUCT)lParam;
  564. if (lpdis->itemID == -1)
  565. BtnFocusState(lpdis);
  566. else
  567. {
  568. switch (lpdis->itemAction)
  569. {
  570. case ODA_DRAWENTIRE: 
  571. BtnDrawEntireItem(lpdis);
  572. break;
  573. case ODA_SELECT:
  574. BtnSelectionState(lpdis);
  575. break;
  576. case ODA_FOCUS:
  577. BtnFocusState(lpdis);
  578. break;
  579. }
  580. }
  581. break;
  582. case WM_PAINT:
  583. BeginPaint(hDlg, &ps);
  584. DrawFrame(ps.hdc, hDlg);
  585. GetClientRect(hDlg, &rc);
  586. SetBkMode(ps.hdc,TRANSPARENT);            
  587.             
  588.             memset(&lf,0,sizeof(lf));
  589. strcpy(lf.lfFaceName, "Termianl"); 
  590. lf.lfWeight =FW_NORMAL;
  591. lf.lfCharSet = ANSI_CHARSET;
  592. lf.lfPitchAndFamily = FF_SCRIPT;
  593.         lf.lfHeight=24;       
  594.         hFont =CreateFontIndirect(&lf);
  595.         SelectObject(ps.hdc,hFont);
  596.        
  597. SetTextColor(ps.hdc,RGB(0,0,0));
  598. TextOut(ps.hdc,rc.left+20,44,"股东代码",8);
  599. SetTextColor(ps.hdc,RGB(255,255,255));
  600. TextOut(ps.hdc,rc.left+20-1,44-1,"股东代码",8);
  601. SetTextColor(ps.hdc,RGB(0,0,0));
  602. TextOut(ps.hdc,rc.left+20,84,"交易密码",8);
  603. SetTextColor(ps.hdc,RGB(255,255,255));
  604. TextOut(ps.hdc,rc.left+20-1,84-1,"交易密码",8);
  605. if(curChkUsrData.zqsid !=0)
  606. {
  607. strcpy(tmp,&Qsxx.zqsjc[curChkUsrData.zqsid -1][0]);
  608. strcat(tmp,"欢迎您");
  609. }
  610. SetTextColor(ps.hdc,RGB(0,0,0));
  611. TextOut(ps.hdc,rc.left+20,rc.top +15,tmp,strlen(tmp));
  612. SetTextColor(ps.hdc,RGB(255,255,255));
  613. TextOut(ps.hdc,rc.left+20-1,rc.top +15-1,tmp,strlen(tmp));
  614. DeleteObject(hFont);
  615. EndPaint(hDlg, &ps);
  616. break;
  617. case WM_TIMER:
  618. hDC =GetDC(hDlg);
  619.     
  620. GetClientRect(hDlg, &rc);
  621. rc.right =rc.right -40;
  622. rc.bottom =rc. bottom -15;
  623. strcpy(tmp,"88");
  624. dw=GetTextExtent(hDC,tmp,strlen(tmp));
  625. rc.left =rc.right -LOWORD(dw)-12;
  626. rc.top = rc.bottom -HIWORD(dw);
  627.         
  628. SelectObject(hDC,GetStockObject(WHITE_PEN));    
  629. MoveTo(hDC,rc.left+1,rc.top-1);
  630. LineTo(hDC,rc.right+1,rc.top-1);
  631.     
  632. MoveTo(hDC,rc.left-1,rc.top+1);
  633. LineTo(hDC,rc.left-1,rc.bottom+1);     
  634. SelectObject(hDC,GetStockObject(BLACK_PEN));    
  635. MoveTo(hDC,rc.right+1,rc.top+1);
  636. LineTo(hDC,rc.right+1,rc.bottom+1);
  637.     
  638. MoveTo(hDC,rc.left+1,rc.bottom+1);
  639. LineTo(hDC,rc.right+1,rc.bottom+1);     
  640.     
  641. wsprintf(tmp,"%d",MAX_JY_WAIT_TIME-gnTimers);
  642. if(MAX_JY_WAIT_TIME-gnTimers<10)
  643. {
  644.     tmp[1]=tmp[0];
  645.     tmp[0]='0';
  646. }
  647.     
  648. SetBkColor(hDC,RGB(255,0,255));
  649. SetTextColor(hDC,RGB(255,255,0));
  650.     
  651. dw=GetTextExtent(hDC,tmp,strlen(tmp));
  652.     
  653. ExtTextOut(hDC,(int)(rc.right-rc.left-LOWORD(dw))/2+rc.left, rc.top, ETO_CLIPPED|ETO_OPAQUE, &rc,tmp , 2, NULL);
  654. ReleaseDC(hDlg, hDC);
  655. if(gnTimers++ >=MAX_JY_WAIT_TIME)
  656. {
  657. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  658. break;
  659. }
  660. break;
  661. case WM_COMMAND:
  662. gnTimers =0;
  663. switch(wParam)
  664. {
  665. case IDOK:
  666. hctl =GetFocus();
  667. idFocus =GetWindowWord(hctl, GWW_ID);
  668. if(idFocus ==IDCANCEL)
  669. {
  670. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  671. break;
  672. }
  673. hctl =GetDlgItem(hDlg, IDC_INPUT);
  674. if(curChkUsrData.gddm[0] ==0)
  675. {
  676. GetDlgItemText(hDlg, IDC_INPUT, curChkUsrData.gddm, sizeof(curChkUsrData.gddm));
  677. if(curChkUsrData.gddm[0] !=0)
  678. {
  679. hctl =GetDlgItem(hDlg, IDC_INPUT1);
  680. SetFocus(hctl);
  681. }
  682. break;
  683. }
  684. GetDlgItemText(hDlg, IDC_INPUT1, curChkUsrData.jymm, sizeof(curChkUsrData.jymm));
  685. if(curChkUsrData.jymm[0] ==0)
  686. break;
  687. EnableWindow(hDlg, FALSE);
  688. hctl =GetDlgItem(hDlg, IDOK);
  689. SetFocus(hctl);
  690. if(gfTest)
  691. SendMessage(hDlg,WM_JY_RES,0,0L);
  692. else
  693. {
  694. SetTimer(hDlg, 1, 1000, NULL);
  695. ret =UDP_Jy_ChkUsr(&curChkUsrData, &curChkUsrRes);
  696. if(ret <0)
  697. {
  698. ErrMsg(hDlg, "Failed send data");
  699. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  700. }
  701. }
  702. break;
  703. case IDCANCEL:
  704. KillTimer(hDlg, 1);
  705. if(curChkUsrData.jymm[0] !=0)
  706. SendJyExit(curChkUsrData.gddm);
  707. udpread_stop =TRUE;
  708. ghDlgJy =NULL;
  709. DeleteObject(hBrush);
  710. EndDialog(hDlg, 1);
  711. break;
  712. }
  713. break;
  714. case WM_JY_RES:
  715. if(gfTest)
  716. {
  717. curChkUsrRes.userId =1;
  718. curChkUsrRes.flag=ret =ANS_SUCC;
  719. }
  720. else
  721. ret =curChkUsrRes.flag;
  722. if(ret!=ANS_SUCC)
  723. {
  724. curChkUsrRes.userId=0;
  725. switch(ret)
  726. {
  727.     case '1':
  728. strcpy(tmp,"请您注意,无此股东代码!");
  729. break;
  730.     case '2':
  731. strcpy(tmp,"请您注意,您已被删除!");
  732. break;
  733. case '3':
  734. strcpy(tmp,"请您注意,您已挂失!");
  735. break;
  736. case '4':
  737. strcpy(tmp,"请您注意,您已被冻结!");
  738. break;
  739.     case '5':
  740. strcpy(tmp,"请您注意,没有您的密码");
  741. break;
  742.     case '6':
  743. strcpy(tmp,"股东代码与交易密码不符!");
  744. break;
  745.              case ANS_SYS_ERR:
  746.              strcpy(tmp,"请您注意,主机系统错!");
  747.              break;
  748.              case ANS_SUSP_REQ:
  749.              strcpy(tmp,"主机正在处理您的上次请求!");
  750.              break;
  751.              case ANS_NO_PRIV:
  752.              strcpy(tmp,"您没有权限进入主机!");
  753.              break;
  754.                     default:
  755.                      strcpy(tmp,"请您注意,未知错误");
  756.                 }    
  757. MessageBox(ghDlgJy, tmp,"用户检验", MB_OK);
  758. }
  759. KillTimer(hDlg, 1);
  760. ghDlgJy =NULL;
  761. EndDialog(hDlg, 1);
  762. break;
  763. }
  764. return FALSE;
  765. }
  766. LRESULT CALLBACK JyDlgProc(HWND hDlg, UINT msg,
  767. WPARAM wParam, LPARAM lParam)
  768. {
  769. PAINTSTRUCT ps;
  770. LPDRAWITEMSTRUCT lpdis;
  771. HWND hctl;
  772. int x,i,Width,gap;
  773. RECT rc;
  774.     static HBRUSH hBrush;
  775. int GpFunc[8]={IDC_JY_BUY,IDC_JY_SELL,IDC_JY_CANCEL,IDC_JY_CJCX,IDC_JY_WTCX,
  776. IDC_JY_YECX,IDC_JY_CHGPWD,IDC_EXIT};
  777. switch(msg)
  778. {
  779. case WM_INITDIALOG:
  780. gnTimers =0;
  781. x =GetSystemMetrics(SM_CXSCREEN);
  782. GetWindowRect(ghWndStatus,&rc);
  783. SetWindowPos(hDlg,(HWND)HWND_TOP,0,rc.top,
  784. x , rc.bottom-rc.top,SWP_NOZORDER);
  785. gap =4;
  786. Width =(x-gap*9)/8;
  787. for(i=0;i<8;i++)
  788. {
  789. hctl =GetDlgItem(hDlg,GpFunc[i]);
  790. SetWindowPos(hctl,(HWND)NULL,(Width+gap)*i +gap,3,Width,
  791. rc.bottom-rc.top-8,SWP_NOZORDER);
  792. }
  793. hBrush=CreateSolidBrush(RGB(0,255,255));            
  794. SetTimer(hDlg, 1, 500, NULL);
  795. return TRUE;
  796. case WM_CTLCOLOR:
  797. switch(HIWORD(lParam))
  798. {
  799. case CTLCOLOR_DLG:
  800. return (LRESULT)hBrush;
  801. case CTLCOLOR_MSGBOX:
  802. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  803. }
  804. //SetBkMode((HDC)wParam, TRANSPARENT);
  805. return (LRESULT)NULL;
  806. case WM_DRAWITEM:
  807. lpdis = (LPDRAWITEMSTRUCT)lParam;
  808. if (lpdis->itemID == -1)
  809. BtnFocusState(lpdis);
  810. else
  811. {
  812. switch (lpdis->itemAction)
  813. {
  814. case ODA_DRAWENTIRE: 
  815. BtnDrawEntireItem(lpdis);
  816. break;
  817. case ODA_SELECT:
  818. BtnSelectionState(lpdis);
  819. break;
  820. case ODA_FOCUS:
  821. BtnFocusState(lpdis);
  822. break;
  823. }
  824. }
  825. break;
  826. case WM_TIMER:
  827. if(gnTimers+10>MAX_IDEL_TIME*2)
  828. {  
  829.     if(gnTimers*(int)(gnTimers/2)==gnTimers)
  830.     {
  831. DrawTime(-3);
  832. MessageBeep(0);
  833. }
  834. else
  835. DrawTime(-2);
  836. }
  837. if(gnTimers++ >MAX_IDEL_TIME*2)
  838. {
  839. curChkUsrRes.flag =-1;
  840. gnTimers =0; 
  841. curChkUsrRes.userId=0;
  842. SendMessage(hDlg, WM_COMMAND, IDC_EXIT, 0L);
  843. }
  844. break;
  845. case WM_PAINT:
  846. BeginPaint(hDlg, &ps);
  847. DrawFrame(ps.hdc, hDlg);
  848. EndPaint(hDlg, &ps);
  849. break;
  850. case WM_COMMAND:
  851. gnTimers =0;
  852. switch(wParam)
  853. {
  854. case IDC_JY_BUY:
  855. JyFunc = BUY_FUNC;
  856. break;
  857. case IDC_JY_SELL:
  858. JyFunc = SELL_FUNC;
  859. break;
  860. case IDC_JY_CANCEL:
  861. JyFunc = CANCEL_FUNC;
  862. break;
  863. case IDC_JY_CJCX:
  864. JyFunc =CJCX_FUNC;
  865. break;
  866. case IDC_JY_WTCX:
  867. JyFunc = WTCX_FUNC;
  868. break;
  869. case IDC_JY_YECX:
  870. JyFunc = YECX_FUNC;
  871. break;
  872. case IDC_JY_CHGPWD:
  873. JyFunc =CHGPWD_FUNC;
  874. break;
  875. case IDOK:
  876. hctl =GetFocus();
  877. SendMessage(hDlg, WM_COMMAND, GetWindowWord(hctl, GWW_ID), 0L);
  878. break;
  879. case IDC_EXIT:
  880. JyFunc =EXIT_FUNC;
  881. case IDCANCEL:
  882. KillTimer(hDlg, 1);
  883. DeleteObject(hBrush);
  884. if(JyFunc!=EXIT_FUNC)
  885. JyFunc = NULL_FUNC;
  886. break;
  887. default:
  888. return FALSE;
  889. }  
  890. EndDialog(hDlg, 0);
  891. break;
  892. }
  893. return FALSE;
  894. }
  895. LRESULT CALLBACK AskPwdDlgProc(HWND hDlg, UINT msg,
  896. WPARAM wParam, LPARAM lParam)
  897. {
  898. static JY_ASK_CHGPWD ChgPwdData;
  899. static JY_ANS_CHGPWD ChgPwdRes;
  900. PAINTSTRUCT ps;
  901. static int state =0;
  902. char tmp[60];
  903. HWND hctl;
  904. static HBRUSH hBrush;
  905. switch(msg)
  906. {
  907. case WM_INITDIALOG:
  908. ghDlgJy =hDlg;
  909. SendDlgItemMessage(hDlg, IDC_OLDPWD, EM_LIMITTEXT, MAX_JYMM_SIZE, 0L);
  910. CenterWindow(hDlg);
  911. //ChgPwdData.newPwd[0] =0;
  912. hBrush=CreateSolidBrush(RGB(0,255,255));
  913. IsCanPwdChg =FALSE;
  914. return TRUE;
  915. case WM_CTLCOLOR:
  916. SetBkMode((HDC)wParam, TRANSPARENT);
  917. switch(HIWORD(lParam))
  918. {
  919. case CTLCOLOR_DLG:
  920. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  921. case CTLCOLOR_EDIT:
  922. return (LRESULT)hBrush;
  923. }
  924. return TRUE;
  925. case WM_PAINT:
  926. BeginPaint(hDlg, &ps);
  927. DrawFrame(ps.hdc, hDlg);
  928. EndPaint(hDlg, &ps);
  929. break;
  930. case WM_COMMAND:
  931. gnTimers =0;
  932. switch(wParam)
  933. {
  934. case IDOK:
  935. hctl =GetDlgItem(hDlg, IDC_OLDPWD);
  936. SetFocus(hctl);
  937. GetDlgItemText(hDlg, IDC_OLDPWD, tmp, sizeof(tmp));
  938. //if(tmp[0] ==0)
  939. // break;
  940. if(strcmp(tmp,curChkUsrData.jymm)==0)
  941. {
  942. IsCanPwdChg =TRUE;
  943. EndDialog(hDlg, 0);
  944. ghDlgJy =NULL;
  945. }
  946. else
  947. {   
  948.     ErrMsg(hDlg, "输入密码错,不能修改密码!");
  949. IsCanPwdChg =FALSE;
  950. EndDialog(hDlg, 0);
  951. ghDlgJy =NULL;
  952. }
  953. break;
  954. case IDCANCEL:
  955. IsCanPwdChg =FALSE;
  956. EndDialog(hDlg, 0);
  957. ghDlgJy =NULL;
  958. break;
  959. }
  960. break;
  961. }
  962. return FALSE;
  963. }
  964. LRESULT CALLBACK ChgPwdDlgProc(HWND hDlg, UINT msg,
  965. WPARAM wParam, LPARAM lParam)
  966. {
  967. static JY_ASK_CHGPWD ChgPwdData;
  968. static JY_ANS_CHGPWD ChgPwdRes;
  969. PAINTSTRUCT ps;
  970. static int state =0;
  971. char tmp[60];
  972. HWND hctl;
  973. static HBRUSH hBrush;
  974. int ret;
  975. switch(msg)
  976. {
  977. case WM_INITDIALOG:
  978. ghDlgJy =hDlg;
  979. memset(&ChgPwdData, 0, sizeof(ChgPwdData));
  980. memset(&ChgPwdRes, 0, sizeof(ChgPwdRes));
  981. ChgPwdData.jys =curChkUsrRes.jys;
  982. ChgPwdData.userId =curChkUsrRes.userId;
  983. strcpy(ChgPwdData.gddm, curChkUsrRes.gddm);
  984. state =0;
  985. gnTimers =0;
  986. SendDlgItemMessage(hDlg, IDC_NEWPWD, EM_LIMITTEXT, MAX_JYMM_SIZE, 0L);
  987. CenterWindow(hDlg);
  988. ChgPwdData.newPwd[0] =0;
  989. hBrush=CreateSolidBrush(RGB(0,255,255));
  990. SetTimer(hDlg, 1, 1000, NULL);
  991. return TRUE;
  992. case WM_CTLCOLOR:
  993. SetBkMode((HDC)wParam, TRANSPARENT);
  994. switch(HIWORD(lParam))
  995. {
  996. case CTLCOLOR_DLG:
  997. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  998. case CTLCOLOR_EDIT:
  999. return (LRESULT)hBrush;
  1000. }
  1001. return TRUE;
  1002. case WM_PAINT:
  1003. BeginPaint(hDlg, &ps);
  1004. DrawFrame(ps.hdc, hDlg);
  1005. EndPaint(hDlg, &ps);
  1006. break;
  1007. case WM_TIMER:
  1008. if(gnTimers ++>60)
  1009. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  1010. break;
  1011. case WM_COMMAND:
  1012. gnTimers =0;
  1013. switch(wParam)
  1014. {
  1015. case IDOK:
  1016. if(state >=2) break;
  1017. //if(ChgPwdData.newPwd[0] !=0) break;
  1018. hctl =GetDlgItem(hDlg, IDC_NEWPWD);
  1019. SetFocus(hctl);
  1020. GetDlgItemText(hDlg, IDC_NEWPWD, tmp, sizeof(tmp));
  1021. if(state ==0)
  1022. {
  1023. if(tmp[0] ==0)
  1024. break;
  1025. strcpy(ChgPwdData.newPwd, tmp);
  1026. SetDlgItemText(hDlg, IDC_COMMENT, "重输一次");
  1027. SetDlgItemText(hDlg, IDC_NEWPWD, "");
  1028. state =1;
  1029. break;
  1030. }
  1031. if(strcmp(ChgPwdData.newPwd, tmp))
  1032. {
  1033. ErrMsg(hDlg, "两次输入要相同!n请重新输入");
  1034. SetDlgItemText(hDlg, IDC_COMMENT, "新密码");
  1035. SetDlgItemText(hDlg, IDC_NEWPWD, "");
  1036. state =0;
  1037. break;
  1038. }
  1039. state =2;
  1040. UDP_Jy_ChgPwd(&ChgPwdData, &ChgPwdRes);
  1041. break;
  1042. case IDCANCEL:
  1043. udpread_stop =TRUE;
  1044. KillTimer(hDlg, 1);
  1045. EndDialog(hDlg, 0);
  1046. ghDlgJy =NULL;
  1047. break;
  1048. }
  1049. break;
  1050. case WM_JY_RES:
  1051. ret=ChgPwdRes.flag;
  1052. if(ret!=ANS_SUCC)
  1053. {
  1054. switch(ret)
  1055. {
  1056.     case '1':
  1057. strcpy(tmp,"请您注意,无此股东代码!");
  1058. break;
  1059.     case '2':
  1060. strcpy(tmp,"请您注意,您已被删除!");
  1061. break;
  1062. case '3':
  1063. strcpy(tmp,"请您注意,您已挂失!");
  1064. break;
  1065. case '4':
  1066. strcpy(tmp,"请您注意,您已被冻结!");
  1067. break;
  1068.     case '5':
  1069. strcpy(tmp,"请您注意,没有您的密码");
  1070. break;
  1071.     case '6':
  1072. strcpy(tmp,"股东代码与交易密码不符!");
  1073. break;
  1074.              case ANS_SYS_ERR:
  1075.              strcpy(tmp,"请您注意,主机系统错!");
  1076.              break;
  1077.              case ANS_SUSP_REQ:
  1078.              strcpy(tmp,"主机正在处理您的上次请求!");
  1079.              break;
  1080.              case ANS_NO_PRIV:
  1081.              strcpy(tmp,"您没有权限进入主机!");
  1082.              break;
  1083.                     default:
  1084.                      strcpy(tmp,"请您注意,未知错误");
  1085.                 }
  1086. }
  1087. else
  1088. {
  1089. strcpy(tmp,"您的密码已修改!");
  1090. }
  1091. MessageBox(ghDlgJy, tmp,"修改密码", MB_OK);
  1092. KillTimer(hDlg, 1);
  1093. ghDlgJy =NULL;
  1094. DeleteObject(hBrush);
  1095. EndDialog(hDlg, 0);
  1096. break;
  1097. }
  1098. return FALSE;
  1099. }
  1100. LRESULT CALLBACK BuySellDlgProc(HWND hDlg, UINT msg,
  1101. WPARAM wParam, LPARAM lParam)
  1102. {
  1103. static JY_ASK_BUYSELL BuySellData;
  1104. static JY_ANS_BUYSELL BuySellRes;
  1105. int i, k,ret;
  1106. DWORD dw;
  1107. char tmp[100], tmp1[100];
  1108. PAINTSTRUCT ps;
  1109. HWND hctl;
  1110. LPDRAWITEMSTRUCT lpdis;
  1111. static int state =0;
  1112. int idFocus;
  1113. static HBRUSH hBuyBrush,hSellBrush;
  1114. RECT rc;
  1115. HDC hdc;
  1116. switch(msg)
  1117. {
  1118. case WM_INITDIALOG:
  1119. gnTimers =0;
  1120. ghDlgJy =hDlg;
  1121. memset(&BuySellData, 0, sizeof(BuySellData));
  1122. memset(&BuySellRes, 0, sizeof(BuySellRes));
  1123. BuySellData.jys =curChkUsrRes.jys;
  1124. strcpy(BuySellData.gddm, curChkUsrRes.gddm);
  1125. if(BuySellData.jys==0)
  1126. strcpy(tmp,"深圳A股");
  1127. if(BuySellData.jys==1)
  1128. strcpy(tmp,"上海A股");
  1129. BuySellData.wtgs =0;
  1130. BuySellData.wtjg =0;
  1131. BuySellData.bs =(char)lParam;
  1132. BuySellData.userId =curChkUsrRes.userId;
  1133. if(BuySellData.bs =='B')
  1134. {
  1135. SetDlgItemText(hDlg, IDOK, "买入");
  1136. strcat(tmp,"股票买入");
  1137. }
  1138. else
  1139. SetDlgItemText(hDlg, IDOK, "卖出");
  1140. strcat(tmp,"股票卖出");
  1141. }                             
  1142. SetWindowText(hDlg,tmp);                             
  1143. SendDlgItemMessage(hDlg, IDC_ZQDM, CB_LIMITTEXT, MAX_ZQDM_SIZE, 0L);
  1144. SendDlgItemMessage(hDlg, IDC_JG, EM_LIMITTEXT, 7, 0L);
  1145. SendDlgItemMessage(hDlg, IDC_SL, EM_LIMITTEXT, 8, 0L);
  1146. i =HqPaintData.sortData.key[HqPaintData.curRecNum+HqPaintData.curSelRec];
  1147. strcpy(tmp, HqData[HqPaintData.jys].lpPreData[i].zqmc);
  1148. k =-1;
  1149. for(i =0; i<HqData[BuySellData.jys].recCount; i++)
  1150. {     
  1151. //if(!IsZsRec(BuySellData.jys, i))
  1152. //{
  1153. SendDlgItemMessage(hDlg, IDC_ZQDM, CB_ADDSTRING,
  1154. 0, (LPARAM)(LPSTR)HqData[BuySellData.jys].lpPreData[i].zqmc);
  1155. if(!strcmp(tmp, HqData[BuySellData.jys].lpPreData[i].zqmc))
  1156. k =i;
  1157. //}
  1158. }
  1159. SendDlgItemMessage(hDlg, IDC_ZQDM, CB_SETCURSEL, k, 0L);
  1160. gnTimers =0;
  1161. state =0;
  1162. SetTimer(hDlg, 1, 1000, NULL);
  1163. hBuyBrush=CreateSolidBrush(RGB(255,0,255));
  1164. hSellBrush=CreateSolidBrush(RGB(0,255,255));
  1165. SetDlgItemText(hDlg,IDC_STATIC,"证券代码");
  1166. SetDlgItemText(hDlg,IDC_STATIC2,"委托数量");
  1167. SetDlgItemText(hDlg,IDC_STATIC1,"委托价格");
  1168. CenterWindow(hDlg);
  1169. return TRUE;
  1170. case WM_CTLCOLOR:
  1171. SetBkMode((HDC)wParam, TRANSPARENT);
  1172. switch(HIWORD(lParam))
  1173. {
  1174. case CTLCOLOR_STATIC:
  1175. case CTLCOLOR_DLG:  
  1176. if(BuySellData.bs =='B')
  1177. return (LRESULT)hBuyBrush;
  1178. else
  1179. return (LRESULT)hSellBrush;
  1180. case CTLCOLOR_MSGBOX:
  1181. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  1182. case CTLCOLOR_LISTBOX:
  1183. case CTLCOLOR_EDIT:
  1184. return (LRESULT)(HBRUSH)NULL;
  1185. }
  1186. return (LRESULT)NULL;
  1187. case WM_DRAWITEM:
  1188. lpdis = (LPDRAWITEMSTRUCT)lParam;
  1189. if (lpdis->itemID == -1)
  1190. BtnFocusState(lpdis);
  1191. else
  1192. {
  1193. switch (lpdis->itemAction)
  1194. {
  1195. case ODA_DRAWENTIRE: 
  1196. BtnDrawEntireItem(lpdis);
  1197. break;
  1198. case ODA_SELECT:
  1199. BtnSelectionState(lpdis);
  1200. break;
  1201. case ODA_FOCUS:
  1202. BtnFocusState(lpdis);
  1203. break;
  1204. }
  1205. }
  1206. break;
  1207. case WM_PAINT:
  1208. BeginPaint(hDlg, &ps);
  1209. DrawFrame(ps.hdc, hDlg);
  1210. EndPaint(hDlg, &ps);
  1211. break;
  1212. case WM_TIMER:
  1213. if(gnTimers++ >300)
  1214. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  1215. break;
  1216. case WM_COMMAND:
  1217. gnTimers =0;
  1218. switch(wParam)
  1219. {
  1220. case IDOK:
  1221. hctl =GetFocus();
  1222. idFocus =GetWindowWord(hctl, GWW_ID);
  1223. if(idFocus ==IDCANCEL)
  1224. {
  1225. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  1226. break;
  1227. }
  1228. //if(BuySellData.wtgs !=0 && BuySellData.wtjg !=0) break;
  1229. GetDlgItemText(hDlg, IDC_ZQDM, tmp, sizeof(tmp));
  1230. hctl =GetDlgItem(hDlg, IDC_ZQDM);
  1231. if(tmp[0] ==0)
  1232. {
  1233. SetFocus(hctl);
  1234. break;
  1235. }
  1236. for(i =0; i<HqData[BuySellData.jys].recCount; i++)
  1237. if(!strcmp(HqData[BuySellData.jys].lpPreData[i].zqdm, tmp))
  1238. break;
  1239. if(i < HqData[BuySellData.jys].recCount)
  1240. {
  1241. SendDlgItemMessage(hDlg, IDC_ZQDM, CB_SETCURSEL, i, 0L);
  1242. strcpy(BuySellData.gpdm, HqData[BuySellData.jys].lpPreData[i].zqdm);
  1243. }
  1244. else
  1245. {
  1246. dw =SendDlgItemMessage(hDlg, IDC_ZQDM, CB_GETCURSEL, 0, 0L);
  1247. if(dw ==CB_ERR)
  1248. {
  1249. SetDlgItemText(hDlg, IDC_ZQDM, "");
  1250. SetFocus(hctl);
  1251. break;
  1252. }
  1253. i =(int)dw;
  1254. SendDlgItemMessage(hDlg, IDC_ZQDM, CB_GETLBTEXT, i, (LPARAM)(LPSTR)tmp1);
  1255. if(!strcmp(tmp1, tmp))
  1256. strcpy(BuySellData.gpdm, HqData[BuySellData.jys].lpPreData[i].zqdm);
  1257. else
  1258. {
  1259. SetDlgItemText(hDlg, IDC_ZQDM, "");
  1260. SetFocus(hctl);
  1261. break;
  1262. }
  1263. }
  1264. //if(state ==1) goto ACCEPT;
  1265. //GetDlgItemText(hDlg, IDC_JG, tmp, sizeof(tmp));
  1266. hctl =GetDlgItem(hDlg, IDC_JG);
  1267. SetFocus(hctl);
  1268. if(idFocus !=IDOK && idFocus !=IDC_JG
  1269. && idFocus !=IDC_SL)
  1270. {
  1271. if(IsWindowVisible(ghWndHq))
  1272. {
  1273. for(k =0; k<HqPaintData.recCount; k++)
  1274. {
  1275. if(IsZsRec(HqPaintData.jys, k))
  1276. {
  1277. i++;
  1278. continue;
  1279. }
  1280. if(HqPaintData.sortData.key[k] ==i)
  1281. break;
  1282. }
  1283. if(k <HqPaintData.recCount)
  1284. {
  1285. HqPaintData.curSelRec =0;
  1286. HqPaintData.curRecNum =k;
  1287. SendMessage(ghWndHq, WM_COMMAND, IDM_GRAPH, 0L);
  1288. }
  1289. }
  1290. if(!IsWindowVisible(ghWndHq))
  1291. {
  1292. if(tmp[0]<'0'||tmp[0]>'9')
  1293. {    
  1294. if(i<HqData[BuySellData.jys].recCount&&i>0)
  1295. strcpy(tmp,HqData[BuySellData.jys].lpPreData[i].zqdm);
  1296. }
  1297. SetWindowText(hWndInput, &tmp[0]);
  1298. if(tmp[0]!=0)
  1299. {
  1300. SendMessage(ghWndXlt, WM_KEYDOWN, VK_RETURN, 0L);
  1301. InvalidateRect(ghWndXlt, NULL, TRUE);
  1302. InvalidateRect(ghWndJlt, NULL, TRUE);
  1303. InvalidateRect(ghWndMmp, NULL, TRUE);
  1304. InvalidateRect(ghWndLitHq, NULL, TRUE);
  1305. InvalidateRect(ghWndCj, NULL, TRUE);
  1306. }
  1307. }
  1308. break;
  1309. }
  1310. if(state ==1) goto ACCEPT;
  1311. GetDlgItemText(hDlg, IDC_JG, tmp, sizeof(tmp));
  1312. if(tmp[0] ==0)
  1313. {
  1314. SetFocus(hctl);
  1315. break;
  1316. }
  1317. else
  1318. {
  1319. k =strlen(tmp);
  1320. for(i =0; i<k; i++)
  1321. {
  1322. if(!isdigit(tmp[i]) && tmp[i] !='.')
  1323. {
  1324. SetDlgItemText(hDlg, IDC_JG, "");
  1325. SetFocus(hctl);
  1326. return FALSE;
  1327. }
  1328. }
  1329. }
  1330. BuySellData.wtjg =(long)(_atold(tmp)*100);
  1331. hctl =GetDlgItem(hDlg, IDC_SL);
  1332. SetFocus(hctl);
  1333. if(idFocus ==IDC_JG) break;
  1334. GetDlgItemText(hDlg, IDC_SL, tmp, sizeof(tmp));
  1335. if(tmp[0] ==0)
  1336. {
  1337. SetFocus(hctl);
  1338. break;
  1339. }
  1340. else
  1341. {
  1342. k =strlen(tmp);
  1343. /*
  1344. if(k >8)
  1345. {
  1346. tmp[8] =0;
  1347. SetDlgItemText(hDlg, IDC_SL, tmp);
  1348. SendDlgItemMessage(hDlg, IDC_SL, EM_SETSEL, 0, MAKELONG(0, -1));
  1349. SetFocus(hctl);
  1350. break;
  1351. }
  1352. */
  1353. for(i =0; i<k; i++)
  1354. {
  1355. if(!isdigit(tmp[i]))
  1356. {
  1357. SetDlgItemText(hDlg, IDC_SL, "");
  1358. //SetFocus(hctl);
  1359. return FALSE;
  1360. }
  1361. }
  1362. }
  1363. BuySellData.wtgs =atol(tmp);
  1364. ACCEPT:
  1365. if(state==0)
  1366. state =1;
  1367. else
  1368. state++;
  1369. hctl =GetDlgItem(hDlg, IDOK);
  1370. SetFocus(hctl);
  1371. if(state ==2)
  1372. {    
  1373. state =0;
  1374. GetClientRect(hDlg, &rc);
  1375. EnableWindow(hDlg, FALSE);
  1376. k=UDP_Jy_BuySell(&BuySellData, &BuySellRes);
  1377. hdc =GetDC(hDlg);
  1378. SetBkColor(hdc,RGB(255,0,0));
  1379. SelectObject(hdc,GetStockObject(WHITE_PEN));
  1380. if(k>0)
  1381. strcpy(&tmp[0],"您的委托已传到了主机,请等待");
  1382. if(k==0)
  1383.     strcpy(&tmp[0],"已经收市,不能委托");
  1384. if(k<0)
  1385.     strcpy(&tmp[0],"您的委托未传到了主机,请检查通讯情况");
  1386. TextOut(hdc,rc.left +10,rc.bottom -20,tmp,strlen(tmp));
  1387. ReleaseDC(hDlg,hdc);
  1388. }
  1389. break;
  1390. case IDCANCEL:
  1391. udpread_stop =TRUE;
  1392. KillTimer(hDlg, 1);
  1393. ghDlgJy =NULL;
  1394. DeleteObject(hBuyBrush);
  1395. DeleteObject(hSellBrush);
  1396. EndDialog(hDlg, 0);
  1397. break;
  1398. }
  1399. break;
  1400. case WM_JY_RES:
  1401. ret=BuySellRes.flag;
  1402. if(ret!=ANS_SUCC)
  1403. {
  1404. switch(ret)
  1405. {
  1406.     case '1':
  1407. strcpy(tmp,"请您注意,股票代码错!");
  1408. break;
  1409.     case '2':
  1410. strcpy(tmp,"股东代码或资金帐号错!");
  1411. break;
  1412. case '3':
  1413. strcpy(tmp,"请您注意,委托价格错!");
  1414. break;
  1415. case '4':
  1416. strcpy(tmp,"请您注意,委托股数错!");
  1417. break;
  1418.     case '5':
  1419. strcpy(tmp,"请您输入整手股数!");
  1420. break;
  1421.     case '6':
  1422. strcpy(tmp,"委托股数超过上限!");
  1423. break;
  1424. case '7':
  1425. strcpy(tmp,"请您注意,资金不足!");
  1426. break;
  1427. case '8':
  1428. strcpy(tmp,"系统无法产生合同号码!");
  1429. case '9':
  1430. strcpy(tmp,"请您注意,您已卖空!");
  1431. break;
  1432. case 'A':
  1433. strcpy(tmp,"请您注意,您已超时!");
  1434. break;
  1435. case 'I':
  1436. strcpy(tmp,"已有相同股东代码进入主机交易系统!");
  1437. break;
  1438.              case ANS_SYS_ERR:
  1439.              strcpy(tmp,"请您注意,主机系统错!");
  1440.              break;
  1441.              case ANS_SUSP_REQ:
  1442.              strcpy(tmp,"主机正在处理您的上次请求!");
  1443.              break;
  1444.              case ANS_NO_PRIV:
  1445.              strcpy(tmp,"您没有权限进入主机!");
  1446.              break;
  1447.                     default:
  1448.                      strcpy(tmp,"请您注意,未知错误");
  1449.                 }
  1450.                 MessageBox(ghDlgJy, tmp,"股票买卖", MB_OK);
  1451. }
  1452. else
  1453. {
  1454. wsprintf(tmp, "委托已进入电脑系统! 合同号码是%s", BuySellRes.hthm);
  1455. MessageBox(hDlg, tmp, "股票买卖", MB_OK);
  1456. }
  1457. hdc =GetDC(hDlg);
  1458. GetClientRect(hDlg, &rc);
  1459. SetBkColor(hdc,RGB(255,0,0));
  1460. SelectObject(hdc,GetStockObject(WHITE_PEN));
  1461. strcpy(&tmp[0],"欢迎您继续委托...                         ");
  1462. TextOut(hdc,rc.left +10,rc.bottom -20,tmp,strlen(tmp));
  1463. ReleaseDC(hDlg,hdc);
  1464. SendDlgItemMessage(hDlg, IDC_JG, EM_SETSEL, 0, MAKELONG(0,-1));
  1465. SendDlgItemMessage(hDlg, IDC_JG, WM_CLEAR, 0, 0);
  1466. SendDlgItemMessage(hDlg, IDC_SL, EM_SETSEL, 0, MAKELONG(0,-1));
  1467. SendDlgItemMessage(hDlg, IDC_SL, WM_CLEAR, 0, 0);
  1468. gnTimers =0;
  1469. state =0;
  1470. EnableWindow(hDlg, TRUE);
  1471. break;
  1472. }
  1473. return FALSE;
  1474. }
  1475. LRESULT CALLBACK CancelDlgProc(HWND hDlg, UINT msg,
  1476. WPARAM wParam, LPARAM lParam)
  1477. {
  1478. static JY_ASK_CANCEL CancelData;
  1479. static JY_ANS_CANCEL CancelRes;
  1480. static JY_ASK_WTCX WtcxData;
  1481. static JY_ANS_WTCX WtcxRes;
  1482. PAINTSTRUCT ps;
  1483. int i, j, k;
  1484. DWORD dw;
  1485. HWND hctl;
  1486. static int sel_num[MAX_CANCEL_SENDCOUNT];
  1487. char tmp[256],gpmc[9];
  1488. LPSTR lpTmp;
  1489. static int state;
  1490. int idFocus,ret;
  1491. static BOOL fFirst =TRUE;
  1492. static  hBrush;
  1493. LPDRAWITEMSTRUCT lpdis;
  1494. LPMEASUREITEMSTRUCT lpmis;
  1495. TEXTMETRIC tm;
  1496. HWND hDC;
  1497. switch(msg)
  1498. {
  1499. case WM_INITDIALOG:
  1500. ghDlgJy =hDlg;
  1501. memset(&CancelData, 0, sizeof(CancelData));
  1502. memset(&CancelRes, 0, sizeof(CancelRes));
  1503. memset(&WtcxData, 0, sizeof(WtcxData));
  1504. memset(&WtcxRes, 0, sizeof(WtcxRes));
  1505. CancelData.jys =curChkUsrRes.jys;
  1506. CancelData.cancelCount =0;
  1507. CancelData.userId =curChkUsrRes.userId;
  1508. strcpy(CancelData.gddm, curChkUsrRes.gddm);
  1509. WtcxData.jys =curChkUsrRes.jys;
  1510. WtcxData.userId =curChkUsrRes.userId;
  1511. WtcxData.cdcx='Y';
  1512. strcpy(WtcxData.gddm, curChkUsrRes.gddm);
  1513. hBrush=CreateSolidBrush(RGB(0,255,255));
  1514. if(curChkUsrRes.jys==0)
  1515. strcpy(tmp,"深圳A股");
  1516. if(curChkUsrRes.jys==1)
  1517. strcpy(tmp,"上海A股");
  1518. strcat(tmp,"撤销委托");
  1519. SetWindowText(hDlg,tmp);
  1520. PostMessage(hDlg, WM_JY_INIT, 0, 0L);
  1521. state =0;
  1522. fFirst =TRUE;
  1523. gnTimers =0;
  1524. SetTimer(hDlg,1, 1000, NULL);
  1525. CenterWindow(hDlg);
  1526. return TRUE;
  1527. case WM_JY_INIT:
  1528. SendDlgItemMessage(hDlg, IDL_CX, LB_ADDSTRING, 0,
  1529. (LPARAM)(LPSTR)"正在查询委托...");
  1530. gnTimers =0;
  1531. if(gfTest)
  1532.     SendMessage(hDlg,WM_JYCX_RES,0,0L);
  1533. else
  1534. UDP_Jy_Wtcx(&WtcxData, &WtcxRes);
  1535. break;
  1536. case WM_JYCX_RES:
  1537. if(fFirst)
  1538. {
  1539. SendDlgItemMessage(hDlg, IDL_CX, LB_RESETCONTENT, 0, 0L);
  1540. fFirst =FALSE;
  1541. }
  1542. if(gfTest)
  1543. {
  1544.              ret=WtcxRes.flag=ANS_SUCC;
  1545.              WtcxRes.recCount=5;
  1546.              for(i=0;i<WtcxRes.recCount;i++)
  1547.              {
  1548.              sprintf(WtcxRes.Wt[i].hthm,"%d",i+112);
  1549.              strcpy(WtcxRes.Wt[i].wtsj,"091012");
  1550.              WtcxRes.Wt[i].mmbz='S';
  1551. if(curChkUsrRes.jys==0)
  1552. sprintf(WtcxRes.Wt[i].gpdm ,"%04d",1+i);
  1553. else
  1554. sprintf(WtcxRes.Wt[i].gpdm ,"%06ld",(long)(600600+i));
  1555.              sprintf(WtcxRes.Wt[i].wtgs,"%d",i*100+50);
  1556.              sprintf(WtcxRes.Wt[i].wtjg,"%.2f",4.23*i+12.29);
  1557.              }
  1558. }
  1559. else
  1560. {
  1561. if(WtcxRes.flag !=ANS_SUCC&&WtcxRes.recCount>0)
  1562. {
  1563. MessageBox(hDlg,"委托查询失败!", "撤单", MB_OK);
  1564. break;
  1565. if(WtcxRes.recCount ==0)
  1566. {
  1567. MessageBox(hDlg,"没有可以撤消委托的合同!", "撤单", MB_OK);
  1568. break;
  1569. }
  1570. }
  1571. memset(&tmp[0], 0, sizeof(tmp));
  1572. for(i =0,j=0; i<WtcxRes.recCount; i++)
  1573. {
  1574. lpTmp =&WtcxRes.Wt[i].wtgs[0];
  1575. while(*lpTmp !=0 && *lpTmp !='-') lpTmp++;
  1576. if(*lpTmp =='-')
  1577. {
  1578. sel_num[j] =i;
  1579. j++;
  1580. continue;
  1581. }
  1582. }
  1583. k =j;
  1584. for(i =0; i<WtcxRes.recCount; i++)
  1585. {
  1586. lpTmp =&WtcxRes.Wt[i].wtgs[0];
  1587. while(*lpTmp !=0 && *lpTmp !='-') lpTmp++;
  1588. if(*lpTmp =='-') continue;
  1589. for(j =0; j<k; j++)
  1590. {
  1591. if(i ==sel_num[j]
  1592. || !strcmp(WtcxRes.Wt[i].hthm, WtcxRes.Wt[sel_num[j]].hthm))
  1593. break;
  1594. }
  1595. if(j !=k) continue;
  1596. for(j=0;j<HqData[curChkUsrRes.jys].recCount;j++)
  1597. {
  1598. if(strncmp(HqData[curChkUsrRes.jys].lpPreData[j].zqdm,
  1599. WtcxRes.Wt[i].gpdm,strlen(HqData[curChkUsrRes.jys].lpPreData[j].zqdm))==0)
  1600. break;
  1601. }
  1602. if(j<HqData[curChkUsrRes.jys].recCount)
  1603. {
  1604. strncpy(gpmc,HqData[curChkUsrRes.jys].lpPreData[j].zqmc,8);
  1605. gpmc[8]=0;
  1606. }
  1607. else
  1608. strcpy(gpmc,WtcxRes.Wt[i].gpdm);
  1609. sprintf(tmp, "%06s  %8s  %4s  %8s %8s  %8s",
  1610. WtcxRes.Wt[i].hthm, WtcxRes.Wt[i].wtsj,
  1611. (WtcxRes.Wt[i].mmbz=='B')?"买入":
  1612. ((WtcxRes.Wt[i].mmbz=='S')?"卖出":"撤单"),
  1613. gpmc, WtcxRes.Wt[i].wtgs,WtcxRes.Wt[i].wtjg);
  1614. SendDlgItemMessage(hDlg, IDL_CX, LB_ADDSTRING, 0,
  1615. (LPARAM)(LPSTR)tmp);
  1616. }
  1617. break;
  1618. case WM_CTLCOLOR:
  1619. SetBkMode((HDC)wParam, TRANSPARENT);
  1620. switch(HIWORD(lParam))
  1621. {
  1622. case CTLCOLOR_DLG:
  1623. case CTLCOLOR_STATIC:
  1624. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  1625. case CTLCOLOR_LISTBOX:
  1626. return (LRESULT)hBrush;
  1627. case CTLCOLOR_MSGBOX:
  1628. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  1629. }
  1630. return (LRESULT)NULL;
  1631. case WM_DRAWITEM:
  1632. lpdis = (LPDRAWITEMSTRUCT)lParam;
  1633. if (lpdis->itemID == -1)
  1634. {
  1635. if(lpdis->CtlType==ODT_BUTTON)
  1636. BtnFocusState(lpdis);
  1637. if(lpdis->CtlType==ODT_LISTBOX)
  1638. {
  1639. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  1640. return TRUE;
  1641. }
  1642. }
  1643. else
  1644. {
  1645. if(lpdis->itemAction&ODA_DRAWENTIRE)
  1646. {
  1647. if(lpdis->CtlType==ODT_BUTTON)
  1648. BtnDrawEntireItem(lpdis);
  1649. if(lpdis->CtlType==ODT_LISTBOX)
  1650. {   
  1651. i=lpdis->itemID;
  1652. SendMessage(lpdis->hwndItem,LB_GETTEXT,
  1653. (WPARAM)lpdis->itemID,(LPARAM)(LPSTR)tmp);
  1654. SelectObject(lpdis->hDC,GetStockObject(SYSTEM_FIXED_FONT));
  1655. TextOut(lpdis->hDC,lpdis->rcItem.left,lpdis->rcItem.top,tmp,strlen(tmp));
  1656. }
  1657. if(lpdis->itemState&ODS_SELECTED)
  1658. {
  1659. if(lpdis->CtlType==ODT_BUTTON)
  1660. BtnSelectionState(lpdis);
  1661. if(lpdis->CtlType==ODT_LISTBOX)
  1662. InvertRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  1663. }
  1664. if(lpdis->itemState&ODA_FOCUS)
  1665. {
  1666. if(lpdis->CtlType==ODT_BUTTON)
  1667. BtnFocusState(lpdis);
  1668. if(lpdis->CtlType==ODT_LISTBOX)
  1669. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  1670. }
  1671. return TRUE;
  1672. }
  1673. if(lpdis->itemAction&ODA_SELECT)
  1674. {
  1675. if(lpdis->CtlType==ODT_BUTTON)
  1676. BtnSelectionState(lpdis);
  1677. if(lpdis->CtlType==ODT_LISTBOX)
  1678. InvertRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  1679. return TRUE;
  1680. }
  1681. if(lpdis->itemAction&ODA_FOCUS)
  1682. {
  1683. if(lpdis->CtlType==ODT_BUTTON)
  1684. BtnFocusState(lpdis);
  1685. if(lpdis->CtlType==ODT_LISTBOX)
  1686. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  1687. return TRUE;
  1688. }
  1689. }
  1690. break;
  1691.         case WM_MEASUREITEM:
  1692.          lpmis =(LPMEASUREITEMSTRUCT)(lParam);
  1693.          hDC =GetDC(hDlg);
  1694.          SelectObject(hDC,GetStockObject(SYSTEM_FIXED_FONT));        
  1695.          GetTextMetrics(hDC,&tm);
  1696.          lpmis->itemHeight =tm.tmHeight;
  1697.          ReleaseDC(hDlg,hDC);
  1698.         break;
  1699. case WM_PAINT:
  1700. BeginPaint(hDlg, &ps);
  1701. DrawFrame(ps.hdc, hDlg);
  1702. EndPaint(hDlg, &ps);
  1703. break;
  1704. case WM_TIMER:
  1705. if(gnTimers ++>60)
  1706. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  1707. break;
  1708. case WM_COMMAND:
  1709. gnTimers =0;
  1710. switch(wParam)
  1711. {
  1712. case IDOK:
  1713. hctl =GetFocus();
  1714. idFocus =GetWindowWord(hctl, GWW_ID);
  1715. if(idFocus ==IDCANCEL)
  1716. {
  1717. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  1718. break;
  1719. }
  1720. if(CancelData.cancelCount !=0) break;
  1721. dw =SendDlgItemMessage(hDlg, IDL_CX, LB_GETSELCOUNT, 0, 0L);
  1722. hctl =GetDlgItem(hDlg, IDL_CX);
  1723. SetFocus(hctl);
  1724. if(dw ==LB_ERR)
  1725. break;
  1726. if((int)dw >MAX_CANCEL_SENDCOUNT-1)
  1727. {
  1728. wsprintf(tmp, "一次最多选择%d笔", (int)MAX_CANCEL_SENDCOUNT-1);
  1729. ErrMsg(hDlg, tmp);
  1730. break;
  1731. }
  1732. CancelData.cancelCount =(int)dw;
  1733. if(CancelData.cancelCount ==0) break;
  1734. if(SendDlgItemMessage(hDlg, IDL_CX, LB_GETSELITEMS, (int)dw,
  1735. (LPARAM)(int FAR *)sel_num) ==LB_ERR)
  1736. break;
  1737. for(i =0; i<CancelData.cancelCount; i++)
  1738. {
  1739. if(SendDlgItemMessage(hDlg, IDL_CX, LB_GETTEXT, sel_num[i],
  1740. (LPARAM)(LPSTR)tmp) ==LB_ERR)
  1741. break;
  1742. else
  1743.     strncpy(CancelData.Cancel[i].hthm,tmp,MAX_HTHM_SIZE);
  1744. }
  1745. hctl =GetFocus();
  1746. i =GetWindowWord(hctl, GWW_ID);
  1747. if(i ==IDCANCEL)
  1748. {
  1749. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  1750. break;
  1751. }
  1752. EnableWindow((HWND)LOWORD(lParam), FALSE);
  1753. memset(&CancelRes.flag, ANS_UNKOWN, sizeof(CancelRes.flag));
  1754. if(gfTest)
  1755. SendMessage(hDlg,WM_JY_RES ,0,0L);
  1756. else
  1757. {
  1758. if(UDP_Jy_Cancel(&CancelData, &CancelRes) <0)
  1759. {
  1760. ErrMsg(hDlg, "通讯错误:不能将请求送到主机");
  1761. EnableWindow((HWND)LOWORD(lParam), TRUE);
  1762. break;
  1763. }
  1764. }
  1765. break;
  1766. case IDCANCEL:
  1767. udpread_stop =TRUE;
  1768. KillTimer(hDlg, 1);
  1769. ghDlgJy =NULL;     
  1770. DeleteObject(hBrush);
  1771. EndDialog(hDlg, 0);
  1772. break;
  1773. }
  1774. break;
  1775. case WM_JY_RES:
  1776.     if(gfTest)
  1777.      ret=CancelRes.flag[0]=ANS_SUCC;
  1778. for(i=CancelData.cancelCount-1,j=0; i>=0; i--)
  1779. {
  1780. if(CancelRes.flag[i] ==ANS_SUCC)
  1781. {
  1782. j++;
  1783. SendDlgItemMessage(hDlg, IDL_CX, LB_DELETESTRING, sel_num[i], 0L);
  1784. }
  1785. }
  1786. ret=CancelRes.flag[0];
  1787. if(j>0&&ret==ANS_SUCC)
  1788. wsprintf(tmp, "您的撤单已发出!");
  1789. else
  1790. {
  1791. switch(ret)
  1792. {
  1793.     case '1':
  1794. strcpy(tmp,"请您注意,无此合同代码!");
  1795. break;
  1796.     case '2':
  1797. strcpy(tmp,"无此股东代码或已挂失!");
  1798. break;
  1799. case '3':
  1800. strcpy(tmp,"请您注意,无此交易帐号!");
  1801. break;
  1802. case '4':
  1803. strcpy(tmp,"请您注意,撤单股数错!");
  1804. break;
  1805.     case '5':
  1806. strcpy(tmp,"请您注意,重复撤单错!");
  1807. break;
  1808.     case '6':
  1809. strcpy(tmp,"请您注意,撤单帐号错!");
  1810. break;  
  1811.              case ANS_SYS_ERR:
  1812.              strcpy(tmp,"请您注意,主机系统错!");
  1813.              break;
  1814.              case ANS_SUSP_REQ:
  1815.              strcpy(tmp,"主机正在处理您的上次请求!");
  1816.              break;
  1817.              case ANS_NO_PRIV:
  1818.              strcpy(tmp,"您没有权限进入主机!");
  1819.              break;
  1820.                     default:
  1821.                      strcpy(tmp,"请您注意,未知错误");
  1822.                   }
  1823. }
  1824. MessageBox(hDlg, tmp, "撤单", MB_OK);
  1825. hctl =GetDlgItem(hDlg, IDOK);
  1826. CancelData.cancelCount =0;
  1827. EnableWindow(hctl, TRUE);
  1828. break;
  1829. }
  1830. return FALSE;
  1831. }
  1832. LRESULT CALLBACK YecxDlgProc(HWND hDlg, UINT msg,
  1833. WPARAM wParam, LPARAM lParam)
  1834. {
  1835. static JY_ASK_YECX YecxData;
  1836. static JY_ANS_YECX YecxRes;
  1837. PAINTSTRUCT ps;
  1838. char tmp[256],gpmc[9];
  1839. static BOOL fFirst =TRUE;
  1840. int i,ret,j;
  1841. static HBRUSH hBrush;
  1842. LPDRAWITEMSTRUCT lpdis;
  1843. LPMEASUREITEMSTRUCT lpmis;
  1844. TEXTMETRIC tm;
  1845. HWND hDC;
  1846. switch(msg)
  1847. {
  1848. case WM_INITDIALOG:
  1849. ghDlgJy =hDlg;
  1850. memset(&YecxData, 0, sizeof(YecxData));
  1851. memset(&YecxRes, 0, sizeof(YecxRes));
  1852. fFirst =TRUE;
  1853. YecxData.jys =curChkUsrRes.jys;
  1854. YecxData.userId =curChkUsrRes.userId;
  1855. YecxRes.recCount =0;
  1856. strcpy(YecxData.gddm, curChkUsrRes.gddm);
  1857. hBrush=CreateSolidBrush(RGB(0,255,255));
  1858. if(curChkUsrRes.jys==0)
  1859. strcpy(tmp,"深圳A股");
  1860. if(curChkUsrRes.jys==1)
  1861. strcpy(tmp,"上海A股");
  1862. strcat(tmp,"余额查询");
  1863. SetWindowText(hDlg,tmp);
  1864. PostMessage(hDlg, WM_JY_INIT, 0, 0L);
  1865. SetTimer(hDlg, 1, 1000, NULL);
  1866. gnTimers =0;
  1867. CenterWindow(hDlg);
  1868. return TRUE;
  1869. case WM_JY_INIT:
  1870. if(!fFirst) break;
  1871. SendDlgItemMessage(hDlg, IDL_CX, LB_ADDSTRING, 0,
  1872. (LPARAM)(LPSTR)"正在查询...");
  1873. gnTimers =0;
  1874. if(gfTest)
  1875. {
  1876. SendMessage(hDlg, WM_JYCX_RES, 0, 0L);
  1877. YecxRes.kys =8880000.99;
  1878. YecxRes.zjye=YecxRes.kys+100;
  1879. }
  1880. else
  1881. {
  1882. if(UDP_Jy_Yecx(&YecxData, &YecxRes) <0)
  1883. {
  1884. ErrMsg(hDlg, "通讯错误:不能将请求送到主机");
  1885. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  1886. }
  1887. }
  1888. break;
  1889. case WM_JYCX_RES:
  1890. gnTimers =0;
  1891. if(fFirst)
  1892. {
  1893. SendDlgItemMessage(hDlg, IDL_CX, LB_RESETCONTENT, 0, 0L);
  1894. fFirst =FALSE;
  1895. }   
  1896. sprintf(tmp, "%.2f", YecxRes.kys);
  1897. SetDlgItemText(hDlg, IDC_KYJE, tmp);
  1898. sprintf(tmp, "%.2f", YecxRes.zjye);
  1899. SetDlgItemText(hDlg, IDC_ZJYE, tmp);
  1900. if(gfTest)
  1901. {
  1902.   ret =YecxRes.flag=ANS_SUCC;
  1903.   YecxRes.recCount=5;
  1904.   for(i=0;i<YecxRes.recCount;i++)
  1905.   {   
  1906.   memset(&YecxRes.GpTg[i],0,sizeof(JY_GPTG));
  1907. if(curChkUsrRes.jys==0)
  1908. sprintf(YecxRes.GpTg[i].gpdm ,"%04d",1+i);
  1909. else
  1910. sprintf(YecxRes.GpTg[i].gpdm ,"%06ld",(long)(600600+i));
  1911.   sprintf(YecxRes.GpTg[i].kys,"%d",100+i);
  1912.   sprintf(YecxRes.GpTg[i].gpye,"%d",200+i);
  1913.   sprintf(YecxRes.GpTg[i].ghrq,"%6s","091008");
  1914.   }
  1915. }
  1916. else
  1917. ret =YecxRes.flag;
  1918. if(ret!=ANS_SUCC)
  1919. {   
  1920.     if(ret==1)
  1921.       strcpy(tmp,"请您注意,无此股东代码!");
  1922.     else if(ret==2)
  1923.       strcpy(tmp,"您已透资,不能查询");
  1924.              else if(ret==ANS_SYS_ERR)
  1925.              strcpy(tmp,"请您注意,主机系统错!");
  1926.              else if(ret==ANS_SUSP_REQ)
  1927.              strcpy(tmp,"主机正在处理您的上次请求!");
  1928.              else if(ret==ANS_NO_PRIV)
  1929.              strcpy(tmp,"您没有权限进入主机!");
  1930.              else
  1931.              strcpy(tmp,"请您注意,未知系统错!");                                  
  1932. MessageBox(hDlg, tmp, "余额查询", MB_OK);
  1933. }
  1934. else
  1935. {
  1936. memset(&tmp[0], 0, sizeof(tmp));
  1937. if(YecxRes.recCount==0)  
  1938. {        
  1939. strcpy(tmp,"没有您的托管资料");
  1940. SendDlgItemMessage(hDlg, IDL_CX, LB_ADDSTRING, 0,
  1941. (LPARAM)(LPSTR)tmp);
  1942. }
  1943. else
  1944. {
  1945. for(i =0; i<YecxRes.recCount; i++)
  1946. {
  1947. for(j=0;j<HqData[curChkUsrRes.jys].recCount;j++)
  1948. {
  1949. if(strncmp(HqData[curChkUsrRes.jys].lpPreData[j].zqdm,
  1950. YecxRes.GpTg[i].gpdm,strlen(HqData[curChkUsrRes.jys].lpPreData[j].zqdm))==0)
  1951. break;
  1952. }
  1953. if(j<HqData[curChkUsrRes.jys].recCount)
  1954. {
  1955. strncpy(gpmc,HqData[curChkUsrRes.jys].lpPreData[j].zqmc,8);
  1956. gpmc[8]=0;
  1957. }
  1958. else
  1959.      strcpy(gpmc,YecxRes.GpTg[i].gpdm);
  1960. sprintf(tmp, "%6s  %8s  %8s  %8s",
  1961. gpmc, YecxRes.GpTg[i].kys,
  1962. YecxRes.GpTg[i].gpye, YecxRes.GpTg[i].ghrq);
  1963. SendDlgItemMessage(hDlg, IDL_CX, LB_ADDSTRING, 0,
  1964. (LPARAM)(LPSTR)tmp);
  1965. }
  1966. }
  1967. }
  1968. break;
  1969. case WM_CTLCOLOR:
  1970. SetBkMode((HDC)wParam, TRANSPARENT);
  1971. switch(HIWORD(lParam))
  1972. {
  1973. case CTLCOLOR_DLG:
  1974. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  1975. case CTLCOLOR_LISTBOX:
  1976. return (LRESULT)hBrush;
  1977. }
  1978. return (LRESULT)TRUE;
  1979. case WM_DRAWITEM:
  1980. lpdis = (LPDRAWITEMSTRUCT)lParam;
  1981. if (lpdis->itemID == -1)
  1982. {
  1983. if(lpdis->CtlType==ODT_BUTTON)
  1984. BtnFocusState(lpdis);
  1985. if(lpdis->CtlType==ODT_LISTBOX)
  1986. {
  1987. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  1988. return TRUE;
  1989. }
  1990. }
  1991. else
  1992. {
  1993. if(lpdis->itemAction&ODA_DRAWENTIRE)
  1994. {
  1995. if(lpdis->CtlType==ODT_BUTTON)
  1996. BtnDrawEntireItem(lpdis);
  1997. if(lpdis->CtlType==ODT_LISTBOX)
  1998. {   
  1999. i=lpdis->itemID;
  2000. SendMessage(lpdis->hwndItem,LB_GETTEXT,
  2001. (WPARAM)lpdis->itemID,(LPARAM)(LPSTR)tmp);
  2002. SelectObject(lpdis->hDC,GetStockObject(SYSTEM_FIXED_FONT));
  2003. TextOut(lpdis->hDC,lpdis->rcItem.left,lpdis->rcItem.top,tmp,strlen(tmp));
  2004. }
  2005. if(lpdis->itemState&ODS_SELECTED)
  2006. {
  2007. if(lpdis->CtlType==ODT_BUTTON)
  2008. BtnSelectionState(lpdis);
  2009. if(lpdis->CtlType==ODT_LISTBOX)
  2010. InvertRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2011. }
  2012. if(lpdis->itemState&ODA_FOCUS)
  2013. {
  2014. if(lpdis->CtlType==ODT_BUTTON)
  2015. BtnFocusState(lpdis);
  2016. if(lpdis->CtlType==ODT_LISTBOX)
  2017. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2018. }
  2019. return TRUE;
  2020. }
  2021. if(lpdis->itemAction&ODA_SELECT)
  2022. {
  2023. if(lpdis->CtlType==ODT_BUTTON)
  2024. BtnSelectionState(lpdis);
  2025. if(lpdis->CtlType==ODT_LISTBOX)
  2026. InvertRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2027. return TRUE;
  2028. }
  2029. if(lpdis->itemAction&ODA_FOCUS)
  2030. {
  2031. if(lpdis->CtlType==ODT_BUTTON)
  2032. BtnFocusState(lpdis);
  2033. if(lpdis->CtlType==ODT_LISTBOX)
  2034. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2035. return TRUE;
  2036. }
  2037. }
  2038. break;
  2039.         case WM_MEASUREITEM:
  2040.          lpmis =(LPMEASUREITEMSTRUCT)(lParam);
  2041.          hDC =GetDC(hDlg);
  2042.          SelectObject(hDC,GetStockObject(SYSTEM_FIXED_FONT));        
  2043.          GetTextMetrics(hDC,&tm);
  2044.          lpmis->itemHeight =tm.tmHeight;
  2045.          ReleaseDC(hDlg,hDC);
  2046.         break;
  2047. case WM_PAINT:
  2048. BeginPaint(hDlg, &ps);
  2049. DrawFrame(ps.hdc, hDlg);
  2050. EndPaint(hDlg, &ps);
  2051. break;
  2052. case WM_TIMER:
  2053. if(gnTimers++>60)
  2054. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  2055. break;
  2056. case WM_COMMAND:
  2057. gnTimers =0;
  2058. switch(wParam)
  2059. {
  2060. case IDCANCEL:
  2061. udpread_stop =TRUE;
  2062. KillTimer(hDlg, 1);
  2063. DeleteObject(hBrush);
  2064. EndDialog(hDlg, 0);
  2065. ghDlgJy =NULL;
  2066. break;
  2067. }
  2068. break;
  2069. }
  2070. return FALSE;
  2071. }
  2072. LRESULT CALLBACK WtcxDlgProc(HWND hDlg, UINT msg,
  2073. WPARAM wParam, LPARAM lParam)
  2074. {
  2075. static JY_ASK_WTCX WtcxData;
  2076. static JY_ANS_WTCX WtcxRes;
  2077. char tmp[256],gpmc[9];
  2078. int i,ret,j;
  2079. PAINTSTRUCT ps;
  2080. LPDRAWITEMSTRUCT lpdis;
  2081. LPMEASUREITEMSTRUCT lpmis;
  2082. TEXTMETRIC tm;
  2083. HWND hDC;
  2084. static BOOL fFirst =TRUE;
  2085. static HBRUSH hBrush;
  2086. switch(msg)
  2087. {
  2088. case WM_INITDIALOG:
  2089. ghDlgJy =hDlg;   
  2090. fFirst =TRUE;
  2091. memset(&WtcxData, 0, sizeof(WtcxData));
  2092. memset(&WtcxRes, 0, sizeof(WtcxRes));
  2093. WtcxData.jys =curChkUsrRes.jys;
  2094. WtcxData.userId =curChkUsrRes.userId;
  2095. WtcxRes.recCount =0;
  2096. WtcxData.cdcx='N';
  2097. strcpy(WtcxData.gddm, curChkUsrRes.gddm);
  2098. hBrush=CreateSolidBrush(RGB(0,255,255));
  2099. if(curChkUsrRes.jys==0)
  2100. strcpy(tmp,"深圳A股");
  2101. if(curChkUsrRes.jys==1)
  2102. strcpy(tmp,"上海A股");
  2103. strcat(tmp,"委托查询");
  2104. SetWindowText(hDlg,tmp);
  2105. PostMessage(hDlg, WM_JY_INIT, 0, 0L);
  2106. SetTimer(hDlg, 1, 1000, NULL);
  2107. gnTimers =0;
  2108. CenterWindow(hDlg);
  2109. return TRUE;
  2110. case WM_JY_INIT:
  2111. if(!fFirst) break;
  2112. SendDlgItemMessage(hDlg, IDL_CX, LB_ADDSTRING, 0,
  2113. (LPARAM)(LPSTR)"正在查询...");
  2114. gnTimers =0;
  2115. if(gfTest)
  2116. SendMessage(hDlg, WM_JYCX_RES, 0, 0L);
  2117. else
  2118. {
  2119. if(UDP_Jy_Wtcx(&WtcxData, &WtcxRes) <0)
  2120. {
  2121. ErrMsg(hDlg, "通讯错误:不能将请求送到主机");
  2122. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  2123. }
  2124. }
  2125. break;
  2126. case WM_JYCX_RES:
  2127.             gnTimers =0;
  2128.             if(gfTest)
  2129.             {
  2130.              ret=WtcxRes.flag=ANS_SUCC;
  2131.              WtcxRes.recCount=5;
  2132.              for(i=0;i<WtcxRes.recCount;i++)
  2133.              {
  2134.              sprintf(WtcxRes.Wt[i].hthm,"%d",i+112);
  2135.              strcpy(WtcxRes.Wt[i].wtsj,"091012");
  2136.              WtcxRes.Wt[i].mmbz='S';
  2137. if(curChkUsrRes.jys==0)
  2138. sprintf(WtcxRes.Wt[i].gpdm ,"%04d",1+i);
  2139. else
  2140. sprintf(WtcxRes.Wt[i].gpdm ,"%06ld",(long)(600600+i));
  2141.              sprintf(WtcxRes.Wt[i].wtgs,"%d",i*100+50);
  2142.              sprintf(WtcxRes.Wt[i].wtjg,"%.2f",4.23*i+12.29);
  2143.              }
  2144.             }
  2145.             else
  2146. ret=WtcxRes.flag;
  2147.             memset(&tmp[0], 0, sizeof(tmp));
  2148. if(fFirst)
  2149. {
  2150. fFirst =FALSE;
  2151. SendDlgItemMessage(hDlg, IDL_CX, LB_RESETCONTENT, 0, 0L);
  2152. }    
  2153. if(ret!=ANS_SUCC)
  2154. {
  2155.              if(ret==1)
  2156.              strcpy(tmp,"无此股东代码!");
  2157.              else if(ret==ANS_SYS_ERR)
  2158.              strcpy(tmp,"主机系统错!");
  2159.              else if(ret==ANS_SUSP_REQ)
  2160.              strcpy(tmp,"主机正在处理您的上次请求!");
  2161.              else if(ret==ANS_NO_PRIV)
  2162.              strcpy(tmp,"您没有权限进入主机!");
  2163.              else
  2164.              strcpy(tmp,"未知系统错!");
  2165. SendDlgItemMessage(hDlg, IDL_CX, LB_ADDSTRING, 0,
  2166. (LPARAM)(LPSTR)tmp);  
  2167. }
  2168. else
  2169.             {
  2170. if(WtcxRes.recCount==0)
  2171. {
  2172.   strcpy(tmp,"没有您的委托资料");
  2173. SendDlgItemMessage(hDlg, IDL_CX, LB_ADDSTRING, 0,
  2174. (LPARAM)(LPSTR)tmp);  
  2175. }
  2176. else
  2177. {            
  2178. for(i =0; i<WtcxRes.recCount; i++)
  2179. {
  2180. for(j=0;j<HqData[curChkUsrRes.jys].recCount;j++)
  2181. {
  2182. if(strncmp(HqData[curChkUsrRes.jys].lpPreData[j].zqdm,
  2183. WtcxRes.Wt[i].gpdm,strlen(HqData[curChkUsrRes.jys].lpPreData[j].zqdm))==0)
  2184. break;
  2185. }
  2186. if(j<HqData[curChkUsrRes.jys].recCount)
  2187. {
  2188. strncpy(gpmc,HqData[curChkUsrRes.jys].lpPreData[j].zqmc,8);
  2189. gpmc[8]=0;
  2190. }
  2191. else
  2192.      strcpy(gpmc,WtcxRes.Wt[i].gpdm);
  2193. sprintf(tmp, "%06s  %8s  %4s  %8s  %8s  %8s",
  2194. WtcxRes.Wt[i].hthm, WtcxRes.Wt[i].wtsj,
  2195. (WtcxRes.Wt[i].mmbz=='B')?"买入":
  2196. ((WtcxRes.Wt[i].mmbz=='S')?"卖出":"撤单"),
  2197. gpmc, WtcxRes.Wt[i].wtgs,WtcxRes.Wt[i].wtjg);
  2198. SendDlgItemMessage(hDlg, IDL_CX, LB_ADDSTRING, 0,
  2199. (LPARAM)(LPSTR)tmp);
  2200. }
  2201. }
  2202. }
  2203. break;
  2204. case WM_CTLCOLOR:
  2205. SetBkMode((HDC)wParam, TRANSPARENT);
  2206. switch(HIWORD(lParam))
  2207. {
  2208. case CTLCOLOR_DLG: 
  2209. case CTLCOLOR_STATIC:
  2210.     return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  2211. case CTLCOLOR_LISTBOX:
  2212. return (LRESULT)hBrush;
  2213. }
  2214. return (LRESULT)(HBRUSH)NULL;
  2215. case WM_DRAWITEM:
  2216. lpdis = (LPDRAWITEMSTRUCT)lParam;
  2217. if (lpdis->itemID == -1)
  2218. {
  2219. if(lpdis->CtlType==ODT_BUTTON)
  2220. BtnFocusState(lpdis);
  2221. if(lpdis->CtlType==ODT_LISTBOX)
  2222. {
  2223. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2224. return TRUE;
  2225. }
  2226. }
  2227. else
  2228. {
  2229. if(lpdis->itemAction&ODA_DRAWENTIRE)
  2230. {
  2231. if(lpdis->CtlType==ODT_BUTTON)
  2232. BtnDrawEntireItem(lpdis);
  2233. if(lpdis->CtlType==ODT_LISTBOX)
  2234. {   
  2235. i=lpdis->itemID;
  2236. SendMessage(lpdis->hwndItem,LB_GETTEXT,
  2237. (WPARAM)lpdis->itemID,(LPARAM)(LPSTR)tmp);
  2238. SelectObject(lpdis->hDC,GetStockObject(SYSTEM_FIXED_FONT));
  2239. TextOut(lpdis->hDC,lpdis->rcItem.left,lpdis->rcItem.top,tmp,strlen(tmp));
  2240. }
  2241. if(lpdis->itemState&ODS_SELECTED)
  2242. {
  2243. if(lpdis->CtlType==ODT_BUTTON)
  2244. BtnSelectionState(lpdis);
  2245. if(lpdis->CtlType==ODT_LISTBOX)
  2246. InvertRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2247. }
  2248. if(lpdis->itemState&ODA_FOCUS)
  2249. {
  2250. if(lpdis->CtlType==ODT_BUTTON)
  2251. BtnFocusState(lpdis);
  2252. if(lpdis->CtlType==ODT_LISTBOX)
  2253. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2254. }
  2255. return TRUE;
  2256. }
  2257. if(lpdis->itemAction&ODA_SELECT)
  2258. {
  2259. if(lpdis->CtlType==ODT_BUTTON)
  2260. BtnSelectionState(lpdis);
  2261. if(lpdis->CtlType==ODT_LISTBOX)
  2262. InvertRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2263. return TRUE;
  2264. }
  2265. if(lpdis->itemAction&ODA_FOCUS)
  2266. {
  2267. if(lpdis->CtlType==ODT_BUTTON)
  2268. BtnFocusState(lpdis);
  2269. if(lpdis->CtlType==ODT_LISTBOX)
  2270. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2271. return TRUE;
  2272. }
  2273. }
  2274. break;
  2275.         case WM_MEASUREITEM:
  2276.          lpmis =(LPMEASUREITEMSTRUCT)(lParam);
  2277.          hDC =GetDC(hDlg);
  2278.          SelectObject(hDC,GetStockObject(SYSTEM_FIXED_FONT));        
  2279.          GetTextMetrics(hDC,&tm);
  2280.          lpmis->itemHeight =tm.tmHeight;
  2281.          ReleaseDC(hDlg,hDC);
  2282.         break;
  2283. case WM_PAINT:
  2284. BeginPaint(hDlg, &ps);
  2285. DrawFrame(ps.hdc, hDlg);
  2286. EndPaint(hDlg, &ps);
  2287. break;
  2288. case WM_TIMER:
  2289. if(gnTimers ++>60)
  2290. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  2291. break;
  2292. case WM_COMMAND:
  2293. gnTimers =0;
  2294. switch(wParam)
  2295. {
  2296. case IDCANCEL:
  2297. udpread_stop =TRUE;
  2298. KillTimer(hDlg, 1);
  2299. EndDialog(hDlg, 0);
  2300. ghDlgJy =NULL;
  2301. break;
  2302. }
  2303. break;
  2304. }
  2305. return FALSE;
  2306. }
  2307. LRESULT CALLBACK CjcxDlgProc(HWND hDlg, UINT msg,
  2308. WPARAM wParam, LPARAM lParam)
  2309. {
  2310. static JY_ASK_CJCX CjcxData;
  2311. static JY_ANS_CJCX CjcxRes;
  2312. PAINTSTRUCT ps;
  2313. LPDRAWITEMSTRUCT lpdis;
  2314. LPMEASUREITEMSTRUCT lpmis;
  2315. TEXTMETRIC tm;
  2316. static int cWidth =0;
  2317. static BOOL fFirst =TRUE;
  2318. int i,ret,j;
  2319. HDC hDC;
  2320. char tmp[256],gpmc[9];
  2321. static hBrush;
  2322. switch(msg)
  2323. {
  2324. case WM_INITDIALOG:
  2325. ghDlgJy =hDlg;
  2326. memset(&CjcxData, 0, sizeof(CjcxData));
  2327. memset(&CjcxRes, 0, sizeof(CjcxRes));
  2328. CjcxData.jys =curChkUsrRes.jys;
  2329. CjcxData.userId =curChkUsrRes.userId;
  2330. strcpy(CjcxData.gddm, curChkUsrRes.gddm);
  2331. fFirst =TRUE;
  2332. hDC =GetDC(hDlg);
  2333. GetTextMetrics(hDC, &tm);
  2334. cWidth =tm.tmAveCharWidth;
  2335. ReleaseDC(hDlg, hDC);
  2336.     
  2337. hBrush=CreateSolidBrush(RGB(0,255,255));
  2338. if(curChkUsrRes.jys==0)
  2339. strcpy(tmp,"深圳A股");
  2340. if(curChkUsrRes.jys==1)
  2341. strcpy(tmp,"上海A股");
  2342. strcat(tmp,"成交查询");
  2343. SetWindowText(hDlg,tmp);
  2344. SendDlgItemMessage(hDlg, IDL_CJCX, LB_RESETCONTENT, 0, 0L);
  2345. PostMessage(hDlg, WM_JY_INIT, 0, 0L);
  2346. SetTimer(hDlg, 1, 1000, NULL);
  2347. gnTimers =0;
  2348. CenterWindow(hDlg);
  2349. return TRUE;
  2350. case WM_JY_INIT:
  2351. SendDlgItemMessage(hDlg, IDL_CJCX, LB_ADDSTRING, 0,
  2352. (LPARAM)(LPSTR)"正在查询...");
  2353. gnTimers =0;
  2354. if(gfTest)
  2355. SendMessage(hDlg, WM_JYCX_RES, 0, 0L);
  2356. else
  2357. {
  2358. if(UDP_Jy_Cjcx(&CjcxData, &CjcxRes) <0)
  2359. {
  2360. ErrMsg(hDlg, "通讯错误:不能将请求送到主机");
  2361. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  2362. }
  2363. }
  2364. break;
  2365. case WM_JYCX_RES:
  2366. gnTimers =0;
  2367. if(gfTest)
  2368. {
  2369. CjcxRes.flag=ret =ANS_SUCC;
  2370. CjcxRes.recCount =5;
  2371. for(i=0;i<5;i++)
  2372. {
  2373. sprintf(CjcxRes.Cj[i].hthm ,"%d",12+i);
  2374. strcpy(CjcxRes.Cj[i].cjsj ,"131012");
  2375. CjcxRes.Cj[i].mmbz ='B';
  2376. if(curChkUsrRes.jys==0)
  2377. sprintf(CjcxRes.Cj[i].gpdm ,"%04d",1+i);
  2378. else
  2379. sprintf(CjcxRes.Cj[i].gpdm ,"%06ld",(long)(600600+i));
  2380. sprintf(CjcxRes.Cj[i].cjgs,"%d",100*(i+1));
  2381. sprintf(CjcxRes.Cj[i].cjjg,"%.2f",12.23+i*2);
  2382. }
  2383. }
  2384. else
  2385. ret=CjcxRes.flag;
  2386.             if(ret!=ANS_SUCC)
  2387.             {    
  2388.              if(ret==1)
  2389.              strcpy(tmp,"无此股东代码!");
  2390.              else if(ret==ANS_SYS_ERR)
  2391.              strcpy(tmp,"主机系统错!");
  2392.              else if(ret==ANS_SUSP_REQ)
  2393.              strcpy(tmp,"主机正在处理您的上次请求!");
  2394.              else if(ret==ANS_NO_PRIV)
  2395.              strcpy(tmp,"您没有权限进入主机!");
  2396.              else
  2397.              strcpy(tmp,"未知系统错!");
  2398. MessageBox(hDlg, tmp, "成交查询", MB_OK);
  2399. break;
  2400. }
  2401. if(fFirst)
  2402. {
  2403. fFirst =FALSE;
  2404. SendDlgItemMessage(hDlg, IDL_CJCX, LB_RESETCONTENT, 0, 0L);
  2405. }
  2406. memset(&tmp[0], 0, sizeof(tmp));
  2407. if(CjcxRes.recCount==0)
  2408. {
  2409. strcpy(tmp,"您的委托尚未成交");
  2410. SendDlgItemMessage(hDlg, IDL_CJCX, LB_ADDSTRING, 0,
  2411. (LPARAM)(LPSTR)tmp);
  2412. }
  2413. else
  2414. {
  2415. for(i =0; i<CjcxRes.recCount; i++)
  2416. {    
  2417. for(j=0;j<HqData[curChkUsrRes.jys].recCount;j++)
  2418. {
  2419. if(strncmp(HqData[curChkUsrRes.jys].lpPreData[j].zqdm,
  2420. CjcxRes.Cj[i].gpdm,strlen(HqData[curChkUsrRes.jys].lpPreData[j].zqdm))==0)
  2421. break;
  2422. }
  2423. if(j<HqData[curChkUsrRes.jys].recCount)
  2424. {
  2425. strncpy(gpmc,HqData[curChkUsrRes.jys].lpPreData[j].zqmc,8);
  2426. gpmc[8]=0;
  2427. }
  2428. else
  2429.     strcpy(gpmc,CjcxRes.Cj[i].gpdm);
  2430. sprintf(tmp, "%06s  %8s  %4s  %8s  %8s  %8s",
  2431. CjcxRes.Cj[i].hthm, CjcxRes.Cj[i].cjsj,
  2432. (CjcxRes.Cj[i].mmbz=='B')?"买入":
  2433. ((CjcxRes.Cj[i].mmbz=='S')?"卖出":"撤单"),
  2434. gpmc, CjcxRes.Cj[i].cjgs,
  2435. CjcxRes.Cj[i].cjjg);
  2436. if(SendDlgItemMessage(hDlg, IDL_CJCX, LB_ADDSTRING, 0,
  2437. (LPARAM)(LPSTR)tmp)==LB_ERR)
  2438. break;
  2439. }
  2440. }
  2441. break;
  2442. case WM_CTLCOLOR:
  2443. SetBkMode((HDC)wParam, TRANSPARENT);
  2444. switch(HIWORD(lParam))
  2445. {
  2446. case CTLCOLOR_DLG:
  2447. case CTLCOLOR_STATIC:
  2448. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  2449. case CTLCOLOR_LISTBOX:
  2450. return (LRESULT)hBrush;
  2451. }
  2452. return (LRESULT)NULL;
  2453. case WM_DRAWITEM:
  2454. lpdis = (LPDRAWITEMSTRUCT)lParam;
  2455. if (lpdis->itemID == -1)
  2456. {
  2457. if(lpdis->CtlType==ODT_BUTTON)
  2458. BtnFocusState(lpdis);
  2459. if(lpdis->CtlType==ODT_LISTBOX)
  2460. {
  2461. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2462. return TRUE;
  2463. }
  2464. }
  2465. else
  2466. {
  2467. if(lpdis->itemAction&ODA_DRAWENTIRE)
  2468. {
  2469. if(lpdis->CtlType==ODT_BUTTON)
  2470. BtnDrawEntireItem(lpdis);
  2471. if(lpdis->CtlType==ODT_LISTBOX)
  2472. {   
  2473. i=lpdis->itemID;
  2474. SendMessage(lpdis->hwndItem,LB_GETTEXT,
  2475. (WPARAM)lpdis->itemID,(LPARAM)(LPSTR)tmp);
  2476. SelectObject(lpdis->hDC,GetStockObject(SYSTEM_FIXED_FONT));
  2477. TextOut(lpdis->hDC,lpdis->rcItem.left,lpdis->rcItem.top,tmp,strlen(tmp));
  2478. }
  2479. if(lpdis->itemState&ODS_SELECTED)
  2480. {
  2481. if(lpdis->CtlType==ODT_BUTTON)
  2482. BtnSelectionState(lpdis);
  2483. if(lpdis->CtlType==ODT_LISTBOX)
  2484. InvertRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2485. }
  2486. if(lpdis->itemState&ODA_FOCUS)
  2487. {
  2488. if(lpdis->CtlType==ODT_BUTTON)
  2489. BtnFocusState(lpdis);
  2490. if(lpdis->CtlType==ODT_LISTBOX)
  2491. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2492. }
  2493. return TRUE;
  2494. }
  2495. if(lpdis->itemAction&ODA_SELECT)
  2496. {
  2497. if(lpdis->CtlType==ODT_BUTTON)
  2498. BtnSelectionState(lpdis);
  2499. if(lpdis->CtlType==ODT_LISTBOX)
  2500. InvertRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2501. return TRUE;
  2502. }
  2503. if(lpdis->itemAction&ODA_FOCUS)
  2504. {
  2505. if(lpdis->CtlType==ODT_BUTTON)
  2506. BtnFocusState(lpdis);
  2507. if(lpdis->CtlType==ODT_LISTBOX)
  2508. DrawFocusRect(lpdis->hDC,(LPRECT)&lpdis->rcItem);
  2509. return TRUE;
  2510. }
  2511. }
  2512. break;
  2513.         case WM_MEASUREITEM:
  2514.          lpmis =(LPMEASUREITEMSTRUCT)(lParam);
  2515.          hDC =GetDC(hDlg);
  2516.          SelectObject(hDC,GetStockObject(SYSTEM_FIXED_FONT));        
  2517.          GetTextMetrics(hDC,&tm);
  2518.          lpmis->itemHeight =tm.tmHeight;
  2519.          ReleaseDC(hDlg,hDC);
  2520.         break;
  2521. case WM_PAINT:
  2522. BeginPaint(hDlg, &ps);
  2523. DrawFrame(ps.hdc, hDlg);
  2524. EndPaint(hDlg, &ps);
  2525. break;
  2526. case WM_TIMER:
  2527. if(gnTimers ++>60)
  2528. SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
  2529. break;
  2530. case WM_COMMAND:
  2531. gnTimers =0;
  2532. switch(wParam)
  2533. {
  2534. case IDCANCEL:
  2535. udpread_stop =TRUE;
  2536. KillTimer(hDlg, 1);
  2537. ghDlgJy =NULL;
  2538. DeleteObject(hBrush);
  2539. EndDialog(hDlg, 0);
  2540. break;
  2541. }
  2542. break;
  2543. }
  2544. return FALSE;
  2545. }
  2546. void JyTimer(void)
  2547. {
  2548. if(HqTime[curChkUsrRes.jys].fRunning ==FALSE)
  2549. {
  2550. //jy_timers =0;
  2551. //curChkUsrRes.flag =-1;
  2552. }
  2553. //else
  2554. // if(++jy_timers>=6)
  2555. // {
  2556. //jy_timers =0;
  2557. //curChkUsrRes.flag =-1;
  2558. // }
  2559. }
  2560. void CenterWindow(HWND hDlg)
  2561. {
  2562. RECT rc2;
  2563. int x,y;
  2564. x =GetSystemMetrics(SM_CXSCREEN);
  2565. y =GetSystemMetrics(SM_CYSCREEN);
  2566. GetClientRect(hDlg, &rc2);
  2567. SetWindowPos(hDlg, NULL, (x-rc2.right)/2, (y-rc2.bottom)/2,
  2568. 0, 0, SWP_NOSIZE|SWP_NOZORDER);
  2569. }
  2570. void FAR PASCAL BtnSelectionState(LPDRAWITEMSTRUCT lpdis)
  2571. {
  2572. if(lpdis->itemState & ODS_SELECTED)
  2573. DrawBtnSelected(lpdis);
  2574. else
  2575. if(lpdis->itemState & ODS_FOCUS)
  2576. {
  2577. SetTextColor(lpdis->hDC, RGB(0, 0, 255));
  2578. DrawBtnFocus(lpdis);
  2579. }
  2580. else
  2581. {
  2582. SetTextColor(lpdis->hDC, RGB(0, 0, 0));
  2583. DrawBtnUnFocus(lpdis);
  2584. }
  2585. }
  2586. void FAR PASCAL BtnFocusState(LPDRAWITEMSTRUCT lpdis)
  2587. {
  2588. if(lpdis->itemState & ODS_FOCUS)
  2589. {                      
  2590. if(lpdis->itemState & ODS_SELECTED)
  2591. DrawBtnSelected(lpdis);
  2592. else
  2593. DrawBtnFocus(lpdis);
  2594. SetTextColor(lpdis->hDC, RGB(0, 0, 255));
  2595. }
  2596. else       
  2597. {
  2598. SetTextColor(lpdis->hDC, RGB(0, 0, 0));
  2599. DrawBtnUnFocus(lpdis);
  2600. }
  2601. DrawBtnNormal(lpdis, FALSE);
  2602. }
  2603. void FAR PASCAL BtnDrawEntireItem(LPDRAWITEMSTRUCT lpdis)
  2604. {
  2605. BtnFocusState(lpdis);
  2606. DrawBtnNormal(lpdis, TRUE);
  2607. }
  2608. void DrawBtnSelected(LPDRAWITEMSTRUCT lpdis)
  2609. {
  2610. ShowBitmap(lpdis->hDC, 5, (lpdis->rcItem.bottom-6)/2, hBmpSel);
  2611. }
  2612. void DrawBtnFocus(LPDRAWITEMSTRUCT lpdis)
  2613. {
  2614. SelectObject(lpdis->hDC, GetStockObject(BLACK_PEN));
  2615. SelectObject(lpdis->hDC, GetStockObject(NULL_BRUSH));
  2616. Rectangle(lpdis->hDC, 0, 0, lpdis->rcItem.right, lpdis->rcItem.bottom);
  2617. ShowBitmap(lpdis->hDC, 5, (lpdis->rcItem.bottom-6)/2, hBmpFoc);
  2618. }
  2619. void DrawBtnUnFocus(LPDRAWITEMSTRUCT lpdis)
  2620. {
  2621. HPEN hPen;
  2622. SelectObject(lpdis->hDC, GetStockObject(NULL_PEN));
  2623. SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
  2624. Rectangle(lpdis->hDC, 5, (lpdis->rcItem.bottom-6)/2, 15, (lpdis->rcItem.bottom+8)/2);
  2625. hPen =CreatePen(PS_SOLID, 1, RGB(180, 180, 180));
  2626. SelectObject(lpdis->hDC, GetStockObject(NULL_BRUSH));
  2627. SelectObject(lpdis->hDC, hPen);
  2628. Rectangle(lpdis->hDC, 0, 0, lpdis->rcItem.right, lpdis->rcItem.bottom);
  2629. SelectObject(lpdis->hDC, GetStockObject(BLACK_PEN));
  2630. DeleteObject(hPen);
  2631. }
  2632. void DrawBtnNormal(LPDRAWITEMSTRUCT lpdis, BOOL fDrawFrame)
  2633. {
  2634. char tmp[40];
  2635. HPEN hPen;
  2636. DWORD dw;
  2637.     HFONT hFont;
  2638.     LOGFONT lf;
  2639.     
  2640. GetWindowText(lpdis->hwndItem, tmp, sizeof(tmp));
  2641. memset(&lf,0,sizeof(LOGFONT));
  2642.     lf.lfHeight=(int)((lpdis->rcItem.bottom -lpdis->rcItem.top)*0.8);
  2643. lf.lfWeight =FW_NORMAL;            
  2644. strcpy(lf.lfFaceName, "宋体");
  2645.            
  2646.     hFont =CreateFontIndirect(&lf);
  2647.     SelectObject(lpdis->hDC,hFont);
  2648.     dw =GetTextExtent(lpdis->hDC, tmp, strlen(tmp));
  2649. SetBkMode(lpdis->hDC, TRANSPARENT);
  2650. SetTextColor(lpdis->hDC, RGB(0, 0, 0));
  2651. TextOut(lpdis->hDC, lpdis->rcItem.left+(lpdis->rcItem.right-LOWORD(dw)-lpdis->rcItem.left)/2, 
  2652. (lpdis->rcItem.bottom-HIWORD(dw))/2, tmp, strlen(tmp));
  2653. SetTextColor(lpdis->hDC, RGB(255, 255, 255));
  2654. TextOut(lpdis->hDC, lpdis->rcItem.left+(lpdis->rcItem.right-LOWORD(dw)-lpdis->rcItem.left)/2-1,
  2655.   (lpdis->rcItem.bottom-HIWORD(dw))/2-1, tmp, strlen(tmp));
  2656. DeleteObject(hFont);
  2657. if(!fDrawFrame) return;
  2658. SelectObject(lpdis->hDC, GetStockObject(NULL_BRUSH));
  2659. hPen =CreatePen(PS_SOLID, 1, RGB(80, 80, 80));
  2660. SelectObject(lpdis->hDC, hPen);
  2661. MoveTo(lpdis->hDC, lpdis->rcItem.right-2, 2);
  2662. LineTo(lpdis->hDC, lpdis->rcItem.right-2, lpdis->rcItem.bottom-2);
  2663. LineTo(lpdis->hDC, 2, lpdis->rcItem.bottom-2);
  2664. SelectObject(lpdis->hDC, GetStockObject(WHITE_PEN));
  2665. DeleteObject(hPen);
  2666. MoveTo(lpdis->hDC, 1, lpdis->rcItem.bottom-2);
  2667. LineTo(lpdis->hDC, 1, 1);
  2668. LineTo(lpdis->hDC, lpdis->rcItem.right-1, 1);
  2669. SelectObject(lpdis->hDC, GetStockObject(BLACK_PEN));
  2670. MoveTo(lpdis->hDC, lpdis->rcItem.right-2, 1);
  2671. LineTo(lpdis->hDC, lpdis->rcItem.right-2, lpdis->rcItem.bottom-2);
  2672. LineTo(lpdis->hDC, 1, lpdis->rcItem.bottom-2);
  2673. }
  2674. int ShowBitmap(HDC hDC, int left, int top, HBITMAP hBmp)      //==
  2675. {
  2676. BITMAP bmp;
  2677. HDC hdcMem;
  2678. GetObject(hBmp, sizeof(bmp), &bmp);
  2679. hdcMem =CreateCompatibleDC(hDC);
  2680. SelectObject(hdcMem, hBmp);
  2681. BitBlt(hDC, left, top, bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY);
  2682. DeleteObject(hdcMem);
  2683. return 0;
  2684. }
  2685. void DrawFrame(HDC hDC, HWND hWnd)
  2686. {
  2687. RECT rc;
  2688. HPEN hPen;
  2689. GetClientRect(hWnd, &rc);
  2690. hPen =CreatePen(PS_SOLID, 2, RGB(180, 180, 180));
  2691. SelectObject(hDC, hPen);
  2692. SelectObject(hDC, GetStockObject(NULL_BRUSH));
  2693. Rectangle(hDC, 2, 2, rc.right-2, rc.bottom-1);
  2694. SelectObject(hDC, GetStockObject(WHITE_PEN));
  2695. DeleteObject(hPen);
  2696. MoveTo(hDC, rc.right, 0);
  2697. LineTo(hDC, 0, 0);
  2698. LineTo(hDC, 0, rc.bottom);
  2699. hPen =CreatePen(PS_SOLID, 2, RGB(80, 80, 80));
  2700. SelectObject(hDC, hPen);
  2701. LineTo(hDC, rc.right-1, rc.bottom-1);
  2702. LineTo(hDC, rc.right-1, 0);
  2703. SelectObject(hDC, GetStockObject(WHITE_PEN));
  2704. DeleteObject(hPen);
  2705. }
  2706. HBRUSH DrawChild(HDC hDC, HWND hWnd)
  2707. {
  2708. HPEN hPen, hOldPen;
  2709. HBRUSH hOldBrush;
  2710. RECT rc;
  2711. if(!IsWindowVisible(hWnd) || WinVer >3)
  2712. return (HBRUSH)NULL;
  2713. GetWindowRect(hWnd, &rc);
  2714. rc.right -=rc.left;
  2715. rc.left =0;
  2716. rc.bottom -=rc.top;
  2717. rc.top =0;
  2718. if(isWndClass(hWnd,(LPSTR)"ListBox"))
  2719. {
  2720. rc.left-=1; 
  2721. rc.top-=1;
  2722. rc.right-=1;
  2723. rc.bottom-=1;
  2724. }  
  2725. hPen=CreatePen(PS_SOLID,1,RGB(80,80,80)); 
  2726. hOldBrush=SelectObject(hDC,GetStockObject(NULL_BRUSH));
  2727. hOldPen=SelectObject(hDC,hPen);
  2728. Rectangle(hDC,rc.left-1,rc.top-1,rc.right,rc.bottom);
  2729. SelectObject(hDC,GetStockObject(WHITE_PEN));
  2730. DeleteObject(hPen);
  2731. MoveTo(hDC,rc.left-1,rc.bottom);
  2732. LineTo(hDC,rc.right,rc.bottom);
  2733. LineTo(hDC,rc.right,rc.top-2);
  2734. SelectObject(hDC,hOldPen);                             
  2735. SelectObject(hDC,hOldBrush);
  2736. SetBkMode(hDC,TRANSPARENT);//Color((HDC)wParam,RGB(180,180,180));
  2737. SetTextColor(hDC,GetSysColor(COLOR_WINDOWTEXT));
  2738.   
  2739. if(isWndClass(hWnd,(LPSTR)"ComboBox"))
  2740. return (HBRUSH)GetStockObject(LTGRAY_BRUSH);
  2741. else  
  2742. return (HBRUSH)NULL;
  2743. }
  2744. BOOL isWndClass(HWND hWnd,LPSTR ClassName)
  2745. {                                            
  2746. char tmp[40];
  2747. if(!GetClassName(hWnd, (LPSTR)tmp, sizeof(tmp))) return FALSE;
  2748. return (strcmpi((LPSTR)tmp, (LPSTR)ClassName)==0); 
  2749. }