RchEdit.h
上传用户:dimled
上传日期:2007-02-08
资源大小:2367k
文件大小:4k
源码类别:

RichEdit

开发平台:

Visual C++

  1. #ifndef RCHEDIT_H
  2. #define RCHEDIT_H
  3. int GetFileName(char*, int, HWND);
  4. #define MENU 101
  5. #define FILE_OPEN 1001
  6. #define FILE_EXIT 1002
  7. #define OPTIONS_COPY 1003
  8. #define OPTIONS_PASTE 1004
  9. #define OPTIONS_CLEAR 1005
  10. #define ABOUT_ABOUT 1006
  11. #include <richedit.h>
  12. #include <fstream>
  13. using std::fstream;
  14. #include <string>
  15. using std::string;
  16. using std::ios;
  17. #define StreamType_File 1
  18. #define StreamType_Buffer 2
  19. #define StreamType_NA 0
  20. int StreamType = StreamType_NA;
  21. void SetStreamType(int st)
  22. {
  23. //1 = file, 2 = buffer
  24. //StreamType_File,  StreamType_Buffer
  25. StreamType = st;
  26. }
  27. int GetStreamType(void)
  28. {
  29. return StreamType;
  30. }
  31. static DWORD CALLBACK EditStreamCallback(DWORD dwCookie,LPBYTE pbBuff,LONG cb,LONG *pcb)
  32. {
  33. /*
  34. DWORD CALLBACK EditStreamCallback(
  35.   DWORD dwCookie, // application-defined value (i use this to pass file handle or TCHAR buffer address)
  36.   LPBYTE pbBuff,  // pointer to a buffer (you write/read to/from this)
  37.   LONG cb,        // number of bytes to read or write (# of bytes it will allow you to read/write)
  38.   LONG *pcb       // pointer to number of bytes transferred
  39. );
  40. */
  41. if(StreamType==StreamType_NA)
  42. return 0;
  43. else if(StreamType==StreamType_File) //were we passed a file object?
  44. {
  45. fstream *fpntr = (fstream*)dwCookie; //cast it as a file object
  46. fpntr->read((char *)pbBuff,(unsigned int)cb); //read data
  47. *pcb = (long)fpntr->gcount(); //tells windows when to stop calling the callback function
  48. }
  49. else if(StreamType==StreamType_Buffer) //were we passed a string object?
  50. {
  51. string *writes = (string *)dwCookie; //cast as string
  52. if(writes->size()<cb) //check if we are allowed to write rest or not
  53. {//since the size of the string is less then what were allowed
  54. *pcb = (long)writes->size(); //set size to string size
  55. memcpy(pbBuff,(void *)writes->data(),*pcb); //write rest
  56. writes->erase(); //erase whole string
  57. }
  58. else
  59. { //string is too big to write
  60. *pcb = cb; //set size to allowed transfer size
  61. memcpy(pbBuff,(void *)writes->data(),*pcb); //write allowed amount
  62. writes->erase(0,cb); //erase only what we wrote
  63. }
  64. }
  65. return 0;
  66. }
  67. ///////////////////////////////////////////////////////////////////////////
  68. static DWORD CALLBACK EditStreamCallbackRead(DWORD dwCookie,LPBYTE pbBuff,LONG cb,LONG *pcb)
  69. {
  70. string *reads = (string *)dwCookie; //here we read into a string
  71. //try changing this to write to a file
  72. if(cb>0) //as long as theres something to get
  73. {
  74. *pcb = cb; //set to size of what we can get
  75. reads->append((char *)pbBuff,cb); //get
  76. }
  77. return 0;
  78. }
  79. ////////////////////////////////////////////////////////////////
  80. int GetFileName(char *filename, int len, HWND hWnd)
  81. {
  82. //this will open that nice windows dialog for opening/saving files
  83. //no need to reinvent the wheel (yea even I said that!)
  84. //plus these look very professional
  85. OPENFILENAME openpic;
  86. ZeroMemory(&openpic, sizeof(OPENFILENAME));
  87. openpic.lStructSize = sizeof(OPENFILENAME);
  88. openpic.hwndOwner = hWnd;
  89. openpic.lpstrFilter = "Text Files (*.txt/*.dat/*.log)*.txt*.dat*.log"; //constant for this example
  90. openpic.lpstrFile = filename;
  91. openpic.lpstrInitialDir = "c:\"; //this is default, no need to hold onto
  92. //last directory for an example
  93. openpic.nMaxFile = len;
  94. openpic.lpstrTitle = ("PlanetCpp richedit example.");
  95. openpic.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
  96. return GetOpenFileName(&openpic); //get and return status
  97. }
  98. ////////////////////////////////////////////////////////////////
  99. #endif