home *** CD-ROM | disk | FTP | other *** search
/ Freelog 54 / Freelog054.iso / Bas / Détente / WinPenguins / UrlStatic.cpp < prev    next >
C/C++ Source or Header  |  2001-04-19  |  4KB  |  148 lines

  1. /**
  2.  * $Id: UrlStatic.cpp,v 1.1 2001/04/19 19:16:15 mvines Exp $
  3.  *
  4.  *  Copyright (C) 2001  Michael Vines
  5.  *
  6.  *  This program is free software; you can redistribute it and/or modify
  7.  *  it under the terms of the GNU General Public License as published by
  8.  *  the Free Software Foundation; either version 2 of the License, or
  9.  *  (at your option) any later version.
  10.  *
  11.  *  This program is distributed in the hope that it will be useful,
  12.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  *  GNU General Public License for more details.
  15.  *
  16.  *  You should have received a copy of the GNU General Public License
  17.  *  along with this program; if not, write to the Free Software
  18.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19.  *
  20.  *  As a special exception, Michael Vines gives permission to link this program
  21.  *  with the Microsoft Visual C++ Runtime/MFC Environment, and distribute the
  22.  *  resulting executable, without including the source code for the Microsoft 
  23.  *  Visual C++ Runtime/MFC Environment in the source distribution
  24.  */
  25.  
  26. #include "stdafx.h"
  27. #include "UrlStatic.h"
  28.  
  29. #ifdef _DEBUG
  30. #define new DEBUG_NEW
  31. #undef THIS_FILE
  32. static char THIS_FILE[] = __FILE__;
  33. #endif
  34.  
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CUrlStatic
  37.  
  38. CUrlStatic::CUrlStatic()
  39. {
  40. }
  41.  
  42. CUrlStatic::~CUrlStatic()
  43. {
  44. }
  45.  
  46.  
  47. BEGIN_MESSAGE_MAP(CUrlStatic, CStatic)
  48.     //{{AFX_MSG_MAP(CUrlStatic)
  49.     ON_WM_PAINT()
  50.     ON_WM_LBUTTONDOWN()
  51.     //}}AFX_MSG_MAP
  52. END_MESSAGE_MAP()
  53.  
  54.  
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CUrlStatic message handlers
  57.  
  58. void CUrlStatic::OnPaint() 
  59. {
  60.     CPaintDC dc(this); // device context for painting
  61.     
  62.     // Do not call CStatic::OnPaint() for painting messages
  63.  
  64.   CString text;
  65.   GetWindowText(text);
  66.  
  67.  
  68.   CPen pen(PS_SOLID, 1, RGB(0,0,255)), *oldPen;
  69.   CGdiObject *oldFont;
  70.  
  71.   oldFont = dc.SelectStockObject(ANSI_VAR_FONT);
  72.   oldPen = dc.SelectObject(&pen);
  73.  
  74.   dc.SetTextColor(RGB(0, 0, 255));
  75.   dc.SetBkMode(TRANSPARENT);
  76.  
  77.   dc.TextOut(0, 0, text);
  78.  
  79.   CSize size = dc.GetTextExtent(text);
  80.   dc.MoveTo(0, size.cy);
  81.   dc.LineTo(size.cx, size.cy);
  82.  
  83.   dc.SelectObject(oldPen);
  84.   dc.SelectObject(oldFont);
  85. }
  86.  
  87.  
  88. BOOL CUrlStatic::Create(CWnd *parent, UINT staticId) 
  89. {
  90.   CString text;
  91.   RECT rt;
  92.  
  93.   CWnd *base = parent->GetDlgItem(staticId);
  94.  
  95.   base->GetWindowRect(&rt);
  96.   parent->ScreenToClient(&rt);
  97.  
  98.   base->GetWindowText(text);
  99.   base->ShowWindow(SW_HIDE);
  100.  
  101.   return CStatic::Create(text, WS_CHILD | WS_VISIBLE | SS_LEFT | SS_NOTIFY, 
  102.                          rt, parent, staticId);
  103. }
  104.  
  105.  
  106. void CUrlStatic::OnLButtonDown(UINT nFlags, CPoint point) 
  107. {
  108.     CStatic::OnLButtonDown(nFlags, point);
  109.  
  110.   char *ignored = "";
  111.   char browserExec[MAX_PATH];
  112.   char filename[MAX_PATH];
  113.  
  114.  
  115.     GetTempPath(MAX_PATH, filename);
  116.   GetTempFileName(filename, "html", 0, filename);
  117.   strncat(filename, ".htm", MAX_PATH);
  118.   filename[MAX_PATH] = '\0';
  119.  
  120.   FILE *fp = fopen(filename, "w");
  121.   if (NULL == fp) {
  122.     MessageBox("Unable to open URL", "Browser Not Found", MB_ICONWARNING);
  123.     return;
  124.   }
  125.  
  126.   fputs("<html></html>", fp);
  127.   fclose(fp);
  128.   
  129.   browserExec[0] = '\0';
  130.   FindExecutable(filename, ignored, browserExec);
  131.   unlink(filename);
  132.  
  133.   if (strlen(browserExec) <= 0) {
  134.     MessageBox("Unable to open URL", "Browser Not Found", MB_ICONWARNING);
  135.  
  136.   } else {
  137.       CString url;
  138.  
  139.       GetWindowText(url);
  140.  
  141.       if ((int)ShellExecute(m_hWnd, "open", browserExec, 
  142.                        url, ignored, SW_SHOWNORMAL) <= 32) {
  143.         MessageBox("Unable to open URL", "Browser 'open' Failed", MB_ICONWARNING);
  144.       }
  145.   }
  146.  
  147. }
  148.