MSNDlg.cpp
上传用户:seeker_wen
上传日期:2016-05-23
资源大小:2084k
文件大小:12k
源码类别:

ICQ/即时通讯

开发平台:

Visual C++

  1. // MSNDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MSN.h"
  5. #include "MSNDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. #include <mshtml.h>
  12. #include  <comdef.h>
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CAboutDlg dialog used for App About
  15. class CAboutDlg : public CDialog
  16. {
  17. public:
  18. CAboutDlg();
  19. // Dialog Data
  20. //{{AFX_DATA(CAboutDlg)
  21. enum { IDD = IDD_ABOUTBOX };
  22. //}}AFX_DATA
  23. // ClassWizard generated virtual function overrides
  24. //{{AFX_VIRTUAL(CAboutDlg)
  25. protected:
  26. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  27. //}}AFX_VIRTUAL
  28. // Implementation
  29. protected:
  30. //{{AFX_MSG(CAboutDlg)
  31. //}}AFX_MSG
  32. DECLARE_MESSAGE_MAP()
  33. };
  34. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  35. {
  36. //{{AFX_DATA_INIT(CAboutDlg)
  37. //}}AFX_DATA_INIT
  38. }
  39. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  40. {
  41. CDialog::DoDataExchange(pDX);
  42. //{{AFX_DATA_MAP(CAboutDlg)
  43. //}}AFX_DATA_MAP
  44. }
  45. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  46. //{{AFX_MSG_MAP(CAboutDlg)
  47. // No message handlers
  48. //}}AFX_MSG_MAP
  49. END_MESSAGE_MAP()
  50. /////////////////////////////////////////////////////////////////////////////
  51. // CMSNDlg dialog
  52. CMSNDlg::CMSNDlg(CWnd* pParent /*=NULL*/)
  53. : CDialog(CMSNDlg::IDD, pParent)
  54. {
  55. iShowButton = 0;
  56. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  57. }
  58. void CMSNDlg::DoDataExchange(CDataExchange* pDX)
  59. {
  60. CDialog::DoDataExchange(pDX);
  61. //{{AFX_DATA_MAP(CMSNDlg)
  62. DDX_Control(pDX, 8001, m_MoveRight);
  63. DDX_Control(pDX, 8000, m_MoveLeft);
  64. DDX_Control(pDX, 14003, m_Search);
  65. DDX_Control(pDX, IDC_EXPLORER1, m_Browser);
  66. //}}AFX_DATA_MAP
  67. }
  68. BEGIN_MESSAGE_MAP(CMSNDlg, CDialog)
  69. //{{AFX_MSG_MAP(CMSNDlg)
  70. ON_WM_SYSCOMMAND()
  71. ON_WM_PAINT()
  72. ON_WM_QUERYDRAGICON()
  73. ON_WM_SIZE()
  74. ON_WM_NCCREATE()
  75. ON_WM_SIZING()
  76. ON_BN_CLICKED(8000, On8000)
  77. ON_BN_CLICKED(8001, On8001)
  78. ON_WM_GETMINMAXINFO()
  79. ON_WM_NCHITTEST()
  80. ON_WM_NCLBUTTONDOWN()
  81. ON_BN_CLICKED(1200, On1200)
  82. //}}AFX_MSG_MAP
  83. END_MESSAGE_MAP()
  84. /////////////////////////////////////////////////////////////////////////////
  85. // CMSNDlg message handlers
  86. BOOL CMSNDlg::OnInitDialog()
  87. {
  88. CDialog::OnInitDialog();
  89. // IDM_ABOUTBOX must be in the system command range.
  90. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  91. ASSERT(IDM_ABOUTBOX < 0xF000);
  92. CMenu* pSysMenu = GetSystemMenu(FALSE);
  93. if (pSysMenu != NULL)
  94. {
  95. CString strAboutMenu;
  96. strAboutMenu.LoadString(IDS_ABOUTBOX);
  97. if (!strAboutMenu.IsEmpty())
  98. {
  99. pSysMenu->AppendMenu(MF_SEPARATOR);
  100. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  101. }
  102. }
  103. // Set the icon for this dialog.  The framework does this automatically
  104. //  when the application's main window is not a dialog
  105. SetIcon(m_hIcon, TRUE); // Set big icon
  106. SetIcon(m_hIcon, FALSE); // Set small icon
  107. CRect rc;
  108. GetClientRect(rc);
  109. CButton *btn = (CButton*)GetDlgItem(888);
  110. btn->MoveWindow(7, 2, 60, 60);
  111. CRect rctic;
  112. m_Browser.GetClientRect(rctic);
  113. m_Browser.MoveWindow(12, rc.Height()-108, rc.Width()-22, 62);
  114. CWnd *tic = (CWnd*)GetDlgItem(IDC_EXPLORER1);
  115. tic = (CStatic*)GetDlgItem(1500);
  116. tic->MoveWindow(12, rc.Height()-130, 30,14);
  117. ///////////////////////////////////////////////////
  118. m_ILtabItem.Create(28, 28, ILC_MASK | ILC_COLOR32, 10, 10);
  119. CBitmap bmp;
  120. bmp.LoadBitmap(IDB_BITMAP2);
  121. ImageList_AddMasked(m_ILtabItem.m_hImageList, bmp, 0xff00ff);
  122. CTabCtrl *tab = (CTabCtrl *)GetDlgItem(IDC_TABITEM);
  123. tab->ModifyStyle(TCS_MULTILINE,0, 0);
  124. tab->SetImageList(&m_ILtabItem);   //   设置图标链标   
  125. ::SendMessage(tab->m_hWnd, TCM_SETITEMSIZE, 0, MAKELPARAM(36,31));
  126. tab->MoveWindow(CRect(0, 127-28, 31, rc.Height()-133));
  127. TCITEM tcItem = {0};   
  128. tcItem.mask = TCIF_IMAGE;   
  129. tcItem.pszText = "";
  130. tcItem.cchTextMax = 30;
  131. for(int i = 0; i <7; i++)
  132. {
  133. tab->InsertItem(0, "" );
  134. tcItem.iImage = i;   //   图标索引   
  135. tab->SetItem( 0, &tcItem);
  136. }
  137. userlist.Create(IDD_DIALOG1, this);
  138. userlist.ShowWindow(SW_NORMAL);
  139. userlist.MoveWindow(32, 127-28, rc.Width()-31, rc.Height()-233);
  140. //SetWindowNoSkinHwnd(userlist.m_hWnd, FALSE);
  141. SetDialogEraseBkgnd(userlist.m_hWnd);
  142. CRect rcEditArea(20,4,125,17);
  143. m_Search.SetEditArea(rcEditArea);
  144. CRect rcButtonArea(128,3,143,18);
  145. m_Search.SetButtonArea(rcButtonArea);
  146. m_Search.SetOwner(this);
  147. m_Search.SetButtonClickedMessageId(WM_USER_EDITBUTTON_CLICKED);
  148. m_Search.SetButtonExistsAlways(FALSE);
  149. m_Search.SetBitmaps("bitmap2.bmp", "bitmap2_e.bmp");
  150. m_Search.MoveWindow(7, rc.Height()-42, rc.Width()-11, 32);
  151. HitButton();
  152. VARIANT vInfo; 
  153. vInfo.vt = VT_EMPTY; 
  154. m_Browser.Navigate("http://rad.msn.com/ADSAdClient31.dll?GetAd=&PG=IMSCHI&AP=1007",&vInfo,&vInfo,&vInfo,&vInfo); 
  155. m_Browser.SetVisible(TRUE); 
  156. SetColorize(0xf832ff);
  157. return TRUE;  
  158. }
  159. void CMSNDlg::OnSysCommand(UINT nID, LPARAM lParam)
  160. {
  161. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  162. {
  163. CAboutDlg dlgAbout;
  164. dlgAbout.DoModal();
  165. }
  166. else
  167. {
  168. CDialog::OnSysCommand(nID, lParam);
  169. }
  170. }
  171. // If you add a minimize button to your dialog, you will need the code below
  172. //  to draw the icon.  For MFC applications using the document/view model,
  173. //  this is automatically done for you by the framework.
  174. void CMSNDlg::OnPaint() 
  175. {
  176. if (IsIconic())
  177. {
  178. CPaintDC dc(this); // device context for painting
  179. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  180. // Center icon in client rectangle
  181. int cxIcon = GetSystemMetrics(SM_CXICON);
  182. int cyIcon = GetSystemMetrics(SM_CYICON);
  183. CRect rect;
  184. GetClientRect(&rect);
  185. int x = (rect.Width() - cxIcon + 1) / 2;
  186. int y = (rect.Height() - cyIcon + 1) / 2;
  187. // Draw the icon
  188. dc.DrawIcon(x, y, m_hIcon);
  189. }
  190. else
  191. {
  192. CDialog::OnPaint();
  193. }
  194. }
  195. // The system calls this to obtain the cursor to display while the user drags
  196. //  the minimized window.
  197. HCURSOR CMSNDlg::OnQueryDragIcon()
  198. {
  199. return (HCURSOR) m_hIcon;
  200. }
  201. void CMSNDlg::OnSize(UINT nType, int cx, int cy) 
  202. {
  203. CDialog::OnSize(nType, cx, cy);
  204. Invalidate();
  205. CButton *btn = (CButton*)GetDlgItem(6000);
  206. if (btn==NULL) {
  207. return;
  208. }
  209. btn->MoveWindow( 74, 11, cx - 26 - 74, 22);
  210. CTabCtrl *tab = (CTabCtrl *)GetDlgItem(IDC_TABITEM);
  211. tab->MoveWindow(CRect(0, 127-28, 31, cy-133));
  212. CEdit *edit = (CEdit*)GetDlgItem(14003);
  213. edit->MoveWindow(7, cy-42, cx-11, 32);
  214. CStatic *tic = (CStatic*)GetDlgItem(1500);
  215. tic->MoveWindow(12, cy-130, 30,14);
  216. userlist.MoveWindow(32, 127-28, cx-31, cy -233);
  217. CRect rctic;
  218. m_Browser.GetClientRect(rctic);
  219. if (cx-rctic.Width()<24) {
  220. m_Browser.MoveWindow(12, cy-108, cx-22, 62);
  221. }
  222. else
  223. {
  224. m_Browser.MoveWindow((cx-236)/2, cy-108, 236, 62);
  225. }
  226. HitButton();
  227. }
  228. BOOL CMSNDlg::OnNcCreate(LPCREATESTRUCT lpCreateStruct) 
  229. {
  230. if (!CDialog::OnNcCreate(lpCreateStruct))
  231. return FALSE;
  232. SetWindowSkinResID(m_hWnd, 777);
  233. return TRUE;
  234. }
  235. BEGIN_EVENTSINK_MAP(CMSNDlg, CDialog)
  236.     //{{AFX_EVENTSINK_MAP(CMSNDlg)
  237. ON_EVENT(CMSNDlg, IDC_EXPLORER1, 259 /* DocumentComplete */, OnDocumentCompleteExplorer1, VTS_DISPATCH VTS_PVARIANT)
  238. //}}AFX_EVENTSINK_MAP
  239. END_EVENTSINK_MAP()
  240. void CMSNDlg::OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL) 
  241. {
  242. HRESULT hr = S_OK;   
  243. IWebBrowser2* pWB = NULL;   
  244. hr = pDisp->QueryInterface(IID_IWebBrowser2, reinterpret_cast<void**>(&pWB));   
  245.     
  246. IDispatch* pDocDisp = NULL;   
  247. hr = pWB->get_Document(&pDocDisp);   
  248. if(pDocDisp)   
  249. {   
  250. VARIANT v;   
  251. VariantInit(&v);   
  252. IHTMLDocument2* pDoc = NULL;   
  253. hr = pDocDisp->QueryInterface(IID_IHTMLDocument2, reinterpret_cast<void**>(&pDoc));   
  254. IHTMLElement* pElement = NULL;   
  255. hr = pDoc->get_body(&pElement);   
  256. IHTMLBodyElement* pBodyElement = NULL;   
  257. hr = pElement->QueryInterface(IID_IHTMLBodyElement, (void**)&pBodyElement);   
  258. if(pBodyElement)   
  259. {   
  260. pBodyElement->put_scroll(::SysAllocString(L"no"));
  261. _variant_t v;   
  262. v.vt = VT_INT;   
  263. v.intVal = 0;
  264. pBodyElement->put_leftMargin(v);
  265. pBodyElement->put_topMargin(v);
  266. pBodyElement->Release();   
  267. }   
  268. pElement->Release();   
  269. pDoc->Release();   
  270. pDocDisp->Release();   
  271. }   
  272. pWB->Release();   
  273. }
  274. void CMSNDlg::OnSizing(UINT fwSide, LPRECT pRect) 
  275. {
  276. CDialog::OnSizing(fwSide, pRect);
  277. //m_Browser.SetRedraw(false);
  278. }
  279. void CMSNDlg::HitButton()
  280. {
  281. //1201 -- 1204
  282. int iWidth = WIDTH1201 + WIDTH1202 + WIDTH1203 + WIDTH1204 + 2 * 3; //间距2
  283. CRect rc;
  284. GetClientRect(rc);
  285. m_MoveLeft.MoveWindow(9, 71, 12, 24);
  286. m_MoveRight.MoveWindow( rc.right-74-13, 71, 12, 24);
  287. //如果足够宽,左右按扭不显示
  288. if (rc.Width()-9-86>iWidth) {
  289. iShowButton = 0;
  290. CButton *btn = NULL;
  291. for(int i = 0; i <4; i++)
  292. {
  293. btn = (CButton*)GetDlgItem(1201 + i);
  294. btn->ShowWindow(SW_NORMAL);
  295. btn->MoveWindow(10+(26+2)*i, 99-28, 26, 24);
  296. }
  297. m_MoveLeft.ShowWindow(SW_HIDE);
  298. m_MoveRight.ShowWindow(SW_HIDE);
  299. }
  300. else if(rc.Width()-9-86 > WIDTH1201*3 + 2*3 + 12) //3 BUTTON + 1 LEFTRIGHT
  301. {
  302. //显示3个按扭1个左右
  303. CButton *btn = NULL;
  304. for(int i = 0; i < 3; i++)
  305. {
  306. btn = (CButton*)GetDlgItem(1201 + i + iShowButton);
  307. btn->ShowWindow(SW_NORMAL);
  308. btn->MoveWindow( (iShowButton==0?0:12+2) + 10+(26+2)*i, 99-28, 26, 24);
  309. btn->Invalidate();
  310. }
  311. if ( iShowButton ==0) {
  312. btn = (CButton*)GetDlgItem(1204);
  313. btn->ShowWindow(SW_HIDE);
  314. m_MoveRight.ShowWindow(SW_NORMAL);
  315. m_MoveLeft.ShowWindow(SW_HIDE);
  316. }
  317. else{
  318. btn = (CButton*)GetDlgItem(1201);
  319. btn->ShowWindow(SW_HIDE);
  320. m_MoveRight.ShowWindow(SW_HIDE);
  321. m_MoveLeft.ShowWindow(SW_NORMAL);
  322. }
  323. }
  324. else if(rc.Width()-9-86 > WIDTH1201*2 + 2*2 + 12)
  325. {
  326. //显示2个按扭2个左右
  327. CButton *btn = NULL;
  328. for(int i = 0; i < 4; i++)
  329. {
  330. btn = (CButton*)GetDlgItem(1201 + i);
  331. btn->ShowWindow(SW_HIDE);
  332. }
  333. for( i = 0; i < 2; i++)
  334. {
  335. if (iShowButton==3&&i==1) {
  336. break;
  337. }
  338. btn = (CButton*)GetDlgItem(1201 + i + iShowButton);
  339. btn->ShowWindow(SW_NORMAL);
  340. btn->MoveWindow( (iShowButton==0?0:12+2) + 10+(26+2)*i, 99-28, 26, 24);
  341. btn->Invalidate();
  342. }
  343. if ( iShowButton ==0) {
  344. m_MoveRight.ShowWindow(SW_NORMAL);
  345. m_MoveLeft.ShowWindow(SW_HIDE);
  346. }
  347. else if (iShowButton ==3) {
  348. m_MoveRight.ShowWindow(SW_HIDE);
  349. m_MoveLeft.ShowWindow(SW_NORMAL);
  350. }
  351. else
  352. {
  353. m_MoveRight.ShowWindow(SW_NORMAL);
  354. m_MoveLeft.ShowWindow(SW_NORMAL);
  355. }
  356. }
  357. else
  358. {
  359. //显示1个按扭2个左右
  360. //
  361. int c = (float)(rc.Width()-9-86 - 24+4) / (float)(WIDTH1201+2);
  362. CButton *btn = NULL;
  363. for(int i = 0; i < 4; i++)
  364. {
  365. btn = (CButton*)GetDlgItem(1201 + i);
  366. btn->ShowWindow(SW_HIDE);
  367. }
  368. for( i = 0; i < 1; i++)
  369. {
  370. btn = (CButton*)GetDlgItem(1201 + i + iShowButton);
  371. btn->ShowWindow(SW_NORMAL);
  372. btn->MoveWindow( (iShowButton==0?0:12+2) + 10+(26+2)*i, 99-28, 26, 24);
  373. btn->Invalidate();
  374. }
  375. if ( iShowButton ==0) {
  376. m_MoveRight.ShowWindow(SW_NORMAL);
  377. m_MoveLeft.ShowWindow(SW_HIDE);
  378. }
  379. else if (iShowButton ==3) {
  380. m_MoveRight.ShowWindow(SW_HIDE);
  381. m_MoveLeft.ShowWindow(SW_NORMAL);
  382. }
  383. else
  384. {
  385. m_MoveRight.ShowWindow(SW_NORMAL);
  386. m_MoveLeft.ShowWindow(SW_NORMAL);
  387. }
  388. }
  389. }
  390. void CMSNDlg::On8000() 
  391. {
  392. //move left
  393. if (iShowButton>0) {
  394. iShowButton--;
  395. CButton *btn = NULL;
  396. for(int i = 0; i < 4; i++)
  397. {
  398. btn = (CButton*)GetDlgItem(1201 + i);
  399. btn->ShowWindow(SW_HIDE);
  400. }
  401. HitButton();
  402. }
  403. }
  404. void CMSNDlg::On8001() 
  405. {
  406. //move right
  407. if (iShowButton<3) {
  408. iShowButton++;
  409. CButton *btn = NULL;
  410. for(int i = 0; i < 4; i++)
  411. {
  412. btn = (CButton*)GetDlgItem(1201 + i);
  413. btn->ShowWindow(SW_HIDE);
  414. }
  415. HitButton();
  416. }
  417. }
  418. BOOL CMSNDlg::PreTranslateMessage(MSG* pMsg) 
  419. {
  420. if ((pMsg->message == WM_RBUTTONDOWN)||(pMsg->message == WM_RBUTTONDBLCLK)){
  421. return TRUE;
  422. }
  423. return CDialog::PreTranslateMessage(pMsg);
  424. }
  425. void CMSNDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
  426. {
  427. // TODO: Add your message handler code here and/or call default
  428. lpMMI->ptMinTrackSize.x = 153;//   m_MinSize为最小尺寸   
  429. lpMMI->ptMinTrackSize.y = 302;//   m_MinSize为最小尺寸
  430. CDialog::OnGetMinMaxInfo(lpMMI);
  431. }
  432. void CMSNDlg::On1200() 
  433. {
  434. CAboutDlg dlg;
  435. dlg.DoModal();
  436. }