NewScrdefDlg.cpp
上传用户:sunbbj
上传日期:2013-03-21
资源大小:111k
文件大小:9k
源码类别:

屏幕保护

开发平台:

Visual C++

  1. // NewScrdefDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "NewScrdef.h"
  5. #include "NewScrdefDlg.h"
  6. #include "PassDlg.h"
  7. #include <math.h>
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  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. // CNewScrdefDlg dialog
  52. CNewScrdefDlg::CNewScrdefDlg(CWnd* pParent /*=NULL*/)
  53. : CDialog(CNewScrdefDlg::IDD, pParent)
  54. {
  55. //{{AFX_DATA_INIT(CNewScrdefDlg)
  56. // NOTE: the ClassWizard will add member initialization here
  57. //}}AFX_DATA_INIT
  58. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  59. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  60. m_pMemDC = NULL;
  61. m_pMemBitmap = NULL;
  62. m_pPen = NULL;
  63. m_nGirlPosX = 0;
  64. m_bAgument = TRUE;
  65. m_pFont = NULL;
  66. }
  67. void CNewScrdefDlg::DoDataExchange(CDataExchange* pDX)
  68. {
  69. CDialog::DoDataExchange(pDX);
  70. //{{AFX_DATA_MAP(CNewScrdefDlg)
  71. // NOTE: the ClassWizard will add DDX and DDV calls here
  72. //}}AFX_DATA_MAP
  73. }
  74. BEGIN_MESSAGE_MAP(CNewScrdefDlg, CDialog)
  75. //{{AFX_MSG_MAP(CNewScrdefDlg)
  76. ON_WM_SYSCOMMAND()
  77. ON_WM_PAINT()
  78. ON_WM_QUERYDRAGICON()
  79. ON_WM_TIMER()
  80. ON_WM_DESTROY()
  81. ON_WM_LBUTTONDOWN()
  82. ON_WM_KEYDOWN()
  83. //}}AFX_MSG_MAP
  84. END_MESSAGE_MAP()
  85. /////////////////////////////////////////////////////////////////////////////
  86. // CNewScrdefDlg message handlers
  87. BOOL CNewScrdefDlg::OnInitDialog()
  88. {
  89. CDialog::OnInitDialog();
  90. // Add "About..." menu item to system menu.
  91. // IDM_ABOUTBOX must be in the system command range.
  92. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  93. ASSERT(IDM_ABOUTBOX < 0xF000);
  94. CMenu* pSysMenu = GetSystemMenu(FALSE);
  95. if (pSysMenu != NULL)
  96. {
  97. CString strAboutMenu;
  98. strAboutMenu.LoadString(IDS_ABOUTBOX);
  99. if (!strAboutMenu.IsEmpty())
  100. {
  101. pSysMenu->AppendMenu(MF_SEPARATOR);
  102. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  103. }
  104. }
  105. // Set the icon for this dialog.  The framework does this automatically
  106. //  when the application's main window is not a dialog
  107. SetIcon(m_hIcon, TRUE); // Set big icon
  108. SetIcon(m_hIcon, FALSE); // Set small icon
  109. // TODO: Add extra initialization here
  110. Init();
  111. return TRUE;  // return TRUE  unless you set the focus to a control
  112. }
  113. void CNewScrdefDlg::OnSysCommand(UINT nID, LPARAM lParam)
  114. {
  115. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  116. {
  117. CAboutDlg dlgAbout;
  118. dlgAbout.DoModal();
  119. }
  120. else
  121. {
  122. CDialog::OnSysCommand(nID, lParam);
  123. }
  124. }
  125. // If you add a minimize button to your dialog, you will need the code below
  126. //  to draw the icon.  For MFC applications using the document/view model,
  127. //  this is automatically done for you by the framework.
  128. void CNewScrdefDlg::OnPaint() 
  129. {
  130. if (IsIconic())
  131. {
  132. CPaintDC dc(this); // device context for painting
  133. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  134. // Center icon in client rectangle
  135. int cxIcon = GetSystemMetrics(SM_CXICON);
  136. int cyIcon = GetSystemMetrics(SM_CYICON);
  137. CRect rect;
  138. GetClientRect(&rect);
  139. int x = (rect.Width() - cxIcon + 1) / 2;
  140. int y = (rect.Height() - cyIcon + 1) / 2;
  141. // Draw the icon
  142. dc.DrawIcon(x, y, m_hIcon);
  143. }
  144. else
  145. {
  146. CDialog::OnPaint();
  147. }
  148. }
  149. // The system calls this to obtain the cursor to display while the user drags
  150. //  the minimized window.
  151. HCURSOR CNewScrdefDlg::OnQueryDragIcon()
  152. {
  153. return (HCURSOR) m_hIcon;
  154. }
  155. void CNewScrdefDlg::Init()
  156. {
  157. m_pDC = GetDC();
  158. m_pMemDC = new CDC();
  159. m_pMemDCLittleGirl = new CDC();
  160. m_pMemBitmap = new CBitmap();
  161. m_pMemDC->CreateCompatibleDC(m_pDC);
  162. m_pMemBitmap->CreateCompatibleBitmap(m_pDC, 1024, 768);
  163. m_pMemDC->SelectObject(m_pMemBitmap);
  164. m_pMemDC->SelectObject(&CBrush(RGB(128,0,128)));
  165. m_pMemDCLittleGirl->CreateCompatibleDC(m_pDC);
  166.     m_bitmapLittleGirl.LoadBitmap(IDB_BITMAP_LITTLEGIRL);
  167. m_pMemDCLittleGirl->SelectObject(&m_bitmapLittleGirl);
  168. BITMAP bt;
  169.     m_bitmapLittleGirl.GetBitmap(&bt);
  170. m_szBitmapLittleGirl.cx = bt.bmWidth;
  171. m_szBitmapLittleGirl.cy = bt.bmHeight;
  172. // m_pPen = new CPen(PS_SOLID, 3, RGB(255, 84 , 219));
  173. // m_pMemDC->SelectObject(m_pPen);
  174. this->SetTimer(1, 10, NULL);
  175. ShowWindow(3);
  176. ::ShowCursor(SW_HIDE);
  177. CString strMyPath;
  178. strMyPath = "D:\Scrdef\my.txt";
  179. if (m_stFile.Open(strMyPath, CFile::modeRead))
  180. {
  181. m_bStFileCanRead = TRUE;
  182. CreateFont();
  183. m_pMemDC->SelectObject(m_pFont);
  184. m_pMemDC->SetTextColor(RGB(255,0,255));
  185. m_pMemDC->SetBkMode(TRANSPARENT);
  186. }
  187. else
  188. {
  189. m_bStFileCanRead = FALSE;
  190. }
  191. }
  192. void CNewScrdefDlg::OnTimer(UINT nIDEvent) 
  193. {
  194. Render();
  195. }
  196. void CNewScrdefDlg::OnDestroy() 
  197. {
  198. if (m_pMemBitmap != NULL)
  199. {
  200. delete m_pMemBitmap;
  201. }
  202. if (m_pMemDC != NULL)
  203. {
  204. delete m_pMemDC;       
  205. }
  206. if (m_pPen != NULL)
  207. {
  208. delete m_pPen;
  209. }
  210. if (m_pMemDCLittleGirl != NULL)
  211. {
  212. delete m_pMemDCLittleGirl;
  213. }
  214. if (m_pFont != NULL)
  215. {
  216. delete m_pFont;
  217. }
  218. ::DeleteObject(m_bitmapLittleGirl);
  219. ReleaseDC(m_pDC);
  220. CDialog::OnDestroy();
  221. }
  222. void CNewScrdefDlg::Render()
  223. {
  224. // m_pMemDC->SelectObject(&CBrush(RGB(0,0,0)));
  225. m_pMemDC->Rectangle(0,0,1024,768);
  226. DrawWant();
  227. m_pDC->StretchBlt(0,0,
  228.              1024,768,
  229.  m_pMemDC,
  230.  0,0,1024,768,SRCCOPY);
  231. }
  232. void CNewScrdefDlg::DrawWant()
  233. {
  234. m_pMemDC->Rectangle(0,0,1024,768);
  235. m_pMemDC->SelectStockObject(BLACK_BRUSH);
  236. //公共变量
  237.     static int af = 0;
  238. float r;
  239. static int ct;
  240. float a;
  241. int x,y;
  242. int x0,y0;
  243. static POINT ptLast;
  244. ptLast.x = 512;
  245. ptLast.y = 384;
  246. a = 0.5;
  247. x0 = 512;
  248. y0 = 384;
  249. //
  250. //正炫
  251. #if 0 
  252. // int y;
  253. // int x0 = 512;
  254. // int y0 = 384;
  255. // static int ct = 0;
  256. for (int i=0; i<1024; i++)
  257. {
  258. y = y0 + 40*sin(cos((i + 0 )*PI/180));
  259. x = i + x0;
  260. m_pMemDC->SetPixel(x,y, RGB(i,i+y,y));
  261. }
  262. #endif
  263. #if 1  //圆渐开线
  264. for (ct=0; ct<1080; ct++)
  265. {
  266. r = ct * a;
  267. x = x0 + int(r * cos((ct+af) * PI / 180.0));
  268. y = y0 + int(r * sin((ct+af) * PI / 180.0));
  269. m_pMemDC->SetPixel(x,y,RGB(x,y,x+y));   
  270. }
  271. for (ct=0; ct<360; ct++)
  272. {
  273. r = 100*cos((3*ct) * PI / 180.0);
  274. m_ptArray[ct].x = x0 + int(r * cos((ct+af) * PI / 180.0));
  275. m_ptArray[ct].y = y0 + int(r * sin((ct+af) * PI / 180.0));
  276. }
  277. CRgn rgnRose;
  278. rgnRose.CreatePolygonRgn(m_ptArray, 360, WINDING);
  279. m_pMemDC->FillRgn(&rgnRose, &CBrush(RGB(255,0,255)));
  280. #endif
  281. af += 5;
  282. #if 0
  283. //球
  284. int z = 0;
  285. int R = 100;
  286. for (ct=0; ct<360; ct++)
  287. {
  288. for (z=0; z<5; z++)
  289. {
  290. x = x0 + R * cos(ct * PI /180.0) - z* sin(45 * PI / 180.0);
  291. y = y0 + R * sin(ct * PI /180.0) + z* sin(45 * PI / 180.0);
  292. m_pMemDC->SetPixel(x,y, RGB(255,0,255));
  293. }
  294. }
  295. //球
  296. #endif
  297. if (m_bAgument)
  298. {
  299. m_nGirlPosX += 2;
  300. if (m_nGirlPosX >= 1024 - m_szBitmapLittleGirl.cx)
  301. {
  302. m_bAgument = FALSE;
  303. }
  304. }
  305. else
  306. {
  307. m_nGirlPosX -= 2;
  308. if (m_nGirlPosX <= 0)
  309. {
  310. m_bAgument = TRUE;
  311. }
  312. }
  313. ::TransparentBlt(m_pMemDC->m_hDC,
  314.              m_nGirlPosX,
  315.  0,
  316.  m_szBitmapLittleGirl.cx,
  317.  m_szBitmapLittleGirl.cy,
  318.  m_pMemDCLittleGirl->m_hDC,
  319.  0,
  320.  0,
  321.  m_szBitmapLittleGirl.cx,
  322.  m_szBitmapLittleGirl.cy,
  323.  RGB(0,255,255));
  324. #if 0
  325. TRACE("Info(%d,%d,%d,%d n",m_ptArray[ct-1].x,
  326.  m_ptArray[ct-1].y,
  327.  m_szBitmapLittleGirl.cx,
  328.  m_szBitmapLittleGirl.cy);
  329. #endif
  330. if (m_bStFileCanRead)
  331. {
  332. if (af % 500 == 0)
  333. {
  334. if (!m_stFile.ReadString(m_strRead))
  335. {
  336. m_stFile.SeekToBegin();
  337. }
  338. }
  339. //if (m_stFile.E
  340. m_pMemDC->TextOut(100,600,m_strRead);
  341. }
  342. }
  343. void CNewScrdefDlg::OnLButtonDown(UINT nFlags, CPoint point) 
  344. {
  345. #if 0
  346. return;
  347. CPassDlg dlgPass;
  348. int n = dlgPass.DoModal();
  349. if (dlgPass.DoModal() == IDOK)
  350. {
  351. if (dlgPass.m_strPassword == "Hello")
  352. {
  353. CDialog::OnOK();
  354. }
  355. else
  356. {
  357.             ((CStatic*)(dlgPass.GetDlgItem(IDC_STATIC_PASSWORD)))->SetWindowText(_T("密码错误,请再重新输入"));
  358. return;
  359. }
  360. }
  361. #endif
  362. CDialog::OnOK();
  363. }
  364. void CNewScrdefDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
  365. {
  366. CDialog::OnOK();
  367. }
  368. void CNewScrdefDlg::CreateFont()
  369. {
  370. LOGFONT logfont;
  371. logfont.lfCharSet = 134;
  372. logfont.lfClipPrecision = 0;
  373. logfont.lfEscapement = 0;
  374. //logfont.lfFaceName = "";
  375. logfont.lfHeight = -56;
  376. logfont.lfItalic = 0;
  377. logfont.lfOrientation = 0;
  378. logfont.lfOutPrecision = 0;
  379. logfont.lfPitchAndFamily = 0;
  380. logfont.lfQuality = 0;
  381. logfont.lfStrikeOut = 0;
  382. logfont.lfUnderline = 0;
  383. logfont.lfWeight = 700;
  384. logfont.lfWidth = 0;
  385. m_pFont = new CFont();
  386. m_pFont->CreateFontIndirect(&logfont);
  387. }