NotepadCtrl.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // NotepadCtrl.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "styler.h"
  5. #include "NotepadCtrl.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CNotepadCtrl
  13. CNotepadCtrl::CNotepadCtrl() : m_dropTarget(this)
  14. {
  15. LOGFONT lfIcon;
  16. VERIFY( ::SystemParametersInfo( SPI_GETICONTITLELOGFONT, sizeof( lfIcon ), &lfIcon, 0 ) );
  17. VERIFY( m_fntText.CreateFontIndirect(&lfIcon  ) );
  18. }
  19. CNotepadCtrl::~CNotepadCtrl()
  20. {
  21. }
  22. BOOL CNotepadCtrl::Create(CWnd* pParent)
  23. {
  24. if (!CXTPEdit::Create(WS_VSCROLL | WS_HSCROLL| WS_VISIBLE | WS_CHILD | 
  25. ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_NOHIDESEL | ES_WANTRETURN, 
  26. CRect(0,0,0,0), pParent, 1))
  27. {
  28. return FALSE;
  29. }
  30. CFile fNotepad;
  31. if (fNotepad.Open(GetModuleDir() + _T("notepad"), CFile::modeRead))
  32. {
  33. DWORD dwSize = (DWORD)fNotepad.GetLength();
  34. TCHAR* pBuffer = new TCHAR[dwSize / sizeof(TCHAR) + 1];
  35. if (pBuffer)
  36. {
  37. fNotepad.Read(pBuffer, dwSize);
  38. pBuffer[dwSize/sizeof(TCHAR)] = 0;
  39. SetWindowText(pBuffer);
  40. delete[] pBuffer;
  41. }
  42. fNotepad.Close();
  43. }
  44. m_dropTarget.Register(this);
  45. SetFont(&m_fntText, FALSE);
  46. return TRUE;
  47. }
  48. BEGIN_MESSAGE_MAP(CNotepadCtrl, CXTPEdit)
  49. //{{AFX_MSG_MAP(CNotepadCtrl)
  50. ON_WM_DESTROY()
  51. //}}AFX_MSG_MAP
  52. END_MESSAGE_MAP()
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CNotepadCtrl message handlers
  55. void CNotepadCtrl::OnDestroy() 
  56. {
  57. CString str;
  58. CFile fNotepad;
  59. if (fNotepad.Open(GetModuleDir() + _T("notepad"), CFile::modeWrite | CFile::modeCreate))
  60. {
  61. GetWindowText(str);
  62. if (str.GetLength()) fNotepad.Write((LPCTSTR)str, str.GetLength() * sizeof(TCHAR));
  63. fNotepad.Close();
  64. }
  65. CEdit::OnDestroy();
  66. }
  67. DROPEFFECT CTxtDropTarget::OnDragScroll(CWnd* /*pWnd*/, DWORD /*dwKeyState*/, CPoint /*point*/)
  68. {
  69. return DROPEFFECT_SCROLL | DROPEFFECT_COPY | DROPEFFECT_LINK;
  70. }
  71. DROPEFFECT CTxtDropTarget::OnDragEnter(CWnd* /*pWnd*/, COleDataObject* /*pDataObject*/, 
  72.                                       DWORD /*dwKeyState*/, CPoint /*point*/)
  73. {
  74.     return DROPEFFECT_COPY;
  75. }
  76. void CTxtDropTarget::OnDragLeave(CWnd* /*pWnd*/)
  77. {
  78. }
  79. DROPEFFECT CTxtDropTarget::OnDragOver(CWnd* /*pWnd*/, COleDataObject* /*pDataObject*/, 
  80.                                      DWORD /*dwKeyState*/, CPoint /*point*/)
  81. {  
  82. return DROPEFFECT_COPY;
  83. }
  84. BOOL CTxtDropTarget::OnDrop(CWnd* /*pWnd*/, COleDataObject* pDataObject,
  85.                            DROPEFFECT /*dropEffect*/, CPoint /*point*/)
  86. {
  87. try
  88. {
  89. HGLOBAL hData=pDataObject->GetGlobalData(CF_TEXT);
  90. if (hData)
  91. {
  92. LPCSTR lpcszData=(LPCSTR)GlobalLock(hData);
  93. CString strText(lpcszData);
  94. GlobalUnlock(hData);
  95. //if it is a link?
  96. HGLOBAL hLinkData=pDataObject->GetGlobalData((CLIPFORMAT)RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR));
  97. if(hLinkData)
  98. {
  99. LPCSTR lpcszLink;
  100. lpcszLink=((LPCSTR)GlobalLock(hLinkData)) + 76;
  101. strText += "rn";
  102. strText += lpcszLink;
  103. strText = strText.Left(strText.GetLength()-4);
  104. GlobalUnlock(hLinkData);
  105. }
  106. strText += "rnrn";
  107. ASSERT(m_pParent && m_pParent->m_hWnd);
  108. if(m_pParent && m_pParent->m_hWnd)
  109. {
  110. int nLen = ((CEdit*)m_pParent)->GetWindowTextLength();
  111. ((CEdit*)m_pParent)->SetSel(nLen, nLen);
  112. ((CEdit*)m_pParent)->ReplaceSel(strText);
  113. }
  114. }
  115. }
  116. catch(...)
  117. {
  118. }
  119.     return TRUE;
  120. }