PopFax.cpp
上传用户:looem2003
上传日期:2014-07-20
资源大小:13733k
文件大小:115k
源码类别:

打印编程

开发平台:

Visual C++

  1. // PopFax.cpp : Defines the entry point for the application.
  2. //
  3. #include "PopFax.h" 
  4. #pragma comment(lib,"Wininet.lib")
  5. //#pragma comment(lib,"User32.lib")
  6. #pragma comment(lib,"Comdlg32.lib")
  7. #pragma comment(lib,"shell32.lib")
  8. #pragma comment(lib,"Gdi32.lib")
  9. #pragma comment(lib,"GdiPlus.lib")
  10. #pragma comment(lib,"cximagecrtu.lib")
  11. #pragma comment(lib,"comctl32.lib")
  12. //char optData[12582912] = "";//12582912 12 戾汔徉轵
  13. char optData[1048576] = "";//1048576 1 戾汔徉轵
  14. const char* aBoundary = "----AaB03x";
  15. LPCTSTR tBoundary = _T("----AaB03x");
  16. #define WRITE_BLOCK 1024
  17. CGdiPlusInit gdiplusInit;
  18. BOOL start_process( LPTSTR process );
  19. int APIENTRY _tWinMain(HINSTANCE hInstance,
  20.                      HINSTANCE hPrevInstance,
  21.                      LPTSTR    lpCmdLine,
  22.                      int       nCmdShow)
  23. {
  24. UNREFERENCED_PARAMETER(hPrevInstance);
  25. UNREFERENCED_PARAMETER(lpCmdLine);
  26. APPCONFIG ac;
  27. ADDITIONALCONFIG aac;
  28. LPTSTR buff = lpCmdLine;
  29.   // TODO: Place code here.
  30. start_process( NULL );
  31. load_app_config( hInstance, &ac, _T("app_config.ini"), load_config, &aac );
  32. //while( (buff[0] == _T(' ')) || (buff[0] == _T('"')) ) buff++;
  33. //_tcscpy_s( aac.sendFile, ARRAYSIZE(aac.sendFile), buff );
  34. //if( NULL != (buff = _tcschr( aac.sendFile, _T('"') ) ) )
  35. // buff[0] = 0;
  36. gdiplusInit.gdi_start();
  37. buff = _tcsrchr( aac.logo, _T('\') );
  38. _stprintf_s( buff+1, ARRAYSIZE(aac.logo), _T("%s_logo.gif"), lm.get_current_lang() );
  39. aac.bmp = new Bitmap( aac.logo );
  40. //convert_pjl_bmp( &ac );
  41. convert_image( &ac );
  42. //DialogBoxParam( GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_SENDING), NULL, dlg_send, (LPARAM)&ac);
  43. if( NULL != _tcsstr( lpCmdLine, _T("/config") ) )
  44. {
  45. ZeroMemory( aac.sendFile, sizeof(aac.sendFile) );
  46. DialogBoxParam( hInstance, MAKEINTRESOURCE(IDD_OPTIONS), NULL, dlg_options, (LPARAM)&ac);
  47. }
  48. else
  49. DialogBoxParam( hInstance, MAKEINTRESOURCE(IDD_DLGBOX), NULL, dlg_main, (LPARAM)&ac);
  50. save_app_config( &ac, save_config );
  51. if( NULL != aac.bmp )
  52. {
  53. Bitmap* bmp = (Bitmap*)aac.bmp;
  54. //CxImage* bmp = (CxImage*)aac.bmp;
  55. delete bmp;
  56. aac.bmp = NULL;
  57. gdiplusInit.gdi_stop();
  58. }
  59. return (int)0;
  60. }
  61. INT_PTR CALLBACK dlg_credentials(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  62. {
  63. UNREFERENCED_PARAMETER(lParam);
  64. static LPAPPCONFIG ac = NULL;
  65. static LPADDITIONALCONFIG aac = NULL;
  66. INT_PTR ret = (INT_PTR)FALSE;
  67. switch (message)
  68. {
  69. case WM_INITDIALOG:
  70. ret = (INT_PTR)TRUE;
  71. if( (NULL != ( ac = (LPAPPCONFIG)lParam ))&&( NULL == (aac = (LPADDITIONALCONFIG)ac->addParam) )  ) 
  72. {
  73. EndDialog(hDlg, LOWORD(wParam));
  74. break;
  75. }
  76. SetDlgItemText( hDlg, IDC_EDIT_USER, aac->userName );
  77. SetDlgItemText( hDlg, IDC_EDIT_PASS, aac->userPass );
  78. CheckDlgButton( hDlg, IDC_SAVE_PASS, aac->savePass?BST_CHECKED:BST_UNCHECKED);
  79. set_lang_txt( hDlg, aac, 2 );
  80. //if( 0 == _tcslen( aac->userName ) )
  81. // SetFocus( GetDlgItem( hDlg, IDC_EDIT_USER ) );
  82. //else
  83. // SetFocus( GetDlgItem( hDlg, IDC_EDIT_PASS ) );
  84. break;
  85. case WM_COMMAND:
  86. switch( LOWORD(wParam) )
  87. {
  88. case IDC_SAVE_PASS://
  89. aac->savePass = (BST_CHECKED == ( BST_CHECKED & IsDlgButtonChecked( hDlg, IDC_SAVE_PASS) ));
  90. break;
  91. case IDOK:
  92. GetDlgItemText( hDlg, IDC_EDIT_USER, aac->userName, ARRAYSIZE(aac->userName) );
  93. GetDlgItemText( hDlg, IDC_EDIT_PASS, aac->userPass, ARRAYSIZE(aac->userPass) );
  94. case IDCANCEL:
  95. EndDialog(hDlg, LOWORD(wParam));
  96. ret = (INT_PTR)TRUE;
  97. }
  98. break;
  99. }
  100. return ret;
  101. }
  102. void draw_item( LPADDITIONALCONFIG aac, LPDRAWITEMSTRUCT lpDrawItem )
  103. {
  104. if( (NULL != aac)&&(NULL != lpDrawItem) )
  105. {
  106. float x = 0, y = 0, cx = 0, cy = 0, imgW = 0, imgH = 0;
  107. Bitmap* bmp = (Bitmap*)aac->bmp;
  108. RECT rc = lpDrawItem->rcItem;
  109. rc.top++;
  110. rc.left++;
  111. rc.bottom -= 3;
  112. rc.right -= 3;
  113. if( NULL != bmp )
  114. {
  115. cx = (float)(rc.right-rc.left);
  116. cy = (float)(rc.bottom-rc.top);
  117. imgW = (float)bmp->GetWidth();
  118. imgH = (float)bmp->GetHeight();
  119. if( cy > (imgH/(imgW/cx)) )
  120. {
  121. imgH = (imgH/(imgW/cx));
  122. imgW = cx;
  123. }
  124. else
  125. {
  126. imgW = (imgW/(imgH/cy));
  127. imgH = cy;
  128. }
  129. Graphics* g = Graphics::FromHDC( lpDrawItem->hDC );
  130. if( NULL != g )
  131. {
  132. //bmp->Draw( lpDrawItem->hDC, rc.left, rc.top, imgW, imgH+2, 0, true);
  133. g->DrawImage( bmp, (INT)rc.left, (INT)rc.top, (INT)imgW, (INT)imgH+2);
  134. delete g;
  135. }
  136. }
  137. }
  138. }
  139. #define WM_TRAY_ICON    (WM_USER+123)
  140. #define WM_ANIMATE_WAIT (WM_USER+124)
  141. // Message handler for main box.
  142. INT_PTR CALLBACK dlg_main(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  143. {
  144. UNREFERENCED_PARAMETER(lParam);
  145. static LPAPPCONFIG ac = NULL;
  146. static LPADDITIONALCONFIG aac = NULL;
  147. static HICON hIcon = NULL;
  148. static HICON hBtnIcon = NULL;
  149. static HICON hBtnMassIcon = NULL;
  150. static HANDLE hThread = NULL;
  151. INT_PTR ret = (INT_PTR)FALSE;
  152. switch (message)
  153. {
  154. case WM_INITDIALOG:
  155. ret = (INT_PTR)TRUE;
  156. if( (NULL != ( ac = (LPAPPCONFIG)lParam ))&&( NULL == (aac = (LPADDITIONALCONFIG)ac->addParam) )  ) 
  157. {
  158. EndDialog(hDlg, LOWORD(wParam));
  159. break;
  160. }
  161. SetClassLong( hDlg, GCLP_HICON, (LONG)(hIcon = LoadIcon( GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_POPFAX))) );
  162. SendMessage( hDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon );
  163. CheckDlgButton( hDlg, IDC_CLOSE_WND, (!aac->closeWnd)?BST_CHECKED:BST_UNCHECKED);
  164. CheckDlgButton( hDlg, IDC_TRANSMITION_REPORT, aac->transmReport?BST_CHECKED:BST_UNCHECKED);
  165. CheckDlgButton( hDlg, IDC_CHECK_ATTACH, aac->transmReportAttach?BST_CHECKED:BST_UNCHECKED);
  166. EnableWindow( GetDlgItem( hDlg, IDC_CHECK_ATTACH ), aac->transmReport );
  167. //hBtnIcon = ExtractIcon( GetModuleHandle( NULL ), _T("shell32.dll"), 160 );
  168. ExtractIconEx( _T("shell32.dll"), 160, &hBtnIcon, NULL, 1 );
  169. SendDlgItemMessage( hDlg, IDC_BTN_ADR1, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hBtnIcon);
  170. ExtractIconEx( _T("shell32.dll"), 108, &hBtnMassIcon, NULL, 1 );
  171. SendDlgItemMessage( hDlg, IDC_BTN_MASS_FAX, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hBtnMassIcon);
  172. EnableWindow( GetDlgItem( hDlg, IDC_BTN_MASS_FAX ), FALSE );
  173. set_lang_txt( hDlg, aac, 1 );
  174. break;
  175. case WM_DRAWITEM:
  176. draw_item( aac, (LPDRAWITEMSTRUCT) lParam );
  177. break;
  178. case WM_CLOSE:
  179. case WM_DESTROY:
  180. if( NULL != hIcon )
  181. DestroyIcon( hIcon );
  182. hIcon = NULL;
  183. if( NULL != hBtnIcon )
  184. DestroyIcon( hBtnIcon );
  185. hBtnIcon = NULL;
  186. if( NULL != hBtnMassIcon )
  187. DestroyIcon( hBtnMassIcon );
  188. hBtnMassIcon = NULL;
  189. break;
  190. case WM_COMMAND:
  191. switch( LOWORD(wParam) )
  192. {
  193. case IDC_BTN_MASS_FAX:
  194. if( IDOK == DialogBoxParam( GetModuleHandle( NULL ), MAKEINTRESOURCE( IDD_MASS_FAX ), hDlg, dlg_mass_fax, (LPARAM)ac ) )
  195. EnableWindow( GetDlgItem( hDlg, IDOK ), TRUE );
  196. else
  197. aac->massFax[0] = 0;
  198. break;
  199. case IDC_CHECK_MASS_FAX:
  200. {
  201. BOOL enabled = (BST_CHECKED == ( BST_CHECKED & IsDlgButtonChecked( hDlg, IDC_CHECK_MASS_FAX) ));
  202. EnableWindow( GetDlgItem( hDlg, IDC_BTN_MASS_FAX ), enabled);
  203. EnableWindow( GetDlgItem( hDlg, IDC_FAX1 ), !enabled );
  204. EnableWindow( GetDlgItem( hDlg, IDC_FAX2 ), !enabled );
  205. EnableWindow( GetDlgItem( hDlg, IDC_FAX3 ), !enabled );
  206. if( enabled  )
  207. EnableWindow( GetDlgItem( hDlg, IDOK ), FALSE );
  208. else
  209. if( ((0 != GetWindowTextLength( GetDlgItem(hDlg, IDC_FAX1 )))||
  210. (0 != GetWindowTextLength( GetDlgItem(hDlg, IDC_FAX2 )))||
  211. (0 != GetWindowTextLength( GetDlgItem(hDlg, IDC_FAX3 ))) ) &&
  212. (0 != _tcslen(aac->sendFile) ) )
  213. EnableWindow( GetDlgItem( hDlg, IDOK ), TRUE );
  214. else
  215. EnableWindow( GetDlgItem( hDlg, IDOK ), FALSE );
  216. }
  217. break;
  218. case IDC_BTN_ADR1:
  219. {
  220. LPTSTR fax = NULL;
  221. DWORD i = 0, j = 0;
  222. _tstring faxes( _T("") );
  223. aac->param = &faxes;
  224. DialogBoxParam( GetModuleHandle( NULL ), MAKEINTRESOURCE( IDD_CONTACT_BOOK ), hDlg, dlg_contact_book, (LPARAM)ac );
  225. fax = (LPTSTR)faxes.c_str();
  226. for( DWORD id = IDC_FAX1, index = 0; id <= IDC_FAX3; id++ )
  227. if( 0 == GetWindowTextLength( GetDlgItem( hDlg, id ) ) )
  228. {
  229. j = 0;
  230. while( (fax[i] != _T('n'))&&(fax[i] != _T('')) )
  231. aac->fax1[j++] = fax[i++];
  232. if( fax[i] == _T('') )
  233. break;
  234. aac->fax1[j] = 0;
  235. i++;
  236. SetDlgItemText( hDlg, id, aac->fax1 );
  237. }
  238. }
  239. break;
  240. case IDC_TRANSMITION_REPORT:
  241. EnableWindow( GetDlgItem( hDlg, IDC_CHECK_ATTACH ), (aac->transmReport = (BST_CHECKED == ( BST_CHECKED & IsDlgButtonChecked( hDlg, IDC_TRANSMITION_REPORT) )) ) );
  242. break;
  243. case IDC_CHECK_ATTACH:
  244. aac->transmReportAttach = (BST_CHECKED == ( BST_CHECKED & IsDlgButtonChecked( hDlg, IDC_CHECK_ATTACH) ));
  245. break;
  246. case IDC_CLOSE_WND:
  247. aac->closeWnd = !(BST_CHECKED == ( BST_CHECKED & IsDlgButtonChecked( hDlg, IDC_CLOSE_WND) ));
  248. break;
  249. case IDC_BROWSE:
  250. browse_file( hDlg, aac->sendFile, ARRAYSIZE(aac->sendFile), _T("Tiff files (*.tif; *.tiff)*.tif*.tiff") );
  251. //break;
  252. case IDC_FAX1:
  253. case IDC_FAX2:
  254. case IDC_FAX3:
  255. if( ((0 == GetWindowTextLength( GetDlgItem(hDlg, IDC_FAX1 )))&&
  256. (0 == GetWindowTextLength( GetDlgItem(hDlg, IDC_FAX2 )))&&
  257. (0 == GetWindowTextLength( GetDlgItem(hDlg, IDC_FAX3 ))) ) ||
  258. (0 == _tcslen(aac->sendFile) ) )
  259. EnableWindow( GetDlgItem( hDlg, IDOK ), FALSE );
  260. else
  261. EnableWindow( GetDlgItem( hDlg, IDOK ), TRUE );
  262. break;
  263. case IDC_PREVIEW:
  264. //DialogBoxParam( GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_PREVIEW), hDlg, dlg_preview, (LPARAM)ac);
  265. preview( hDlg, aac->sendFile );
  266. break;
  267. case IDC_OPTIONS:
  268. DialogBoxParam( GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_OPTIONS), hDlg, dlg_options, (LPARAM)ac);
  269. set_lang_txt( hDlg, aac, 1 );
  270. break;
  271. case IDOK:
  272. if( BST_CHECKED == ( BST_CHECKED & IsDlgButtonChecked( hDlg, IDC_CHECK_MASS_FAX) ) )
  273. {
  274. aac->fax1[0] = aac->fax2[0] = aac->fax3[0] = 0;
  275. }
  276. else
  277. {
  278. GetDlgItemText( hDlg, IDC_FAX1, aac->fax1, ARRAYSIZE(aac->fax1) );
  279. GetDlgItemText( hDlg, IDC_FAX2, aac->fax2, ARRAYSIZE(aac->fax2) );
  280. GetDlgItemText( hDlg, IDC_FAX3, aac->fax3, ARRAYSIZE(aac->fax3) );
  281. }
  282. aac->hDlg = hDlg;
  283. DialogBoxParam( GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_SENDING), hDlg, dlg_send, (LPARAM)ac);
  284. //if( !aac->closeWnd )
  285. // break;
  286. case IDCANCEL:
  287. EndDialog(hDlg, LOWORD(wParam));
  288. ret = (INT_PTR)TRUE;
  289. }
  290. break;
  291. }
  292. return ret;
  293. }
  294. BOOL send_fax( LPADDITIONALCONFIG aac, DWORD sendFlag )
  295. {
  296. BOOL ret = FALSE;
  297. CURLEncode ue;
  298. TCHAR resXml[LONG_PATH] = _T("");
  299. TCHAR retText[1024] = _T("");
  300. LPCTSTR acceptTypes[] = { _T("Accept: */*"), NULL};
  301. //LPCTSTR header = (( FAX_TRANSFER == sendFlag )?_T("Content-Type: multipart/form-data; boundary=--AaB03x"):_T("Content-Type: application/x-www-form-urlencoded"));
  302. LPCTSTR header = _T("Content-Type: multipart/form-data; boundary=--AaB03x");
  303. DWORD flags = INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | INTERNET_FLAG_NO_COOKIES;
  304. DWORD dataSize = 0;
  305. ULARGE_INTEGER massFileSize = { 0, 0};
  306. char txRep[][12] = { "YES", "NO", "NOT_AT_ALL" } ;
  307. DWORD txReportNum = 0;
  308. HINTERNET hInternet = NULL;
  309. HINTERNET hConnect = NULL;
  310. HINTERNET hRequest = NULL;
  311. HANDLE hFile = INVALID_HANDLE_VALUE;
  312. HANDLE hMassFile = INVALID_HANDLE_VALUE;
  313. if( aac->canSend )
  314. {
  315. ShowWindow( aac->hProgress, ( FAX_AUTHENTICATION == sendFlag )?SW_HIDE:SW_SHOW );
  316. switch( sendFlag )
  317. {
  318. case FAX_TRANSFER:
  319. SetDlgItemText( aac->hDlg, IDC_STATE, lm._ls( IDT_FILE_TRANSFER ) );
  320. break;
  321. case FAX_STATUS:
  322. SetDlgItemText( aac->hDlg, IDC_STATE, lm._ls( IDT_FAX_SENDING ) );
  323. break;
  324. }
  325. }
  326. ZeroMemory( optData, sizeof(optData) );
  327. do
  328. {
  329. if( FAX_TRANSFER == sendFlag )
  330. if( (0 != _tcslen( aac->sendFile ))&&
  331. (-1 == _taccess( aac->sendFile, 0 ) ) )
  332. break;
  333. if( NULL == (hInternet = InternetOpen( _T("Popfax"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0) ) )
  334. break;
  335. ////耦邃桧