Solved

How do I get RichEdit to work?

Posted on 2000-03-29
14
802 Views
Last Modified: 2012-06-21
I can't get RichEdit to show up.  I'm using the following code:

#include <richedit.h>

...

CreateWindowEx(WS_EX_CLIENTEDGE, RICHEDIT_CLASS,NULL, WS_CHILD | WS_VISIBLE  |  ES_MULTILINE | ES_AUTOHSCROLL, 0, 0, 300, 300, hwnd, (HMENU) 1, hInstance, NULL);

Do i need to add a lib or something?  Why isn't this working?
0
Comment
Question by:Markenstein
  • 7
  • 5
  • 2
14 Comments
 

Expert Comment

by:BCheatham
ID: 2667777
what compiler are you using and what errors are you getting back?
0
 

Author Comment

by:Markenstein
ID: 2667791
VC++ 6, i get no errors, nor relevant warnings.  It does everything fine just that nothing shows up.
0
 
LVL 3

Expert Comment

by:daitt
ID: 2667800
You must call AfxinitRichEdit() in InitInstance routine of your App class
0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 
LVL 3

Expert Comment

by:daitt
ID: 2667804
Typo error:
AfxInitRichEdit
0
 

Expert Comment

by:BCheatham
ID: 2667810
Sorry,
I can't help you. I am still a C++ student myself.
0
 

Author Comment

by:Markenstein
ID: 2667921
So do i have to use MFC to use RichEdit or is that Afx prefix mean something else?
0
 
LVL 3

Expert Comment

by:daitt
ID: 2668269
Sorry I thought I was in MFC area :(
For your question, you can add this line:
LoadLibrary("riched32.dll");

There's also an example for RichEdit in MSDN: REITP.C
Best regards
0
 

Author Comment

by:Markenstein
ID: 2671273
That didn't work, it still displays nothing.  I have the following:

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

....

in WinMain

LoadLibrary("riched32.dll");

in WinProc under WM_SHOWWINDOW

CreateWindow(RICHEDIT_CLASS, NULL, WS_CHILD | WS_VISIBLE  | ES_MULTILINE | ES_AUTOHSCROLL, 0, 0, 300, 300, hwnd, (HMENU) 1, hInstance, NULL);



0
 

Author Comment

by:Markenstein
ID: 2671544
Adjusted points from 50 to 75
0
 
LVL 3

Accepted Solution

by:
daitt earned 75 total points
ID: 2671555
There're two versions of RichEdit. I think RICHEDIT_CLASS might be RichEdit 2.0. Try this in WinMain:
LoadLibrary("riched20.dll");
instead of riched32.dll
0
 

Author Comment

by:Markenstein
ID: 2671604
That didn't worth either... I tried the REIPT example and that didn't work either.  It compiled but it said it couldn't make the RichEdit.  Maybe there is an error on my side?  I'm running NT4, SP6
0
 
LVL 3

Expert Comment

by:daitt
ID: 2672296
I created an application with VC6 Application Wizard. Adding 3 lines
   #include <richedit.h>
   LoadLibrary("Riched20.dll");
   CreateWindow(RICHEDIT_CLASS, NULL, WS_CHILD | WS_VISIBLE| ES_MULTILINE | ES_AUTOHSCROLL, 0, 0, 300, 300, hWnd, 0, hInst, NULL);

and it works fine. (I also removed some codes to shorten the program).

Try this code. If you still not able to run it you should look for the file riched20.dll in your file system. Defaultly it's in c:\winnt\system32 (or c:\windows\system32). If you have riched32.dll, you can use RichEdit 1.0 (its class name is RichEdit instead of RICHEDIT_CLASS)



#include "stdafx.h"
#include "resource.h"
#include <richedit.h>

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;                                                // current instance
TCHAR szTitle[MAX_LOADSTRING];                                                // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];                                                // The title bar text

// Foward declarations of functions included in this code module:
ATOM                        MyRegisterClass(HINSTANCE hInstance);
BOOL                        InitInstance(HINSTANCE, int);
LRESULT CALLBACK      WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK      About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
       // TODO: Place code here.
      MSG msg;
      HACCEL hAccelTable;

      // Initialize global strings
      LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
      LoadString(hInstance, IDC_TESTRE, szWindowClass, MAX_LOADSTRING);
      MyRegisterClass(hInstance);

      // Perform application initialization:
      if (!InitInstance (hInstance, nCmdShow))
      {
            return FALSE;
      }

      hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_TESTRE);

      // Main message loop:
      while (GetMessage(&msg, NULL, 0, 0))
      {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                  TranslateMessage(&msg);
                  DispatchMessage(&msg);
            }
      }

      return msg.wParam;
}

ATOM MyRegisterClass(HINSTANCE hInstance)
{
      WNDCLASSEX wcex;

      wcex.cbSize = sizeof(WNDCLASSEX);

      wcex.style                  = CS_HREDRAW | CS_VREDRAW;
      wcex.lpfnWndProc      = (WNDPROC)WndProc;
      wcex.cbClsExtra            = 0;
      wcex.cbWndExtra            = 0;
      wcex.hInstance            = hInstance;
      wcex.hIcon                  = LoadIcon(hInstance, (LPCTSTR)IDI_TESTRE);
      wcex.hCursor            = LoadCursor(NULL, IDC_ARROW);
      wcex.hbrBackground      = (HBRUSH)(COLOR_WINDOW+1);
      wcex.lpszMenuName      = NULL;
      wcex.lpszClassName      = szWindowClass;
      wcex.hIconSm            = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

      return RegisterClassEx(&wcex);
}


BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable
   LoadLibrary("Riched20.dll");

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
      switch (message)
      {
            case WM_DESTROY:
                  PostQuitMessage(0);
                  break;
            case WM_SHOWWINDOW:
                  CreateWindow(RICHEDIT_CLASS, NULL, WS_CHILD | WS_VISIBLE| ES_MULTILINE | ES_AUTOHSCROLL, 0, 0, 300, 300, hWnd, 0, hInst, NULL);
                  break;
            default:
                  return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
0
 

Author Comment

by:Markenstein
ID: 2677121
Alright i got it, i don't know what i did wrong...  Anyways sorry for taking so long.
0
 

Author Comment

by:Markenstein
ID: 2677126
It worked when i moved LoadLibrary from WinMain to right before the CreateWindowEx function.
0

Featured Post

Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
TTimer no longer functioning 7 90
Prototype for MessageDlg in Embacadero XE 2 2 39
White board coding practice 3 88
Installshield for Embarcadero EX 10.1 Berlin 4 40
When writing generic code, using template meta-programming techniques, it is sometimes useful to know if a type is convertible to another type. A good example of when this might be is if you are writing diagnostic instrumentation for code to generat…
C++ Properties One feature missing from standard C++ that you will find in many other Object Oriented Programming languages is something called a Property (http://www.experts-exchange.com/Programming/Languages/CPP/A_3912-Object-Properties-in-C.ht…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question