Code:
#if !defined RichEditControlsH
#define RichEditControlsH
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <string>
#include <richedit.h>
using std::string;
HWND SEND, richedit1, richedit2;
static CHARFORMAT cf = { sizeof(CHARFORMAT), CFM_COLOR, 0, 0, 0, RGB(0,0,0), 0, 0 };
EDITSTREAM ES;
// LoadCallback
//
// Reader callback
//
static DWORD CALLBACK LoadCallback(unsigned long dwCookie,
LPBYTE pbBuff,
LONG cb,
LONG* pcb )
{
HANDLE hFile = (HANDLE) dwCookie;
ReadFile(hFile, pbBuff, cb, (DWORD*)pcb, NULL);
return 0;
}
// SaveCallback
//
// Writer callback
//
static DWORD CALLBACK SaveCallback(unsigned long dwCookie,
LPBYTE pbBuff,
LONG cb,
LONG* pcb)
{
HANDLE hFile = (HANDLE) dwCookie;
WriteFile(hFile, pbBuff, cb, (DWORD*)pcb, NULL);
return 0;
}
/*
* Load a RTF file with the given file name into a rich edit control.
*/
BOOL LoadRichEdit(HWND hwndRich, LPCTSTR szFileName)
{
HANDLE hFile = CreateFile(
szFileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile)
{
EDITSTREAM eds;
//
// Prepare the structure
//
eds.dwCookie = (unsigned long) hFile;
eds.dwError = 0;
eds.pfnCallback = LoadCallback;
//
// Read in the file
//
SendMessage(hwndRich, EM_STREAMIN, (WPARAM) SF_RTF, (LPARAM) &eds);
CloseHandle(hFile);
return (eds.dwError == 0);
}
return FALSE;
}
/*
* Save the contents of a rich edit control to a RTF file with the given file name.
*/
BOOL SaveRichEdit(HWND hwndRich, LPCTSTR szFileName)
{
HANDLE hFile = CreateFile(
szFileName,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile)
{
EDITSTREAM eds;
//
// Prepare the structure
//
eds.dwCookie = (unsigned long) hFile;
eds.dwError = 0;
eds.pfnCallback = SaveCallback;
//
// Save the file
//
SendMessage(hwndRich, EM_STREAMOUT, (WPARAM) SF_RTF, (LPARAM) &eds);
CloseHandle(hFile);
return (eds.dwError == 0);
}
return FALSE;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE);
switch(msg)
{
case WM_COMMAND:
if( HIWORD(wParam) == BN_CLICKED ){
if((HWND) lParam == SEND){
LoadRichEdit(richedit1,"test.rtf");
}
return 0;
}
return 0;
case WM_CLOSE:
PostQuitMessage(0);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HINSTANCE hLib;
static TCHAR chCntrlName[32];
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(GetStockObject(BLACK_BRUSH));
wc.lpszMenuName = NULL;
wc.lpszClassName = "AWindow";
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"aWindow","",
WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX | WS_CAPTION ,
CW_USEDEFAULT, CW_USEDEFAULT, 381, 422,
NULL, 0, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
hLib=LoadLibrary(TEXT("RICHED20.DLL"));
if (!hLib)
{
hLib=LoadLibrary(TEXT("RICHED32.DLL"));
if (!hLib)
{
MessageBox( NULL,
TEXT("Failed to load rich edit library"),
TEXT("ERROR"),
MB_OK|MB_ICONERROR);
return 0;
}
else
{
lstrcpy(chCntrlName,TEXT("RICHEDIT"));
}
}
else
{
lstrcpy(chCntrlName,RICHEDIT_CLASS);
}
richedit1 = CreateWindowEx(WS_EX_CLIENTEDGE,chCntrlName,TEXT(""),
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_BORDER|ES_MULTILINE,5,30,
360,210,hwnd,NULL,hInstance,NULL);
richedit2 = CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("EDIT"),TEXT(""),
WS_CHILD | WS_VISIBLE | WS_VSCROLL |ES_MULTILINE,5,260,
305,100,hwnd,NULL,hInstance,NULL);
if(richedit1 == NULL || richedit2 == NULL)
{
MessageBox(NULL, "Text box Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
SEND = CreateWindowEx(0,TEXT("BUTTON"),"Go",
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,315,260,50,100,hwnd,NULL,hInstance,NULL);
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return 0;
}
#endif
it's also supposed to be able to save to rtf files, but it doesn't seem to work?